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.数据 ...
随机推荐
- 2014在百度之星程序设计大赛 - 资格 第四个问题 Labyrinth
小记:dfs暂停,不是决定性的 思维:由于只有三个方向向上和向下和向右,然后,我对待每列从左至右.然后,当在下一列的上一列的处理再加工每个值去获得正确的值,保存各坐标的数组格你可以得到最大值.每处理完 ...
- linux进程通信之共享内存
共享内存同意两个或多个进程共享一给定的存储区,由于数据不须要来回复制,所以是最快的一种进程间通信机制.共享内存能够通过mmap()映射普通文件(特殊情况下还能够採用匿名映射)机制实现,也能够通过系统V ...
- c++ stl algorithm: std::find, std::find_if
std::find: 查找容器元素, find仅仅能查找容器元素为<基本数据类型> [cpp] view plaincopy #include <iostream> #incl ...
- 【.NET进程通信】初探.NET中进程间通信的简单的实现
转载请注明出处:http://blog.csdn.net/xiaoy_h/article/details/26090277 废话不多说,IPC就是进程间通信. 进程间通信能够採用的方法非常多,比方创建 ...
- Windows Phone 同步方式获取网络类型
原文:Windows Phone 同步方式获取网络类型 在Windows Phone 开发中有时候需要获取设备当前连接网络的类型,是Wifi,还是2G,3G,或者4G,SDK中提供获取网络类型的API ...
- 【IPC第二个进程间通信】管道Pipe
IPC进程间通信+管道Pipe IPC(Inter-Process Communication,进程间通信). 管道用于进程间共享数据,事实上质是共享内存 ...
- SharePoint 2010 Form Authentication (SQL) based on existing database
SharePoint 2010 表单认证,基于现有数据库的用户信息表 本文主要描写叙述本人配置过程中涉及到的步骤,仅作为參考,不要仅限于此步骤. 另外本文通俗易懂,适合大众口味儿. I. 开启并配置基 ...
- Web层的搭建
Web层的搭建 前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DD ...
- Android SystemUI源代码分析和修改
1.在导航栏中添加音量加减button 一些Android音量调节button.或者从保护实体按键的角度考虑,就须要在导航栏的虚拟按键中加入音量加减调节按键. 效果例如以下图所看到的: 实现步骤例如以 ...
- [Elasticsearch] 部分匹配 (一) - 前缀查询
部分匹配(Partial Matching) 敏锐的读者可能已经发现到眼下为止,介绍的查询都是在整个词条层面进行操作的. 匹配的最小单元必须是一个词条.你仅仅能找到存在于倒排索引(Inverted I ...