一、信息系统的开发架构
客户层-------显示层-------业务层---------数据层---------数据库
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