DAO设计模式
来源:互联网 发布:中级java工程师薪资 编辑:程序博客网 时间:2024/06/06 13:09
DAO:Data Access Object,数据访问对象。
DatabaseConnection:专门负责数据库的打开与关闭操作的类。
VO:主要由属性、setter、getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录。
DAO:主要定义操作的接口,定义一系列数据库的原子性操作标准,如增加、修改、按ID查询等。
Impl:DAO接口的真实实现类,完成具体的数据库操作
Proxy:代理实现类,主要完成数据库的打开和关闭,并且调用真实实现类对象的操作。
Factory:工厂类,通过工厂类取得一个DAO的实例化对象。
第1步:数据库建表,emp。
第2步:定义对应的VO类-Emp.java
package cn.edu.lyu.vo;
import java.util.Date;
public class Emp
{
private intempno;
private Stringname;
private Stringjob;
privateDate hiredate;
private floatsal;
public intgetEmpno()
{
returnempno;
}
public voidsetEmpno(intempno)
{
this.empno =empno;
}
publicString getName()
{
returnname;
}
public voidsetName(Stringname)
{
this.name =name;
}
public StringgetJob()
{
returnjob;
}
public voidsetJob(Stringjob)
{
this.job =job;
}
publicDate getHiredate()
{
returnhiredate;
}
publicvoid setHiredate(Datehiredate)
{
this.hiredate =hiredate;
}
public floatgetSal()
{
returnsal;
}
public voidsetSal(floatsal)
{
this.sal =sal;
}
}
第3步:定义一个DatabaseConnection.java类,此类主要完成数据库的打开及关闭操作。
package cn.edu.lyu.dbc;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;
import com.mysql.jdbc.Connection;
public class DatabaseConnection
{
private static final String DBDRIVER = "com.mysql.jdbc.Driver";
private static final String DBURL = "jdbc:mysql://localhost:3306/mysql";
private static final String DBUSER = "root";
private static final String DBPASS = "123456";
private Connection conn = null;
public DatabaseConnection()
{
try {
Class.forName(DBDRIVER);
try {
this.conn = (Connection) DriverManager.getConnection(DBURL, DBUSER, DBPASS);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConnection()
{
return this.conn;
}
public void close()
{
if(this.conn != null)
try {
this.conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第4步:定义最重要的DAO接口,在定义DAO接口之前必须对业务进行详细的分析,要清楚地知道一张表在整个系统中应该具备何种功能。定义DAO操作标准-IEmpDAO.java
package cn.edu.lyu.dao;
import java.util.List;
import cn.edu.lyu.vo.Emp;
public interface IEmpDAO
{
public booleandoCreate(Empemp) throwsException;
publicList<Emp>findAll(StringkeyWord) throwsException;
public EmpfindById(intempno) throwsException;
}
第5步:真实主题实现类--EmpDAOImpl.java
package cn.edu.lyu.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import cn.edu.lyu.dao.IEmpDAO;
import cn.edu.lyu.vo.Emp;
public class EmpDAOImpl implements IEmpDAO
{
private Connection conn = null;//数据库连接对象
private PreparedStatement pstmt = null;//数据库操作对象
public EmpDAOImpl(Connection conn)//通过构造方法取得数据库连接
{
this.conn = conn;//获得数据库连接
}
public boolean doCreate(Emp emp) throws Exception
{
boolean flag = false;//定义标志位
String sql = "insert into emp(empno,ename,job,hiredate,sal) values(?,?,?,?,?)";
this.pstmt = this.conn.prepareStatement(sql);//实例化PreparedStatement对象
this.pstmt.setInt(1, emp.getEmpno());//设置empno
this.pstmt.setString(2, emp.getName());//设置ename
this.pstmt.setString(3, emp.getJob());
this.pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime()));
this.pstmt.setFloat(5, emp.getSal());
if(this.pstmt.executeUpdate()>0)//更新记录的行数大于0
{
flag = true;//修改标志位
}
this.pstmt.close();
return flag;
}
public List<Emp> findAll(String keyWord) throws Exception
{
List<Emp> all = new ArrayList<Emp>();//定义集合,接收全部数据
String sql = "select empno,ename,job,hiredate,sal from emp where ename like ? or job like ?";
this.pstmt = this.conn.prepareStatement(sql);//实例化PreparedStatement对象
this.pstmt.setString(1, "%"+keyWord+"%");//设置查询关键字
this.pstmt.setString(2, "%"+keyWord+"%");
ResultSet rs = this.pstmt.executeQuery();//执行查询操作
Emp emp = null;
while(rs.next())
{
emp = new Emp();
emp.setEmpno(rs.getInt(1));
emp.setName(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setHiredate(rs.getDate(4));
emp.setSal(rs.getFloat(5));
all.add(emp);
}
this.pstmt.close();
return all;
}
public Emp findById(int empno) throws Exception
{
Emp emp = null;
String sql = "select empno,ename,job,hiredate,sal from emp where empno = ?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setInt(1, empno);
ResultSet rs = this.pstmt.executeQuery();
if(rs.next())
{
emp = new Emp();
emp.setEmpno(rs.getInt(1));
emp.setName(rs.getString(2));
emp.setJob(rs.getString(3));
emp.setHiredate(rs.getDate(4));
emp.setSal(rs.getFloat(5));
}
this.pstmt.close();
return emp;
}
}
package cn.edu.lyu.proxy;
import java.util.List;
import cn.edu.lyu.dao.IEmpDAO;
import cn.edu.lyu.dao.impl.EmpDAOImpl;
import cn.edu.lyu.dbc.DatabaseConnection;
import cn.edu.lyu.vo.Emp;
public class EmpDAOProxyimplements IEmpDAO
{
privateDatabaseConnection dbc =null;
private IEmpDAOdao = null;
public EmpDAOProxy()throws Exception
{
this.dbc =new DatabaseConnection();
this.dao =new EmpDAOImpl(this.dbc.getConnection());
}
@Override
public booleandoCreate(Empemp) throwsException
{
booleanflag = false;
if(this.dao.findById(emp.getEmpno()) ==null)//如果要插入的雇员编号不存在
{
flag =this.dao.doCreate(emp);//调用真实主题操作
}
this.dbc.close();
returnflag;
}
@Override
publicList<Emp>findAll(StringkeyWord) throwsException
{
List<Emp>all = null;
all = this.dao.findAll(keyWord);//调用真实主题操作
this.dbc.close();
returnall;
}
@Override
public EmpfindById(intempno) throwsException
{
Emp emp = null;
emp = this.dao.findById(empno);
this.dbc.close();
returnemp;
}
}
第7步:DAO工厂类--DAOFactory
package cn.edu.lyu.factory;
import cn.edu.lyu.dao.IEmpDAO;
import cn.edu.lyu.proxy.EmpDAOProxy;
public class DAOFactory
{
publicstatic IEmpDAOgetIEmpDAOInstance() throwsException
{
returnnew EmpDAOProxy();
}
}
第8步:测试DAO插入功能--TestDAOInsert.java
ackage cn.edu.lyu.dao.test;
import cn.edu.lyu.factory.DAOFactory;
import cn.edu.lyu.vo.Emp;
public classTestDAOInsert
{
public staticvoid main(String[]args) throwsException
{
Emp emp = null;
for(intx = 0; x <5; x++)
{
emp =new Emp();
emp.setEmpno(1000 +x);
emp.setName("张龙翔 -" +x);
emp.setJob("程序员 -" +x);
emp.setHiredate(new java.util.Date());
emp.setSal(500 *x);
DAOFactory.getIEmpDAOInstance().doCreate(emp);
}
}
}
第9步:JSP调用DAO
增加雇员---emp_insert.jsp
<%@ pagecontentType="text/html; charset=utf-8"%>
<html>
<head><title>张龙翔Java高端培训</title></head>
<body>
<formaction="emp_insert_do.jsp"method="post">
雇员编号:<inputtype="text"name="empno"><br>
雇员姓名:<inputtype="text"name="name"><br>
雇员职位:<inputtype="text"name="job"><br>
雇佣日期:<inputtype="text"name="hiredate"><br>
基本工资:<inputtype="text"name="sal"><br>
<inputtype ="submit" value= "注册">
<inputtype ="reset" value= "重置">
</form>
</body>
</html>
完成增加雇员的操作--emp_insert_do.jsp
<%@ pagecontentType="text/html; charset=utf-8"%>
<%@ pageimport="cn.edu.lyu.factory.*,cn.edu.lyu.vo.*"%>
<%@ pageimport="java.text.*"%>
<html>
<head><title>张龙翔Java高端培训</title></head>
<body>
<%
Emp emp = new Emp();
emp.setEmpno(Integer.parseInt(request.getParameter("empno")));
emp.setName(request.getParameter("name"));
emp.setJob(request.getParameter("job"));
emp.setHiredate(new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("hiredate")));
emp.setSal(Float.parseFloat(request.getParameter("sal")));
if(DAOFactory.getIEmpDAOInstance().doCreate(emp)){
%>
<h3>雇员信息添加成功!</h3>
<%
}else{
%>
<h3>雇员信息添加失败!</h3>
<%
}
%>
</body>
</html>
数据查询----emp_list.jsp
<%@ pagecontentType="text/html; charset=utf-8"%>
<%@ pageimport ="cn.edu.lyu.factory.*,cn.edu.lyu.vo.*"%>
<%@ pageimport ="java.util.*"%>
<html>
<head><title>张龙翔高端Java培训</title></head>
<body>
<%
String keyWord = request.getParameter("kw");
if(keyWord==null)
{
keyWord="";
}
List<Emp> all=DAOFactory.getIEmpDAOInstance().findAll(keyWord);
Iterator<Emp> iter=all.iterator();
%>
<formaction="emp_list.jsp"method="post">
请输入查询关键字(姓名或职位)<inputtype="text"name="kw">
<inputtype="submit"value="查询">
</form>
<tableborder="1"width="80%">
<tr>
<td>雇员编号</td>
<td>雇员姓名</td>
<td>雇员工作</td>
<td>雇员工资</td>
<td>雇佣日期</td>
</tr>
<%
while(iter.hasNext())
{
Emp emp = iter.next();
%>
<tr>
<td><%=emp.getEmpno()%></td>
<td><%=emp.getName()%></td>
<td><%=emp.getJob()%></td>
<td><%=emp.getSal()%></td>
<td><%=emp.getHiredate()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
- 实现DAO 设计模式
- DAO设计模式
- 实现DAO 设计模式
- 什么DAO设计模式
- 设计模式--DAO
- DAO设计模式
- DAO设计模式
- 实现DAO 设计模式
- DAO设计模式(转)
- DAO 设计模式 总结
- DAO设计模式笔记
- DAO设计模式总结
- dao设计模式
- DAO设计模式
- DAO设计模式
- DAO 设计模式
- DAO设计模式基础
- DAO设计模式
- 原来如此
- kali 2.0安装VM tools
- Oracle学习笔记20150818一些常见查询语句
- Swift环境下实现UILabel居上 居中 居下对齐
- 软件汉化
- DAO设计模式
- GDOI2016模拟8.16逃离牛棚
- Android侧滑菜单
- SparkR
- hibernate 保存图片到数据库(oracle)
- 《Java网络编程》读书笔记(一)
- Linux源代码目录树结构
- 通过ApplicationContextAwareSpring实现手工加载配置的javabean
- python自动登录BAIDU,失效版