JDBC設計模式:數據訪問對象和值對象

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

http://my.oschina.net/NorthOcean/blog/261116

相關文章
相關標籤/搜索