天天看点

Hibernate_部门查询

package cn.itcast.test.dao;

import java.util.List;

import cn.itcast.test.entity.Department;

/**
 * 接口:部门
 * 
 * @author 风清杨
 * @version V5.0
 */
public interface DepartmentDao {
  /**
   * 增加一个部门
   * 
   * @param department
   *            要增加的部门
   */
  public abstract void save(Department department);

  /**
   * 更新一个部门的信息(更改名称)
   * 
   * @param department
   *            要更新的部门
   */
  public abstract void update(Department department);

  /**
   * 把部门中所有的员工都取消关联
   * 
   * @param id
   *            要与员工取消关联的部门编号
   */
  public abstract void removeRlieve(Long id);

  /**
   * 删除一个部门,并把所有的子部门删掉,如果部门中有员工,则不能删除。
   * 
   * @param id
   *            要删除的部门id
   */
  public abstract void delete(Long id);

  /**
   * 根据id查询部门
   * 
   * @param id
   *            部门id
   * @return 返回部门
   */
  public abstract Department getById(Long id);

  /**
   * 查询最顶级部门,按id升序排列(最顶级的就是没有上级的部门)
   * 
   * @return 其顶级部门
   */
  public abstract List<Department> parentAsc();

  /**
   * 查询某部门的所有子部门,按id升序排序
   * 
   * @param department
   *            要查询的部门
   * @return 返回其子部门
   */
  public abstract List<Department> childrenAsc(String department);

  /**
   * 员工的总数量,部门的总数量,每个部门中员工的数量。
   * 
   * @param department
   *            要查询的部门
   * @return 返回总数
   */
  public abstract QueryResult findCount();
}      
package cn.itcast.test.dao.impl;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.itcast.test.dao.DepartmentDao;
import cn.itcast.test.dao.QueryResult;
import cn.itcast.test.entity.Department;

/**
 * 实现:部门
 * 
 * @author 风清杨
 * @version V5.0
 */
public class DepartmentDaoImpl implements DepartmentDao {

  @Override
  public void save(Department department) {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // --------------------------------

      session.save(department);// 保存

      // --------------------------------
      // 提交事务
      tx.commit();
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }
  }

  @Override
  public void update(Department department) {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // --------------------------------

      session.update(department);

      // --------------------------------
      // 提交事务
      tx.commit();
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }

  }

  @Override
  public void removeRlieve(Long id) {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // --------------------------------

      Department department = (Department) session.get(Department.class, id);
      department.getEmployee().clear();

      session.update(department);
      // --------------------------------
      // 提交事务
      tx.commit();
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }
  }

  @Override
  public void delete(Long id) {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // --------------------------------
      // 删除一个部门,并把所有的子部门删掉,如果部门中有员工,则不能删除。
      Department department = (Department) session.get(Department.class, 1L);
      if (!department.getEmployee().isEmpty()) {
        System.out.println("该部门有员工");
      } else {
        session.delete(department);
        System.out.println("删除成功");
      }

      // --------------------------------
      // 提交事务
      tx.commit();
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }
  }

  @SuppressWarnings("unchecked")
  @Override
  public List<Department> parentAsc() {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // --------------------------------

      List<Department> list = session.createQuery(//
          "from Department e where e.parent is null order by e.id asc")//
          .list();

      // --------------------------------
      // 提交事务
      tx.commit();
      return list;
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }
  }

  @SuppressWarnings("unchecked")
  @Override
  public List<Department> childrenAsc(String department) {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // --------------------------------

      List<Department> list = session.createQuery(//
          "select d.children from Department d where d.name=:name")//
          .setParameter("name", department)//
          .list();

      // --------------------------------
      // 提交事务
      tx.commit();
      return list;
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }
  }

  @Override
  public QueryResult findCount() {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // --------------------------------
      // 员工的总数量
      Long employeeCount = (Long) session.createQuery(//
          "select count(e) from Employee e")//
          .uniqueResult();

      // 部门的总数量
      Long departmentCount = (Long) session.createQuery(//
          "select count(d) from Department d")//
          .uniqueResult();
      // 每个部门中员工的数量。
      List<Object> list = session.createQuery(//
          "select d.name,count(e.name) from Department d join d.employee e group by d.name")//
          .list();

      // --------------------------------
      // 提交事务
      tx.commit();
      return new QueryResult(employeeCount, departmentCount, list);
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }
  }

  @Override
  public Department getById(Long id) {
    // 打开Session
    Session session = Utils.getopensession();
    // 创建事务
    Transaction tx = null;
    try {
      // 开始事务
      tx = session.beginTransaction();
      // ----------------------------------

      Department department = (Department) session.get(Department.class, id);

      // ----------------------------------
      // 提交事务
      tx.commit();
      return department;
    } catch (RuntimeException e) {
      // 回滚事务
      tx.rollback();
      throw e;
    } finally {
      // 释放资源
      session.close();
    }
  }

}