1. 程式人生 > >Java個人總結——DAO模式

Java個人總結——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;
    }

}