六、实例解析

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: 小 | 中 | 大 | 超大  

一、信息系统的开发架构

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

1.客户层:客户层就是客户端,简单的来说就是浏览器。

2.显示层:jsp/Servlet,用于给浏览器显示。

3.业务层:对于数据层的原子操作进行整合。

4.数据层:对于数据库进行的原子操作,增加、删除等;

二、DAO(DataaccessObject)介绍

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 VO类

[java] view plaincopy

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 连接数据库操作

[java]view plaincopy

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 dao接口

[java]view plaincopy

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 接口的实现类

[java]view plaincopy

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 数据库开关

[java]view plaincopy

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 工厂类

[java]view plaincopy

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

[java]view plaincopy

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有