博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaBean中DAO设计模式介绍(转)
阅读量:6564 次
发布时间:2019-06-24

本文共 7113 字,大约阅读时间需要 23 分钟。

一、信息系统的开发架构

客户层-------显示层-------业务层---------数据层---------数据库

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

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

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

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
findAll()throws Exception;7 public Emp findById(int empno)throws Exception;8 }

4.EmpDAOImpl.java

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
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
list = new ArrayList
();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

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
findAll()throws Exception{23 List
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

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

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只负责显示的效果。

转载于:https://www.cnblogs.com/xingmeng/p/3274542.html

你可能感兴趣的文章
〖Linux〗Debian 7.1.0 Wheezy使用ltib报错的解决办法
查看>>
〖Android〗(how-to) fix k860/k860i buletooth.
查看>>
static与线程安全 -摘自网络
查看>>
jsf标签,jsp标签与jstl标签
查看>>
使用PHP CURL的POST数据
查看>>
struts2:表单标签
查看>>
ASP.NET MVC3 通过Url传多个参数方法
查看>>
遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析...
查看>>
ASP.NET MVC上传文件----uploadify的使用
查看>>
简明 MongoDB 入门教程
查看>>
.NET Core 3.0中的数据库驱动框架System.Data
查看>>
北大AI公开课2019 | 雷鸣:人工智能革命与机遇
查看>>
英特尔开源计算机视觉数据标签工具CVAT,加速数据注释
查看>>
consule服务注册和发现 安装 部署
查看>>
多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
查看>>
Map集合案例
查看>>
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>