1、簡介java
數據訪問對象(DAO)封裝數據庫訪問的細節,提供對數據庫中表的粗粒度或者一次一條記錄的訪問。值對象(VO)封裝了被訪問的數據結構,有效地表示了被訪問的記錄。
sql
爲了更好的模塊化,用一個數據庫工具類隔離底層數據庫訪問行爲,使獲取和更新數據的業務方法不須要負責數據庫操做。這樣使得數據庫相關的操做都由工具類完成,使用這個工具類的各類對象之間能夠有效的共享這些操做。
數據庫
2、DAO描述設計模式
DAO的目的是封裝數據庫訪問和提供爲業務對象屏蔽訪問細節的方法。這種方法提供了代碼共享,由於各類業務對象之間共享了DAO,因此這種方法還能夠本地化對數據訪問代碼可能的必要修改。
數據結構
這些DAO和相應的表的值對象牢牢耦合並經過表相互做用,存儲從表中取來的值的類成員變量都存儲在一個值對象中,此值對象又是一個類成員變量。
模塊化
3、VO描述工具
值對象設計模式封裝了數據記錄,包括反映數據記錄字段的類成員變量和屬性。在類中聲明瞭一組get和set方法用於從類成員中獲取值和設置成員變量爲指定的值。
this
4、代碼示例:spa
1.數據表的結構.net
列名 |
數據類型 |
說明 |
Depart_id |
Int(0) |
部門編號,主鍵,自增 |
Depart_name |
Varchar(10) |
部門名稱 |
2.簡單DAO:DepartDAO.java
package com.sdust.omims.db.dao; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Vector; import com.sdust.omims.db.bean.DepartBean; import com.sdust.omims.db.utils.DBUtil; /** * 部門信息DAO * * @author Shmily * @version 1.0 */ public class DepartDAO { // hold SQL Statement private String insertStmt; private String deleteStmt; private String selectByNameStmt; private String selectStmt; // hold prepared statement private PreparedStatement insertPreStmt; private PreparedStatement deletePreStmt; private PreparedStatement selectByNamePreStmt; private PreparedStatement selectPreStmt; // DB Utility DBUtil dbUtil; // Department Bean DepartBean departmentBean; public DepartDAO() { departmentBean = new DepartBean(); dbUtil = new DBUtil(); createPreStmts(); } /** * 建立PreparedStatement對象 */ public void createPreStmts() { try { insertStmt = "INSERT INTO tb_department VALUES(?)"; insertPreStmt = dbUtil.createPreStmt(insertStmt); deleteStmt = "DELETE FROM tb_department where depart_name = ?"; deletePreStmt = dbUtil.createPreStmt(deleteStmt); selectByNameStmt = "SELECT * FROM tb_department WHERE depart_name = ?"; selectByNamePreStmt = dbUtil.createPreStmt(selectByNameStmt); selectStmt = "SELECT * FROM tb_department"; selectPreStmt = dbUtil.createPreStmt(selectStmt); } catch (Exception e) { // TODO: handle exception System.out .println("SQLException caught in DepartDAO.createPreStmts()."); } } /** * 部門是否存在 * * @param department * 部門信息 * * @return isExit 若是存在,返回true;不然,返回false. */ public Boolean isDepartExit(DepartBean department) { Boolean isExit = false; try { selectByNamePreStmt.setString(1, department.getDepartName()); ResultSet rs = selectByNamePreStmt.executeQuery(); if (rs.next()) { if (rs.getInt(1) != 0) { isExit = true; } } } catch (Exception e) { // TODO: handle exception System.out .println("SQLException caught in DepartDAO.isDepartExit()."); } return isExit; } /** * 增長新的部門 * * @param department * 部門信息 */ public void insertDAO(DepartBean department) { if (isDepartExit(department)) { System.out.println("該部門已存在!!!"); } else { try { insertPreStmt.setString(1, department.getDepartName()); insertPreStmt.executeUpdate(); } catch (Exception e) { // TODO: handle exception System.out .println("SQLException caught in DepartDAO.insertDAO()."); } } } /** * 刪除某個部門 * * @param department * 部門信息 */ public void deleteDAO(DepartBean department) { try { deletePreStmt.setString(1, department.getDepartName()); deletePreStmt.executeUpdate(); } catch (Exception e) { // TODO: handle exception System.out.println("SQLException caught in DepartDAO.deleteDAO()."); } } /** * 獲取全部部門的信息 * * @return vector 全部部門的集合 */ public Vector<DepartBean> getAll() { Vector<DepartBean> vector = new Vector<DepartBean>(); try { ResultSet rs = selectPreStmt.executeQuery(); while (rs.next()) { DepartBean department = new DepartBean(); department.setDepartId(rs.getInt(1)); department.setDepartName(rs.getString(2)); vector.add(department); } } catch (Exception e) { // TODO: handle exception System.out.println("SQLException caught in DepartDAO.getAll()."); } return vector; } }
3.VO:DepartBean.java
package com.sdust.omims.db.bean; /** * 部門信息類 * * @author Shmily * @version 1.0 */ public class DepartBean { // 部門ID private int departId; // 部門名稱 private String departName; public DepartBean() { } public void setDepartId(int id) { this.departId = id; } public int getDepartId() { return this.departId; } public void setDepartName(String name) { this.departName = name; } public String getDepartName() { return this.departName; } public Object get(int column) { switch (column) { case 0: return this.getDepartId(); case 1: return this.getDepartName(); default: return null; } } }
4.數據庫工具類:DBUtil.java