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 plaincopyprint?
01.package org.vo;
02.import java.util.*;
03.public class Emp{
04. private int empno;
05. private String ename;
06. private String job;
07. private Date hireDate;
08. private float sal;
09. 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.}
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


[java] view plaincopyprint?
01.package org.dbc;
02.import java.sql.*;
03.public class DatabaseConnection{
04. private Connection con = null;
05. private static final String DRIVER = "com.mysql.jdbc.Driver";
06. private static final String USER = "root";
07. private static final String URL = "jdbc:mysql://localhost:3306/mldn";
08. private static final String PASS = "12345";
09. 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.}
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


[java] view plaincopyprint?
01.package org.dao;
02.import java.util.List;
03.import org.vo.*;
04.public interface IEmpDAO{
05. public boolean doCreate(Emp emp)throws Exception;
06. public List<Emp> findAll()throws Exception;
07. public Emp findById(int empno)throws Exception;
08.}
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


[java] view plaincopyprint?
01.package org.dao.impl;
02.import org.dao.*;
03.import java.sql.*;
04.import org.vo.*;
05.import java.util.*;
06.public class EmpDAOImpl implements IEmpDAO{
07. private Connection con;
08. private PreparedStatement stat = null;
09. 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.}
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


[java] view plaincopyprint?
01.package org.dao.impl;
02.import org.dao.*;
03.import java.sql.*;
04.import org.vo.*;
05.import java.util.*;
06.import org.dbc.*;
07.public class EmpDAOProxy implements IEmpDAO{
08. private DatabaseConnection dbc;
09. 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.}
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


[java] view plaincopyprint?
01.package org.dao.factory;
02.import org.dao.*;
03.import java.sql.*;
04.import org.vo.*;
05.import java.util.*;
06.import org.dbc.*;
07.import org.dao.impl.*;
08.public class DAOFactory{
09. 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.}
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


[java] view plaincopyprint?
01.package org.dao.test;
02.import org.dao.factory.*;
03.import org.vo.*;
04.import org.dao.*;
05.public class TestDAO{
06. public static void main(String args[])throws Exception{
07. Emp emp = null;
08. for(int i=0;i<5;i++){
09. 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.}
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只负责显示的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值