DAO(数据访问对象)数据层组织结构,大致包括以下对象。
IDAO
ImplDAO:具体数据的增删改查。
ProxyDAO:负责ImplDAO所用的数据库打开与关闭。
DatabaseConnection:数据库打开与关闭的执行者。
VO:属性与表中的字段相对应,一个vo类就是表中的一条记录。
Factory:生产IDAO下的代理的
一、信息系统的开发架构
客户层-------显示层-------业务层---------数据层---------数据库
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
- 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只负责显示的效果。
相关推荐
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
暴露给客户端的DAO接口在低层数据源的实现发生改变时并不会随着改变,所以这种设计模式使得DAO可以适应不同的数据储存方式类型而不影响客户端和商业组件.最主要的, DAO还在组件和数据源之间扮演着协调者的角色. DAO...
使用数据访问对象(DAO,Data Access Object)模式来抽象和封装所有对数据源的访问。DAO管理着与数据源的连接以便检索和存储数据。可以降低商业逻辑层和数据访问层的耦合度,提高应用的可维护性和可移植性。 由于...
DAO数据库安装文件。
为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层...
dao封装包
9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示...
Dao Jet数据库引擎,当WINDOWS中没有带这个数据库引擎时,可以选择手动安装 Dao Jet数据库引擎
C#特性标签实现通用Dao层C#特性标签实现通用Dao层C#特性标签实现通用Dao层
ibator-huoniao通过它你可以通过配置少量参数,通过一键生成dao层的全部文件,能够应付对dao层的所有操作 产物包括: 1. pojo文件 2. dao接口类 3. dao接口实现类文件 4. ibatis sql map文件 5. 数据库查询时...
DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式
dao层基类dao层基类dao层基类dao层基类dao层基类
$my = new MysqlDao(); echo $my->pdo_delete(MODULE.'_network_list', array('id' => 17, 'uniacid' => 6)); $sql = 'select * from '.tablename(MODULE.'_network_list').' where uniacid=? and end_time<? ...
在 64 位 Win7 系统下安装某些老款建筑预算软件需要部署 DAO,故做了此安装包分享给大家
Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆
service接口 ... ... ... public interface EmployeeService extends Entity...这样只需要向dao中注入pojo的完整包名,你就能拥有一个pojo的dao,并且在你的service接口和实现类里不用写一句代码. 轻松持久化你的entity pojo
IDEA自带的插件Generate POJOs.groovy 比较简陋,不能生成完整的dao/mapper,切生成的POJO没有注解。没有统一格式化,所以在此基础上进行了扩展能够简单的生成pojo/dao/mapper. 使用时选择目录后会在改目录下生成...
有些计算机缺失这个文件,导致有些软件运行不起来,出现“无法对DAO/Jet db引擎进行初始化”的问题,下载后解压,并运行起来就可以了。
dao 1.0 source code for download