<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    潛心學習 技術強身

      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  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 免费毛片在线播放| 亚洲AV无码专区在线观看成人| 国产一级理论免费版| 久久aⅴ免费观看| 一级特黄a免费大片| 精品无码专区亚洲| 亚洲国产成人精品激情| 午夜亚洲国产理论秋霞| 国产aⅴ无码专区亚洲av麻豆| 日韩精品视频免费网址| 四虎永久在线观看免费网站网址| 亚洲午夜精品久久久久久浪潮| 曰曰鲁夜夜免费播放视频| 日本一道本不卡免费| 粉色视频免费入口| 色九月亚洲综合网| 亚洲欧美日本韩国| 亚洲H在线播放在线观看H| 内射少妇36P亚洲区| 亚洲AV第一页国产精品| 亚洲小说区图片区另类春色| 亚洲国产精品成人久久蜜臀 | 亚洲精品成a人在线观看| 成人免费视频试看120秒| 免费精品国偷自产在线在线 | 亚洲精品国产成人片| 亚洲国产成人乱码精品女人久久久不卡| 卡一卡二卡三在线入口免费| 成人a视频片在线观看免费| 最近中文字幕mv手机免费高清| 中文字幕乱码免费视频| 青青青国产在线观看免费| 久久久久av无码免费网| 日本免费网站视频www区| 国产高清不卡免费在线| 99久久99久久精品免费看蜜桃| 免费精品国产日韩热久久| 一个人免费观看视频www| 国产精品无码免费播放| 免费无码看av的网站| 国产午夜免费福利红片|