JavaBean中DAO設計模式介紹__Java

來源:互聯網
上載者:User

一、資訊系統的開發架構

客戶層-------顯示層-------業務層---------資料層---------資料庫

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只負責顯示的效果。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.