欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java开发中的Dao设计模式解析

程序员文章站 2023-10-21 19:37:01
DAO设计模式DAO(Data Access Object,数据访问对象),主要的功能就是用 于进行数据操作的,在程序的标准开发架构中属于数据层的操作。DAO的组成部分DAO由几下几个部分组成:(1)VO:封装数据信息,主要属性和getXXX() setXXX()方法组成,VO 类中的属性和表中的字段相对应,每个VO类的对象相当于数据库表中的一行记录。***.vo.***,vo的命名要与表的命名一致。(2)DatabaseConnection:专门负责数据库打开和关闭操作的类。***.dbc....

DAO设计模式

DAO(Data Access Object,数据访问对象),主要的功能就是用 于进行数据操作的,在程序的标准开发架构中属于数据层的操作。
java开发中的Dao设计模式解析

DAO的组成部分

DAO由几下几个部分组成:

(1)VO:封装数据信息,主要属性和getXXX() setXXX()方法组成,VO 类中的属性和表中的字段相对应,每个VO类的对象相当于数据库表中的一行记录。***.vo.***,vo的命名要与表的命名一致。

(2)DatabaseConnection:专门负责数据库打开和关闭操作的类。***.dbc.DatabaseConnection

(3)DAO:主要定义操作的接口,定义一系列数据库的原子性操作的标准,如增,删,改,查等。***.dao.I***DAO

(4)Impl:DAO接口的真实实现类,完成具体的数据库操作,但是不负责数据库打开和关闭。***.dao.impl.***DAOImpl

(5)Proxy:代理实现类,主要完成数据库的打开和关闭,并且调用真实实现类对象操作。***.dao.proxy.***DAOProxy

(6)Factory:工作类,通过工厂类取得一个DAO的实例化对象。***.factory.DAOFactory
java开发中的Dao设计模式解析
java开发中的Dao设计模式解析

DAO模式的案例——员工信息添加和查询

新建数据库,命名为Emp(要和vo数据类命名一致)
java开发中的Dao设计模式解析

一. Vo信息类

package com.org.vo; //VO类封装数据信息VO 类中的属性和表中的字段相对应 //每个VO类的对象相当于数据库表中的一行记录。 //***.vo.***,vo的命名要与表的命名一致。 public class Emp { private int id; //员工Id private String name; //员工姓名 private String job; //员工工作 private String hireDate; //入职日期 private float sal; //薪水 /********get方法**********/ public int getId() { return this.id; } public String getName() { return this.name; } public String getJob() { return this.job; } public String getHireDate() { return this.hireDate; } public float getSal() { return this.sal; } /*********set方法*********/ public void setId(int id) { this.id=id; } public void setName(String name) { this.name=name; } public void setJob(String job) { this.job=job; } public void setHireDate(String hireDate) { this.hireDate=hireDate; } public void setSal(float sal) { this.sal=sal; } } 

二. DataBaseConnection数据库连接类

package com.org.dbc; //DatabaseConnection专门负责数据库打开和关闭操作的类。 import java.sql.*; public class DataBaseConnection { private static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//驱动器 private static final String DBURL="jdbc:mysql://localhost:3306/test?serverTimezone=UTC";//URL,test为数据库名 private static final String DBUSER="root";//user private static final String DBPASSWORD="*******";//密码 private Connection conn=null; //构造函数加载驱动 public DataBaseConnection() throws Exception{ try{ Class.forName(DBDRIVER); this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); }catch(Exception e){ throw e; } } //获取连接对象 public Connection getConnection(){ return this.conn; } //关闭连接 public void close() throws Exception{ if(this.conn!=null){ try{ this.conn.close(); }catch(Exception e){ throw e; } } } } 

三. 定义DAO接口类

package com.org.dao; import java.util.List; //接口类,主要定义操作的接口,定义一系列数据库的原子性操作的标准,如增,删,改,查等 import com.org.vo.Emp; //导入VO数据类 public interface IEmpDAO { //插入操作 public boolean doInsert(Emp emp) throws Exception; //多条查询 public List <Emp> getAll(String keyWord) throws Exception; //Id查询 public Emp getById(int id) throws Exception; } 

四. 实现类Impl——实现DAO中的方法

