JavaBean中DAO设计模式介绍

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               


一、信息系统的开发架构


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

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 Empprivate 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 DatabaseConnectionprivate Connection con = nullprivate 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 IEmpDAOpublic boolean doCreate(Emp emp)throws Exceptionpublic List<Emp> findAll()throws Exceptionpublic 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 IEmpDAOprivate Connection con; private PreparedStatement stat = nullpublic 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 IEmpDAOprivate DatabaseConnection dbc; private IEmpDAO dao = nullpublic 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 DAOFactorypublic 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 TestDAOpublic 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只负责显示的效果。




           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值