public class Employee {
private long id;
private int type;
private String name;
private String password;
private double salary;
private Manager manager;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Manager getManager() {
return manager;
}
public void setManager(Manager manager) {
this.manager = manager;
}
@Override
public String toString() {
String rsl = "Employee [id=" + this.id + ", name=" + this.name + ", password=" + this.password + ", type=" + this.type + ", salary=" + this.salary;
if(this.manager != null) {
rsl += ", managerId=" + this.manager.getId() + ", managerName=" + this.manager.getName() + "]";
}
return rsl;
}
}
在这里针对Employee.java和Manager.java进行一点说明,这两个的数据库表都是employee_inf,但是Employee没有dept_name(部门名称),而Manager没有mgr_id(所属部门经理id)
其他的model对象这里就不多说,直接参考源码即可。
四,四,DAO((Data Access Object)层)层
1))DAO组件的定义组件的定义
在持久层之上,可以使用DAO组件再次封装数据库操作,这也是Java EE应用里常用的DAO模式。当使用DAO模式时,既体现了业务逻辑组件封装DAO组件的门面模式,也可分离业务逻辑组件和DAO
组件的功能:业务逻辑组件负责业务逻辑的变化,而DAO组件负责持久化技术的变化,这也正是桥接模式的使用。
引入DAO模式后,每个DAO组件包含了数据库的访问逻辑;每个DAO组件可对一个数据库表完成基本的CURD等操作。
DAO模式是一种更符合软件工程的开发方式,使用DAO模式有如下理由:
DAO模式抽象出数据访问方式,业务逻辑组件无须理会底层的数据库访问细节,而只专注于业务逻辑的实现,业务逻辑组件只负责业务功能的变化
DAO将数据访问集中在独立的一层,所有的数据访问都由DAO对象完成,这层独立的DAO分离了数据访问的实现与其他业务逻辑,使得系统更具可维护性
DAO还有助于提升系统的可移植性,独立的DAO层使得系统能在不同的数据库之间轻易切换,底层的数据库实现对于业务逻辑组件是透明的。数据库移植时仅仅影响DAO层,不同数据库的切换也
不会影响业务逻辑组件,因此提供了系统的可复用性
DAO组件提供了各持久化对象的基本的CRUD操作,而在DAO接口里则对DAO组件包含的各种CRUD方法提供了声明。使用DAO接口的原因是:避免业务逻辑组件与特定的DAO组件耦合
尽管很多的DAO组件方法需要根据业务逻辑需求的变化而变化,但是还是有一些通用的方法,在代码实现中,BaseDao接口包含了几个通用的方法,其定义如下:
package com.kevin.HRSystem.dao;
import java.util.List;
public interface BaseDao<T> {
void save(T entity); //保持持久化实例
void delete(long id); //根据主键删除持久化实例
void update(T entity); //更新持久化实例
T findById(long id); //根据主键加载持久化实例
List<T> findAll(); //获取数据表中全部的持久化实例
}
DAO接口无须给出任何实现,仅仅是DAO组件包含的CRUD方法的定义,这些方法定义的实现取决于底层的持久化技术,DAO组件的实现既可以使用传统的JDBC,也可以采用Hibernate,MyBatis等技
术。
如下是我们的EmployeeDao组件接口的源码
package com.kevin.HRSystem.dao;
import com.kevin.HRSystem.model.Employee;
import com.kevin.HRSystem.model.Manager;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface EmployeeDao extends BaseDao<Employee>{
/**
* 根据用户名和密码查询员工
* @param name 用户名
* password 密码
* @return 返回员工
*/
public Employee findByNameAndPass(@Param("name")String name, @Param("password") String password);
public Employee findByName(@Param("name")String name);
public List<Employee> findEmployeesByMgrId(@Param("id") long id);