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

相关文章
相关标签/搜索