package com.org.dao.impl; import java.sql.ResultSet; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import com.org.dao.IEmpDAO; import com.org.vo.Emp; /*
	DAO接口的真实实现类,完成具体的数据库操作,但是不负责数据库打开和关闭。
 */ public class EmpDAOImpl implements IEmpDAO{ private java.sql.Connection conn=null;//连接对象 private java.sql.PreparedStatement pst=null;//数据库PreparedStatement对象 //构造方法 public EmpDAOImpl(java.sql.Connection conn) { super(); this.conn=conn; } //插入 @Override public boolean doInsert(Emp emp) throws Exception { boolean flag=false; String sql="INSERT INTO emp(id,name,job,hireDate,sal) VALUES(?,?,?,?,?)"; this.pst=this.conn.prepareStatement(sql); this.pst.setInt(1,emp.getId()); this.pst.setString(2, emp.getName()); this.pst.setString(3,emp.getJob()); System.out.println(emp.getHireDate());//打印录入时间 DateFormat df=new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date=df.parse(emp.getHireDate()); //设置时间 this.pst.setDate(4, new java.sql.Date(date.getTime())); this.pst.setFloat(5, emp.getSal()); if(this.pst.executeUpdate()>0)//插入成功 { flag=true; } this.pst.close();//关闭 return flag; } //模糊查询多条 @Override public List<Emp> getAll(String keyWord) throws Exception { List<Emp> all=new ArrayList<Emp>(); String sql="SELECT * FROM emp WHERE name like ? OR job like ?"; this.pst=this.conn.prepareStatement(sql); this.pst.setString(1, "%"+keyWord+"%"); this.pst.setString(2, "%"+keyWord+"%"); ResultSet rs=this.pst.executeQuery(); Emp emp=null; while(rs.next()){ emp=new Emp(); emp.setId(rs.getInt(1)); emp.setName(rs.getString(2)); emp.setJob(rs.getString(3)); emp.setHireDate(rs.getDate(4).toString()); emp.setSal(rs.getFloat(5)); //加入序列List all.add(emp); } return all; } //查询Id @Override public Emp getById(int id) throws Exception { Emp emp=null; String sql="SELECT * FROM emp WHERE id=?"; this.pst=this.conn.prepareStatement(sql); this.pst.setInt(1, id); ResultSet rs=this.pst.executeQuery(); if(rs.next()){ emp=new Emp(); emp.setId(rs.getInt(1)); emp.setName(rs.getString(2)); emp.setJob(rs.getString(3)); emp.setHireDate(rs.getDate(4).toString()); emp.setSal(rs.getFloat(5)); } return emp; } } 

五.代理类

package com.org.dao.proxy; import java.util.List; import com.org.dao.IEmpDAO; import com.org.dao.impl.EmpDAOImpl; import com.org.dbc.DataBaseConnection; import com.org.vo.Emp; //代理实现类,主要完成数据库的打开和关闭并且调用真实实现类对象的操作; public class EmpDAOProxy implements IEmpDAO{ private DataBaseConnection dbc=null;//数据库连接类 private IEmpDAO dao=null;//DAO抽象类 //构造函数 public EmpDAOProxy() throws Exception{ //实例化DataBaseConnection和EmpDAOImpl实现类对象 this.dbc=new DataBaseConnection(); this.dao=new EmpDAOImpl(this.dbc.getConnection()); } @Override public boolean doInsert(Emp emp) throws Exception { boolean flag=false; try { //没有找到Id成员,执行插入 if(this.dao.getById(emp.getId())==null) { flag=dao.doInsert(emp); } } catch (Exception e) { throw e; }finally { this.dbc.close(); } return flag; } @Override public List<Emp> getAll(String keyWord) throws Exception { List<Emp> all=null; try { all=this.dao.getAll(keyWord); }catch (Exception e) { throw e; }finally { this.dbc.close(); } return all; } @Override public Emp getById(int id) throws Exception { Emp emp=null; try { emp=this.dao.getById(id); } catch (Exception e) { throw e; }finally { this.dbc.close(); } return emp; } } 

六.工厂类

package com.org.factory; import com.org.dao.IEmpDAO; import com.org.dao.proxy.EmpDAOProxy; //工厂类通过工厂类取得一个DAO的实例化对象。 public class DAOFactory { public static IEmpDAO getIEmpDAOInstance() throws Exception{ return new EmpDAOProxy(); } } 

验证Insert功能

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.org.factory.DAOFactory; import com.org.vo.Emp; /**
 * Servlet implementation class testInsert
 */ @WebServlet("/testInsert") public class testInsert extends HttpServlet { private static final long serialVersionUID = 1L; /**
     * @see HttpServlet#HttpServlet()
     */ public testInsert() { super(); // TODO Auto-generated constructor stub } /**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */ @SuppressWarnings("null") protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Emp emp=new Emp(); for(int i=0;i<5;i++) { emp.setId(i); emp.setName("Jack"+i); emp.setJob("Job"+i); emp.setHireDate("2020-07-02"); emp.setSal(10000); try { DAOFactory.getIEmpDAOInstance().doInsert(emp); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } 

java开发中的Dao设计模式解析

模糊查询

import java.io.BufferedReader; import java.io.IOException; import java.nio.Buffer; import java.util.Iterator; import java.util.List; import java.util.Scanner; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.connector.InputBuffer; import com.org.factory.DAOFactory; import com.org.vo.Emp; /**
 * Servlet implementation class testGet
 */ @WebServlet("/testGet") public class testGet extends HttpServlet { private static final long serialVersionUID = 1L; /**
     * @see HttpServlet#HttpServlet()
     */ public testGet() { super(); // TODO Auto-generated constructor stub } /**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Emp> allEmps = null; try { allEmps = DAOFactory.getIEmpDAOInstance().getAll("Jack"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Iterator<Emp> iterator=allEmps.iterator(); while(iterator.hasNext()) { Emp emp=iterator.next(); System.out.println(emp.getId()+"		"+emp.getName()+"	"+emp.getJob()+"	"+emp.getHireDate()+"	"+emp.getSal()); } } /**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } 

java开发中的Dao设计模式解析

本文地址:https://blog.csdn.net/weixin_44307065/article/details/107077375