Java個人總結——DAO模式
阿新 • • 發佈:2018-11-28
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;
}
}