JDBC设计模式:数据访问对象和值对象

一、简介

    数据访问对象(DAO)封装数据库访问的细节,提供对数据库中表的粗粒度或者一次一条记录的访问。值对象(VO)封装了被访问的数据结构,有效地表示了被访问的记录。

        为了更好的模块化,用一个数据库工具类隔离底层数据库访问行为,使获取和更新数据的业务方法不需要负责数据库操作。这样使得数据库相关的操作都由工具类完成,使用这个工具类的各种对象之间可以有效的共享这些操作。

二、DAO描述

        DAO的目的是封装数据库访问和提供为业务对象屏蔽访问细节的方法。这种方法提供了代码共享,因为各种业务对象之间共享了DAO,所以这种方法还可以本地化对数据访问代码可能的必要修改。

        这些DAO和相应的表的值对象紧紧耦合并通过表相互作用,存储从表中取来的值的类成员变量都存储在一个值对象中,此值对象又是一个类成员变量。

三、VO描述

        值对象设计模式封装了数据记录,包括反映数据记录字段的类成员变量和属性。在类中声明了一组get和set方法用于从类成员中获取值和设置成员变量为指定的值。

四、代码示例:

1.数据表的结构

列名

数据类型

说明

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

转载于:https://my.oschina.net/NorthOcean/blog/261124

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值