DAO模式小结

简介: DAO模式小结

DAO设计模式


DAO(Database Access Object 数据库访问对象)


为了降低耦合性,提出了DAO封装数据库操作的设计模式。


它可以实现业务逻辑与数据库访问相分离。相对来说,数据库是比较稳定的,其中DAO组件依赖于数据库系统,提供数据库访问的接口。


隔离了不同的数据库实现。


DAO模式的组成部分


1 DAO接口(主要 添加 修改 更新 删除方法)
2 DAO实现类
3 实体类  (domain、beans、entity、pojo、model)
    --作用:用在数据访问代码和业务逻辑代码之间通过实体类来传输数据
    --实体类特征:
        ◦属性一般使用private修饰
        ◦提供public修饰的getter/setter方法
        ◦实体类提供无参构造方法,根据业务提供有参构造
        ◦实现java.io.Serializable接口,支持序列化机制
4 数据库连接和关闭工具类


设计的包名


domain 存放实体类


utils 存放工具类


dao 存放接口


dao.impl 存放实现类


实例:


使用DAO设计模式实现emp表的查询、添加、删除、修改


domain包中: Employee类(员工实体类)

public class Employee {
    private int empno ;
    private String ename ;
    private String job ;
    private int mgr ;
    private Date hiredate ;
    private double sal ;
    private double comm ;
    private int deptno ;
    public Employee() {
    }
    public Employee(int empno, String ename, String job, int mgr, Date hiredate, double sal, double comm, int deptno) {
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.mgr = mgr;
        this.hiredate = hiredate;
        this.sal = sal;
        this.comm = comm;
        this.deptno = deptno;
    }
    //省略所有属性的getter和setter方法
    ... 
    @Override
    public String toString() {
        return "Employee [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hiredate="
                + hiredate + ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]";
    }
}



dao包中:数据库数据的CRUD操作接口类 EmployeeDao

public interface EmployeeDao {
    /**
     * 查询全部
     * @return
     */
    public List<Employee> getAll() ;
    /**
     * 根据编号查询
     * @param empno
     * @return
     */
    public Employee getByEmpno(int empno) ;
    /**
     * 添加数据
     * @param emp
     * @return
     */
    public boolean add(Employee emp) ;
    /**
     * 修改数据
     * @param emp
     * @return
     */
    public boolean update(Employee emp) ;
    /**
     * 删除数据
     * @param empno
     * @return
     */
    public boolean delete(int empno) ;
}


utils 工具包中,使用Druid连接池创建工具类

public class DataSourceUtils {
    private static DataSource ds = null;
    static {
        InputStream is = DataSourceUtils.class.getClassLoader().getResourceAsStream("druid.properties") ;
        Properties pro = new Properties() ;
        try {
            pro.load(is);
            ds = DruidDataSourceFactory.createDataSource(pro) ;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static DataSource getDataSource() {
        return ds ;
    }
}


dao.impl包: 使用DbUtils类创建 EmployeeDaoImpl实现类

public class EmployeeDaoImpl implements EmployeeDao {
    @Override
    public List<Employee> getAll() {
        List<Employee> list = null;
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            list = qr.query("select * from emp", new BeanListHandler<>(Employee.class)) ;
        } catch (SQLException e) {
            e.printStackTrace();
            return null ;
        }
        return list ;
    }
    @Override
    public Employee getByEmpno(int empno) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        Employee emp = null;
        try {
            emp = qr.query("SELECT * FROM emp WHERE empno=?",new BeanHandler<>(Employee.class), empno) ;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
        return emp;
    }
    @Override
    public boolean add(Employee emp) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            int len = qr.update("INSERT INTO emp VALUES (?,?,?,?,?,?,?,?)", emp.getEmpno(),emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),emp.getComm(),emp.getDeptno()) ;
            if (len > 0) {
                return true ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false ;
    }
    @Override
    public boolean update(Employee emp) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            int len = qr.update("UPDATE emp SET ename=?,job=?,mgr=?,hiredate=?,sal=?,comm=?,deptno=? WHERE empno=?", emp.getEname(),emp.getJob(),emp.getMgr(),emp.getHiredate(),emp.getSal(),emp.getComm(),emp.getDeptno(),emp.getEmpno());
            if (len > 0) {
                return true ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
    @Override
    public boolean delete(int empno) {
        QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()) ;
        try {
            int len = qr.update("DELETE FROM emp WHERE empno=?", empno);
            if (len > 0) {
                return true ;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
}


目录
相关文章
|
4月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
|
5月前
|
Java
java工具类调用service层,mapper层
java工具类调用service层,mapper层
122 1
|
6月前
|
SQL Java 数据库连接
Dao层和Mapper层
Dao层和Mapper层
818 0
|
5月前
|
SQL Java 数据库连接
SSMP整合案例第二步 数据层dao开发及实现特殊查询
SSMP整合案例第二步 数据层dao开发及实现特殊查询
29 0
|
6月前
|
Java 数据库连接 mybatis
MyBatis的Dao层实现方式
MyBatis的Dao层实现方式
51 0
|
SQL 前端开发 JavaScript
JAVA框架的层级和各层理解 controller,service,dao,mapper,model等层和各包的作用
JAVA框架的层级和各层理解 controller,service,dao,mapper,model等层和各包的作用
933 0
|
Java 数据库连接 程序员
Mybatis Mapper代理开发Dao层
Mybatis Mapper代理开发Dao层
203 0
|
XML SQL Java
MyBatis - DAO接口不需要实现类分析(上)
MyBatis - DAO接口不需要实现类分析(上)
260 0
MyBatis - DAO接口不需要实现类分析(上)
|
SQL Java 数据库连接
MyBatis - DAO接口不需要实现类分析(下)
MyBatis - DAO接口不需要实现类分析(下)
262 0
MyBatis - DAO接口不需要实现类分析(下)