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;
    }

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值