潛心學習 技術強身

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            14 隨筆 :: 0 文章 :: 8 評論 :: 0 Trackbacks
          VO(value object) 值對象
              通常用于業務層之間的數據傳遞,和PO一樣也是僅僅包含數據而已。但應是抽象出的業務對象,可以和表對應,也可以不,這根據業務的需要.個人覺得同DTO(數據傳輸對象),在web上傳遞。
              對于數據庫而言,每一個VO對象可以表示出一張表中的一行記錄,此類的名稱要與表的名稱一致。

          BO(business object) 業務對象
               從業務模型的角度看,見UML元件領域模型中的領域對象。封裝業務邏輯的java對象,通過調用DAO方法,結合PO,VO進行業務操作。

          PO(persistant object) 持久對象
               在o/r映射的時候出現的概念,如果沒有o/r映射,沒有這個概念存在了。通常對應數據模型(數據庫),本身還有部分業務邏輯的處理。可以看成是與數據庫中的表相映射的java對象。最簡單的PO就是對應數據庫中某個表中的一條記錄,多個記錄可以用PO的集合。PO中應該不包含任何對數據庫的操作。

          DAO(data access object )數據訪問對象
              此對象用于訪問數據庫。通常和PO結合使用,DAO中包含了各種數據庫的操作方法。通過它的方法,結合PO對數據庫進行相關的操作。
              建議命名規則:I表名DAO,如IUserDAO
              方法命名規則:更新數據庫 doXxx()
                                 查詢數據庫 findXxx()或getXxx()

          POJO(plain ordinary java object) 簡單無規則java對象。

          DAO設計模式
          實現類
             
          實現DAO接口的具體方法,如實現具體CRUD操作。但沒有具體的數據庫的連接、打開、關閉,具體的操作可以放在代理(Proxy)中,因為這些操作與具體業務無關。

          代理(Proxy)
              實現具體的操作及數據庫的連接開關,并且實現其具體的主題類。

          工廠模式(Factory)
              有接口就必須有工廠類進行耦合。

          注意:在Java開發web頁面中,永遠不導入java.sql包,只能導入java.util.*和vo包。

          下面給出一個具體的例子的代碼(來自mldn李新華的教程):
          VO:(oracle.vo)
           1package org.lxh.oracle.vo;
           2
           3import java.util.Date;
           4
           5public class Emp {
           6    private int empno ;
           7    private String ename ;
           8    private String job ;
           9    private Date hiredate ;
          10    private float sal ;
          11    private float comm ;
          12    private String photo ;
          13    public float getComm() {
          14        return comm;
          15    }

          16    public void setComm(float comm) {
          17        this.comm = comm;
          18    }

          19    public int getEmpno() {
          20        return empno;
          21    }

          22    public void setEmpno(int empno) {
          23        this.empno = empno;
          24    }

          25    public Date getHiredate() {
          26        return hiredate;
          27    }

          28    public void setHiredate(Date hiredate) {
          29        this.hiredate = hiredate;
          30    }

          31    public String getJob() {
          32        return job;
          33    }

          34    public void setJob(String job) {
          35        this.job = job;
          36    }

          37    public String getPhoto() {
          38        return photo;
          39    }

          40    public void setPhoto(String photo) {
          41        this.photo = photo;
          42    }

          43    public float getSal() {
          44        return sal;
          45    }

          46    public void setSal(float sal) {
          47        this.sal = sal;
          48    }

          49    public String getEname() {
          50        return ename;
          51    }

          52    public void setEname(String ename) {
          53        this.ename = ename;
          54    }

          55}
          DB的連接及開關
           1package org.lxh.oracle.dbc;
           2
           3import java.sql.* ;
           4public class DataBaseConnection{
           5    public static final String DBDRIVER = 
           6
           7"oracle.jdbc.driver.OracleDriver" ;
           8    public static final String DBURL = 
           9
          10"jdbc:oracle:thin:@localhost:1521:MLDN" ;
          11    public static final String DBUSER = 
          12
          13"scott" ;
          14    public static final String DBPASS = 
          15
          16"tiger" ;
          17    private Connection conn = null ;
          18    public DataBaseConnection(){
          19        try{
          20            Class.forName(DBDRIVER) 
          21
          22;
          23            conn = 
          24
          25DriverManager.getConnection
          26
          27(DBURL,DBUSER,DBPASS) ;
          28        }
          catch(Exception e){
          29            e.printStackTrace() ;
          30        }

          31    }

          32    public Connection getConnection(){
          33        return this.conn ;
          34    }

          35    public void close(){
          36        if(this.conn!=null){
          37            try{
          38                
          39
          40this.conn.close() ;
          41            }
          catch(Exception e){}
          42        }

          43    }

          44}
          ;
          45
          DAO類:
           1package org.lxh.oracle.dao;
           2
           3import java.util.List;
           4
           5import org.lxh.oracle.vo.Emp;
           6
           7public interface IEmpDAO {
           8    public boolean doCreate(Emp emp) throws Exception;
           9
          10    public boolean doUpdate(Emp emp) throws Exception;
          11
          12    public boolean doDelete(int empno) throws Exception;
          13
          14    public Emp findById(int empno) throws Exception;
          15    
          16    public List findAll(int currentPage,int lineSize,String keyWord) throws Exception ;
          17    
          18    public int getAllCount(String keyWord) throws Exception ;
          19}
          Implements實現類
            1package org.lxh.oracle.dao.impl;
            2
            3import java.sql.Connection;
            4import java.sql.PreparedStatement;
            5import java.sql.ResultSet;
            6import java.util.ArrayList;
            7import java.util.List;
            8
            9import org.lxh.oracle.dao.IEmpDAO;
           10import org.lxh.oracle.vo.Emp;
           11
           12public class IEmpDAOImpl implements IEmpDAO {
           13    private Connection conn = null// 如果要想完成數據庫操作則肯定需要數據庫連接對象
           14    public IEmpDAOImpl(Connection conn){
           15        this.conn = conn ;        // 由外部實例化時傳遞連接
           16    }

           17    public boolean doCreate(Emp emp) throws Exception {
           18        boolean flag = false;
           19        PreparedStatement pstmt = null;
           20        String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal,comm,photo) VALUES (?,?,?,?,?,?,?)";
           21        try {
           22            pstmt = this.conn.prepareStatement(sql);
           23            pstmt.setInt(1, emp.getEmpno());
           24            pstmt.setString(2, emp.getEname());
           25            pstmt.setString(3, emp.getJob());
           26            pstmt.setDate(4new java.sql.Date(emp.getHiredate().getTime()));
           27            pstmt.setFloat(5, emp.getSal());
           28            pstmt.setFloat(6, emp.getComm());
           29            pstmt.setString(7, emp.getPhoto());
           30            int count = pstmt.executeUpdate(); // 執行更新,返回更新的記錄數
           31            if (count > 0{
           32                flag = true;
           33            }

           34        }
           catch (Exception e) {
           35            throw e;
           36        }
           finally {
           37            try {
           38                pstmt.close();
           39            }
           catch (Exception e) {
           40            }

           41        }

           42        return flag;
           43    }

           44
           45    public boolean doDelete(int empno) throws Exception {
           46        boolean flag = false;
           47        PreparedStatement pstmt = null;
           48        String sql = "DELETE FROM emp WHERE empno=?";
           49        try {
           50            pstmt = this.conn.prepareStatement(sql);
           51            pstmt.setInt(1, empno);
           52            int count = pstmt.executeUpdate(); // 執行更新,返回更新的記錄數
           53            if (count > 0{
           54                flag = true;
           55            }

           56        }
           catch (Exception e) {
           57            throw e;
           58        }
           finally {
           59            try {
           60                pstmt.close();
           61            }
           catch (Exception e) {
           62            }

           63        }

           64        return flag;
           65    }

           66
           67    public boolean doUpdate(Emp emp) throws Exception {
           68        boolean flag = false;
           69        PreparedStatement pstmt = null;
           70        String sql = "UPDATE emp SET ename=?,job=?,hiredate=?,sal=?,comm=?,photo=? WHERE empno=?";
           71        try {
           72            pstmt = this.conn.prepareStatement(sql);
           73            pstmt.setString(1, emp.getEname());
           74            pstmt.setString(2, emp.getJob());
           75            pstmt.setDate(3new java.sql.Date(emp.getHiredate().getTime()));
           76            pstmt.setFloat(4, emp.getSal());
           77            pstmt.setFloat(5, emp.getComm());
           78            pstmt.setString(6, emp.getPhoto());
           79            pstmt.setInt(7, emp.getEmpno());
           80            int count = pstmt.executeUpdate(); // 執行更新,返回更新的記錄數
           81            if (count > 0{
           82                flag = true;
           83            }

           84        }
           catch (Exception e) {
           85            throw e;
           86        }
           finally {
           87            try {
           88                pstmt.close();
           89            }
           catch (Exception e) {
           90            }

           91        }

           92        return flag;
           93    }

           94
           95    public List findAll(int currentPage, int lineSize, String keyWord)
           96            throws Exception {
           97        List allEmp = new ArrayList();
           98        PreparedStatement pstmt = null;
           99        String sql = "SELECT temp.* FROM "
          100                + "(SELECT empno,ename,job,hiredate,sal,comm,photo,ROWNUM rn "
          101                + " FROM emp "
          102                + " WHERE (empno LIKE upper(?) OR ename LIKE upper(?) OR job LIKE upper(?) "
          103                + "OR to_char(hiredate,'yyyy') LIKE upper(?) OR to_char(hiredate,'mm') LIKE upper(?)"
          104                + " OR to_char(hiredate,'dd') LIKE upper(?) OR sal LIKE upper(?) OR comm LIKE upper(?)) "
          105                + " AND ROWNUM<=" + (currentPage * lineSize)
          106                + ") temp WHERE temp.rn>" + (currentPage - 1* lineSize;
          107        try {
          108            pstmt = this.conn.prepareStatement(sql);
          109            pstmt.setString(1"%" + keyWord + "%");
          110            pstmt.setString(2"%" + keyWord + "%");
          111            pstmt.setString(3"%" + keyWord + "%");
          112            pstmt.setString(4"%" + keyWord + "%");
          113            pstmt.setString(5"%" + keyWord + "%");
          114            pstmt.setString(6"%" + keyWord + "%");
          115            pstmt.setString(7"%" + keyWord + "%");
          116            pstmt.setString(8"%" + keyWord + "%");
          117            ResultSet rs = pstmt.executeQuery();
          118            Emp emp = null;
          119            while (rs.next()) {
          120                emp = new Emp();
          121                emp.setEmpno(rs.getInt(1));
          122                emp.setEname(rs.getString(2));
          123                emp.setJob(rs.getString(3));
          124                emp.setHiredate(rs.getDate(4));
          125                emp.setSal(rs.getFloat(5));
          126                emp.setComm(rs.getFloat(6));
          127                emp.setPhoto(rs.getString(7));
          128                allEmp.add(emp);
          129            }

          130            rs.close();
          131        }
           catch (Exception e) {
          132            throw e;
          133        }
           finally {
          134            try {
          135                pstmt.close();
          136            }
           catch (Exception e) {
          137            }

          138        }

          139        return allEmp;
          140    }

          141
          142    public Emp findById(int empno) throws Exception {
          143        Emp emp = null;
          144        PreparedStatement pstmt = null;
          145        String sql = "SELECT empno,ename,job,hiredate,sal,comm,photo FROM emp WHERE empno=?";
          146        try {
          147            pstmt = this.conn.prepareStatement(sql);
          148            pstmt.setInt(1, empno);
          149            ResultSet rs = pstmt.executeQuery();
          150            if (rs.next()) // 表示已經查找到了
          151                emp = new Emp();
          152                emp.setEmpno(rs.getInt(1));
          153                emp.setEname(rs.getString(2));
          154                emp.setJob(rs.getString(3));
          155                emp.setHiredate(rs.getDate(4));
          156                emp.setSal(rs.getFloat(5));
          157                emp.setComm(rs.getFloat(6));
          158                emp.setPhoto(rs.getString(7));
          159            }

          160            rs.close();
          161        }
           catch (Exception e) {
          162            throw e;
          163        }
           finally {
          164            try {
          165                pstmt.close();
          166            }
           catch (Exception e) {
          167            }

          168        }

          169        return emp;
          170    }

          171
          172    public int getAllCount(String keyWord) throws Exception {
          173        int count = 0;
          174        PreparedStatement pstmt = null;
          175        String sql = "SELECT COUNT(empno) FROM emp "
          176                + " WHERE empno LIKE upper(?) OR ename LIKE upper(?) OR job LIKE upper(?) "
          177                + " OR to_char(hiredate,'yyyy') LIKE upper(?) OR to_char(hiredate,'mm') LIKE upper(?) "
          178                + " OR to_char(hiredate,'dd') LIKE upper(?) OR sal LIKE upper(?) OR comm LIKE upper(?)";
          179        try {
          180            pstmt = this.conn.prepareStatement(sql);
          181            pstmt.setString(1,"%"+keyWord+"%") ;
          182            pstmt.setString(2,"%"+keyWord+"%") ;
          183            pstmt.setString(3,"%"+keyWord+"%") ;
          184            pstmt.setString(4,"%"+keyWord+"%") ;
          185            pstmt.setString(5,"%"+keyWord+"%") ;
          186            pstmt.setString(6,"%"+keyWord+"%") ;
          187            pstmt.setString(7,"%"+keyWord+"%") ;
          188            pstmt.setString(8,"%"+keyWord+"%") ;
          189            ResultSet rs = pstmt.executeQuery();
          190            if (rs.next()) // 表示已經查找到了
          191                count = rs.getInt(1) ;
          192            }

          193            rs.close();
          194        }
           catch (Exception e) {
          195            throw e;
          196        }
           finally {
          197            try {
          198                pstmt.close();
          199            }
           catch (Exception e) {
          200            }

          201        }

          202        return count;
          203    }

          204
          205}

          206
          Proxy類
           1package org.lxh.oracle.dao.proxy;
           2
           3import java.util.List;
           4
           5import org.lxh.oracle.dao.IEmpDAO;
           6import org.lxh.oracle.dao.impl.IEmpDAOImpl;
           7import org.lxh.oracle.dbc.DataBaseConnection;
           8import org.lxh.oracle.vo.Emp;
           9
          10public class IEmpDAOProxy implements IEmpDAO {
          11    private DataBaseConnection dbc = null ;
          12    private IEmpDAO dao = null ;
          13    private int count = 0 ;
          14    public IEmpDAOProxy(){
          15        this.dbc = new DataBaseConnection() ;    // 在代理類中完成數據庫連接對象的實例化
          16        this.dao = new IEmpDAOImpl(this.dbc.getConnection()) ;
          17    }

          18    public boolean doCreate(Emp emp) throws Exception {
          19        boolean flag = false ;
          20        try{
          21            if(this.dao.findById(emp.getEmpno())==null){
          22                flag = this.dao.doCreate(emp) ;        // 調用真實主題實現類
          23            }

          24        }
          catch(Exception e){
          25            throw e ;
          26        }
          finally{
          27            this.dbc.close() ;
          28        }

          29        return flag;
          30    }

          31
          32    public boolean doDelete(int empno) throws Exception {
          33        boolean flag = false ;
          34        try{
          35            flag = this.dao.doDelete(empno) ;        // 調用真實主題實現類
          36        }
          catch(Exception e){
          37            throw e ;
          38        }
          finally{
          39            this.dbc.close() ;
          40        }

          41        return flag;
          42    }

          43
          44    public boolean doUpdate(Emp emp) throws Exception {
          45        boolean flag = false ;
          46        try{
          47            flag = this.dao.doUpdate(emp) ;            // 調用真實主題實現類
          48        }
          catch(Exception e){
          49            throw e ;
          50        }
          finally{
          51            this.dbc.close() ;
          52        }

          53        return flag;
          54    }

          55
          56    public List findAll(int currentPage, int lineSize, String keyWord)
          57            throws Exception {
          58        List all = null ;
          59        try{
          60            all = this.dao.findAll(currentPage, lineSize, keyWord) ;
          61            this.count = this.dao.getAllCount(keyWord) ;    // 查全部記錄的時候把全部的記錄數也查出來
          62        }
          catch(Exception e){
          63            throw e ;
          64        }
          finally{
          65            this.dbc.close() ;
          66        }

          67        return all;
          68    }

          69
          70    public Emp findById(int empno) throws Exception {
          71        Emp emp = null ;
          72        try{
          73            emp = this.dao.findById(empno) ;
          74        }
          catch(Exception e){
          75            throw e ;
          76        }
          finally{
          77            this.dbc.close() ;
          78        }

          79        return emp;
          80    }

          81
          82    public int getAllCount(String keyWord) throws Exception {
          83        return this.count;
          84    }

          85
          86}

          87

          工廠Factory類
           1package org.lxh.oracle.dao.factory;
           2
           3import org.lxh.oracle.dao.IEmpDAO;
           4import org.lxh.oracle.dao.proxy.IEmpDAOProxy;
           5
           6public class DAOFactory {
           7    public static IEmpDAO getIEmpDAOInstance(){
           8        return new IEmpDAOProxy() ;
           9    }

          10}
          posted on 2009-08-01 11:12 平濤 閱讀(522) 評論(1)  編輯  收藏 所屬分類: 術語區

          評論

          # re: Java基礎術語解釋hfgjh 2015-06-08 17:13 m.m.,
          sfgghdfhj  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 虎林市| 罗源县| 台北县| 怀化市| 临湘市| 惠水县| 井冈山市| 大城县| 丽江市| 策勒县| 卓尼县| 八宿县| 山丹县| 曲麻莱县| 东方市| 登封市| 舞阳县| 武平县| 东乡| 望奎县| 永平县| 瑞昌市| 健康| 通许县| 高州市| 文化| 莱芜市| 阳山县| 淮阳县| 镇康县| 陆川县| 马边| 拉萨市| 剑河县| 揭西县| 罗源县| 漳平市| 邢台市| 德庆县| 崇明县| 博客|