JavaBean中DAO设计模式介绍
一、信息系统的开发架构
客户层-------显示层-------业务层---------数据层---------数据库
1.客户层:客户层就是client,简单的来说就是浏览器。
2.显示层:JSP/Servlet,用于给浏览器显示。
3.业务层:对于数据层的原子操作进行整合。
4.数据层:对于数据库进行的原子操作,添加、删除等;
二、DAO(Data Access Object)介绍
DAO应用在数据层那块,用于訪问数据库,对数据库进行操作的类。
三、DAO设计模式的结构
DAO设计模式一般分为几个类:
1.VO(Value Object):一个用于存放网页的一行数据即一条记录的类,比方网页要显示一个用户的信息,则这个类就是用户的类。
2.DatabaseConnection:用于打开和关闭数据库。
3.DAO接口:用于声明对于数据库的操作。
4.DAOImpl:必须实现DAO接口,真实实现DAO接口的函数,可是不包含数据库的打开和关闭。
5.DAOProxy:也是实现DAO接口,可是仅仅须要借助DAOImpl就可以,可是包含数据库的打开和关闭。
6.DAOFactory:工厂类,含有getInstance()创建一个Proxy类。
四、DAO的优点
DAO的优点就是提供给用户的接口仅仅有DAO的接口,所以假设用户想加入数据,仅仅须要调用create函数就可以,不须要数据库的操作。
五、DAO包命名
对于DAO,包的命名和类的命名一定要有层次。
六、实例解析
1.Emp.java
- package org.vo;
- import java.util.*;
- public class Emp{
- private int empno;
- private String ename;
- private String job;
- private Date hireDate;
- private float sal;
- public Emp(){
- }
- public int getEmpno(){
- return empno;
- }
- public void setEmpno(int empno){
- this.empno = empno;
- }
- public String getEname(){
- return ename;
- }
- public void setEname(String ename){
- this.ename = ename;
- }
- public Date getHireDate(){
- return hireDate;
- }
- public void setHireDate(Date hireDate){
- this.hireDate = hireDate;
- }
- public float getSal(){
- return sal;
- }
- public void setSal(float sal){
- this.sal = sal;
- }
- public String getJob(){
- return job;
- }
- public void setJob(String job){
- this.job = job;
- }
- }
2.DatabaseConnection.java
- package org.dbc;
- import java.sql.*;
- public class DatabaseConnection{
- private Connection con = null;
- private static final String DRIVER = "com.mysql.jdbc.Driver";
- private static final String USER = "root";
- private static final String URL = "jdbc:mysql://localhost:3306/mldn";
- private static final String PASS = "12345";
- public DatabaseConnection()throws Exception{
- Class.forName(DRIVER);
- con = DriverManager.getConnection(URL,USER,PASS);
- }
- public Connection getConnection()throws Exception{
- return con;
- }
- public void close()throws Exception{
- if(con!=null){
- con.close();
- }
- }
- }
3.IEmpDAO.java
- package org.dao;
- import java.util.List;
- import org.vo.*;
- public interface IEmpDAO{
- public boolean doCreate(Emp emp)throws Exception;
- public List<Emp> findAll()throws Exception;
- public Emp findById(int empno)throws Exception;
- }
4.EmpDAOImpl.java
- package org.dao.impl;
- import org.dao.*;
- import java.sql.*;
- import org.vo.*;
- import java.util.*;
- public class EmpDAOImpl implements IEmpDAO{
- private Connection con;
- private PreparedStatement stat = null;
- public EmpDAOImpl(Connection con){
- this.con = con;
- }
- public boolean doCreate(Emp emp)throws Exception{
- String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)";
- stat = con.prepareStatement(sql);
- stat.setInt(1,emp.getEmpno());
- stat.setString(2,emp.getEname());
- stat.setString(3,emp.getJob());
- stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime()));
- stat.setFloat(5,emp.getSal());
- int update = stat.executeUpdate();
- if(update>0){
- return true;
- }
- else{
- return false;
- }
- }
- public List<Emp> findAll()throws Exception{
- String sql = "SELECT empno,ename,job,hiredate,sal FROM emp";
- stat = con.prepareStatement(sql);
- ResultSet rs = stat.executeQuery();
- Emp emp = null;
- List<Emp> list = new ArrayList<Emp>();
- while(rs.next()){
- int empno = rs.getInt(1);
- String ename = rs.getString(2);
- String job = rs.getString(3);
- float sal = rs.getFloat(5);
- emp = new Emp();
- emp.setEmpno(empno);
- emp.setEname(ename);
- emp.setJob(job);
- emp.setHireDate(rs.getDate(4));
- emp.setSal(sal);
- list.add(emp);
- }
- return list;
- }
- public Emp findById(int empno)throws Exception{
- String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?";
- stat = con.prepareStatement(sql);
- stat.setInt(1,empno);
- ResultSet rs = stat.executeQuery();
- Emp emp = null;
- if(rs.next()){
- String ename = rs.getString(2);
- String job = rs.getString(3);
- float sal = rs.getFloat(5);
- emp = new Emp();
- emp.setEmpno(empno);
- emp.setEname(ename);
- emp.setJob(job);
- emp.setHireDate(rs.getDate(4));
- emp.setSal(sal);
- }
- return emp;
- }
- }
5.EmpDAOProxy.java
- package org.dao.impl;
- import org.dao.*;
- import java.sql.*;
- import org.vo.*;
- import java.util.*;
- import org.dbc.*;
- public class EmpDAOProxy implements IEmpDAO{
- private DatabaseConnection dbc;
- private IEmpDAO dao = null;
- public EmpDAOProxy()throws Exception{
- dbc = new DatabaseConnection();
- dao = new EmpDAOImpl(dbc.getConnection());
- }
- public boolean doCreate(Emp emp)throws Exception{
- boolean flag = false;
- if(dao.findById(emp.getEmpno())==null){
- flag = dao.doCreate(emp);
- }
- dbc.close();
- return flag;
- }
- public List<Emp> findAll()throws Exception{
- List<Emp>list = dao.findAll();
- dbc.close();
- return list;
- }
- public Emp findById(int empno)throws Exception{
- Emp emp = dao.findById(empno);
- dbc.close();
- return emp;
- }
- }
6.DAOFactory.java
- package org.dao.factory;
- import org.dao.*;
- import java.sql.*;
- import org.vo.*;
- import java.util.*;
- import org.dbc.*;
- import org.dao.impl.*;
- public class DAOFactory{
- public static IEmpDAO getInstance(){
- IEmpDAO dao = null;
- try{
- dao = new EmpDAOProxy();
- }
- catch(Exception e){
- e.printStackTrace();
- }
- return dao;
- }
- }
7.TestDAO.java
- package org.dao.test;
- import org.dao.factory.*;
- import org.vo.*;
- import org.dao.*;
- public class TestDAO{
- public static void main(String args[])throws Exception{
- Emp emp = null;
- for(int i=0;i<5;i++){
- emp = new Emp();
- emp.setEmpno(i);
- emp.setEname("xiazdong-"+i);
- emp.setJob("stu-"+i);
- emp.setHireDate(new java.util.Date());
- emp.setSal(500*i);
- DAOFactory.getInstance().doCreate(emp);
- }
- }
- }
通过DAO设计模式,能够在JSP中屏蔽了数据库连接的操作,达到JSP仅仅负责显示的效果。
JavaBean中DAO设计模式介绍的更多相关文章
- JavaBean中DAO设计模式介绍(转)
一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...
- JavaBean中DAO设计模式简介
一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...
- JavaBean在DAO设计模式简介
一.信息系统开发框架 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层是client,简单的来说就是浏览器. 2.显示层:JSP/Se ...
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问 ...
- JavaWeb技术(二):DAO设计模式
1. DAO全称:Data Access Object , 数据访问对象.使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的. 2. 典型的DA ...
- DAO设计模式(转)
J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开.实现DAO模式能够更加专注于编写数据访问代码. 我们先来回顾一下DAO设计模式和数据访问对象. DAO基础 ...
- Java中DAO的实现
J2EE 开发人员使用数据访问对象(Data Access Object DAO)设计模式,以便将低级别的数据访问逻辑与高级别的业务逻辑分离.实现 DAO 模式涉及比编写数据访问代码更多的内容.在本文 ...
- J2EE之DAO设计模式及简单实现
JAVAEE(Java Enterprise Edition ) 模式 : DAO模式 因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构: (一)JavaEE体系结构 客户端: 客户 ...
- DAO设计模式
DAO设计模式 DAO设计模式简介: DAO设计模式可以减少代码量,增强程序的可移植性,提高代码的可读性. DAO(数据库操作对象)设计模式是 JavaEE 数据层的操作.主要由五部分组成: 1.数据 ...
随机推荐
- UVa 572 Oil Deposits(DFS)
Oil Deposits The GeoSurvComp geologic survey company is responsible for detecting underground oil ...
- C3P0具体的配置说明(com.mchange.v2.c3p0.ComboPooledDataSource)
C3P0它是一个开源JDBC连接池,它lib文件夹和Hibernate一起公布,包含了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对 ...
- offsetTop和scrollTop差异
最近写组件,这两个属性的结果搞的有点晕,我检查的文件及资料,这两个性质如下面总结: 他一直在offsetLeft.offsetTop,scrollLeft.scrollTop这些方法都是非常迷茫,花一 ...
- Deploy Oracle 10.2.0.5 on Red Hat Enterprise Linux 6.4
一.Linux系统安装和配置 1.安装系统时选Desktop 2.设置eth0网卡为静态IP,加入子网掩码,网关,DNS.并配置自己主动启动 3.改动/etc/hosts.加入主机名和相应IP 4.禁 ...
- Python调用微博API
上头叫通过微博ID获取用户公布过的历史微博内容,于是研究了下新浪微博提供的API 1 首先在微博开放中心下"创建应用"创建一个应用,应用信息那些随便填,填写完成后,不须要提交审核, ...
- 探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure
最近准备基于Microsoft Azure Management Libraries 实现虚拟机的监控.主要的需求就是获取虚拟机内置的性能计数器数据,基于性能计数器实现后续的监控和自动伸缩. 作为这一 ...
- org.eclipse.birt.report.data.oda.jdbc.JDBCException: Missing properties in Connection.open(Propertie
首先查看project的web.xml档"BIRT_RESOURCE_PATH"属性的设置.此属性设置的是"用户资源存放路径.这些资源包含 library 文件,imag ...
- 【ASP.NET】关于iframe的两个技巧
原文:[ASP.NET]关于iframe的两个技巧 最近在给朋友写个网站,虽然不大,但是也碰到了一些问题.这篇就为解决ASP.NET中关于IFRAME的两个很现实的问题提供解决方法.PS:呵呵,又做了 ...
- 父类中可继承方法在处理private的一个demo
public abstract class AbstractParent { public AbstractParent() { System.out.println("Hello,pare ...
- etl工具,kettle实现了周期
Kettle这是国外的来源ETL工具,纯java写.能Window.Linux.Unix在执行.绿色无需安装,稳定高效的数据提取. 业务模型: 在关系型数据库中有张非常大的数据存储表,被设计成奇偶库存 ...