JavaBean中DAO设计模式介绍

字体大小: 中小 标准 ->行高大小: 标准
一、信息系统的开发架构
客户层-------显示层-------业务层---------数据层---------数据库

1.客户层:客户层就是客户端,简单的来说就是浏览器。

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


[java] view plaincopy
1.package org.vo; 
2.import java.util.*; 
3.public class Emp{ 
4.private int empno; 
5.private String ename; 
6.private String job; 
7.private Date hireDate; 
8.private float sal; 
9.public Emp(){ 
10.11.} 
12.public int getEmpno(){ 
13.return empno; 
14.} 
15.public void setEmpno(int empno){ 
16.this.empno = empno; 
17.} 
18.public String getEname(){ 
19.return ename; 
20.} 
21.public void setEname(String ename){ 
22.this.ename = ename; 
23.} 
24.public Date getHireDate(){ 
25.return hireDate; 
26.} 
27.public void setHireDate(Date hireDate){ 
28.this.hireDate = hireDate; 
29.} 
30.public float getSal(){ 
31.return sal; 
32.} 
33.public void setSal(float sal){ 
34.this.sal = sal; 
35.} 
36.public String getJob(){ 
37.return job; 
38.} 
39.public void setJob(String job){ 
40.this.job = job; 
41.} 
42.} 
2.DatabaseConnection.java



[java] view plaincopy
1.package org.dbc; 
2.import java.sql.*; 
3.public class DatabaseConnection{ 
4.private Connection con = null; 
5.private static final String DRIVER = "com.mysql.jdbc.Driver"; 
6.private static final String USER = "root"; 
7.private static final String URL = "jdbc:mysql://localhost:3306/mldn"; 
8.private static final String PASS = "12345"; 
9.public DatabaseConnection()throws Exception{ 
10.Class.forName(DRIVER); 
11.con = DriverManager.getConnection(URL,USER,PASS); 
12.} 
13.public Connection getConnection()throws Exception{ 
14.return con; 
15.} 
16.public void close()throws Exception{ 
17.if(con!=null){ 
18.con.close(); 
19.} 
20.} 
21.} 
3.IEmpDAO.java



[java] view plaincopy
1.package org.dao; 
2.import java.util.List; 
3.import org.vo.*; 
4.public interface IEmpDAO{ 
5.public boolean doCreate(Emp emp)throws Exception; 
6.public List<Emp> findAll()throws Exception; 
7.public Emp findById(int empno)throws Exception; 
8.} 
4.EmpDAOImpl.java



[java] view plaincopy
1.package org.dao.impl; 
2.import org.dao.*; 
3.import java.sql.*; 
4.import org.vo.*; 
5.import java.util.*; 
6.public class EmpDAOImpl implements IEmpDAO{ 
7.private Connection con; 
8.private PreparedStatement stat = null; 
9.public EmpDAOImpl(Connection con){ 
10.this.con = con; 
11.} 
12.public boolean doCreate(Emp emp)throws Exception{ 
13.String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)"; 
14.stat = con.prepareStatement(sql); 
15.stat.setInt(1,emp.getEmpno()); 
16.stat.setString(2,emp.getEname()); 
17.stat.setString(3,emp.getJob()); 
18.stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime())); 
19.stat.setFloat(5,emp.getSal()); 
20.int update = stat.executeUpdate(); 
21.if(update>0){ 
22.return true; 
23.} 
24.else{ 
25.return false; 
26.} 
27.} 
28.public List<Emp> findAll()throws Exception{ 
29.String sql = "SELECT empno,ename,job,hiredate,sal FROM emp"; 
30.stat = con.prepareStatement(sql); 
31.ResultSet rs = stat.executeQuery(); 
32.Emp emp = null; 
33.List<Emp> list = new ArrayList<Emp>(); 
34.while(rs.next()){ 
35.int empno = rs.getInt(1); 
36.String ename = rs.getString(2); 
37.String job = rs.getString(3); 
38.float sal = rs.getFloat(5); 
39.emp = new Emp(); 
40.emp.setEmpno(empno); 
41.emp.setEname(ename); 
42.emp.setJob(job); 
43.emp.setHireDate(rs.getDate(4)); 
44.emp.setSal(sal); 
45.list.add(emp); 
46.} 
47.return list; 
48.} 
49.public Emp findById(int empno)throws Exception{ 
50.String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?"; 
51.stat = con.prepareStatement(sql); 
52.stat.setInt(1,empno); 
53.ResultSet rs = stat.executeQuery(); 
54.Emp emp = null; 
55.if(rs.next()){ 
56.String ename = rs.getString(2); 
57.String job = rs.getString(3); 
58.float sal = rs.getFloat(5); 
59.emp = new Emp(); 
60.emp.setEmpno(empno); 
61.emp.setEname(ename); 
62.emp.setJob(job); 
63.emp.setHireDate(rs.getDate(4)); 
64.emp.setSal(sal); 
65.} 
66.return emp; 
67.} 
68.} 

5.EmpDAOProxy.java



[java] view plaincopy
1.package org.dao.impl; 
2.import org.dao.*; 
3.import java.sql.*; 
4.import org.vo.*; 
5.import java.util.*; 
6.import org.dbc.*; 
7.public class EmpDAOProxy implements IEmpDAO{ 
8.private DatabaseConnection dbc; 
9.private IEmpDAO dao = null; 
10.public EmpDAOProxy()throws Exception{ 
11.dbc = new DatabaseConnection(); 
12.dao = new EmpDAOImpl(dbc.getConnection()); 
13.} 
14.public boolean doCreate(Emp emp)throws Exception{ 
15.boolean flag = false; 
16.if(dao.findById(emp.getEmpno())==null){ 
17.flag = dao.doCreate(emp); 
18.} 
19.dbc.close(); 
20.return flag; 
21.} 
22.public List<Emp> findAll()throws Exception{ 
23.List<Emp>list = dao.findAll(); 
24.dbc.close(); 
25.return list; 
26.} 
27.public Emp findById(int empno)throws Exception{ 
28.Emp emp = dao.findById(empno); 
29.dbc.close(); 
30.return emp; 
31.} 
32.} 
6.DAOFactory.java



[java] view plaincopy
1.package org.dao.factory; 
2.import org.dao.*; 
3.import java.sql.*; 
4.import org.vo.*; 
5.import java.util.*; 
6.import org.dbc.*; 
7.import org.dao.impl.*; 
8.public class DAOFactory{ 
9.public static IEmpDAO getInstance(){ 
10.IEmpDAO dao = null; 
11.try{ 
12.dao = new EmpDAOProxy(); 
13.} 
14.catch(Exception e){ 
15.e.printStackTrace(); 
16.} 
17.return dao; 
18.} 
19.} 

7.TestDAO.java



[java] view plaincopy
1.package org.dao.test; 
2.import org.dao.factory.*; 
3.import org.vo.*; 
4.import org.dao.*; 
5.public class TestDAO{ 
6.public static void main(String args[])throws Exception{ 
7.Emp emp = null; 
8.for(int i=0;i<5;i++){ 
9.emp = new Emp(); 
10.emp.setEmpno(i); 
11.emp.setEname("xiazdong-"+i); 
12.emp.setJob("stu-"+i); 
13.emp.setHireDate(new java.util.Date()); 
14.emp.setSal(500*i); 
15.DAOFactory.getInstance().doCreate(emp); 
16.} 
17.} 
18.} 

通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68773.html