欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過代理類實現(xiàn)java連接數(shù)據(jù)庫(使用dao層操作數(shù)據(jù))實例分享

 更新時間:2013年12月25日 11:16:39   作者:  
java通過代理類實現(xiàn)數(shù)據(jù)庫DAO操作代碼分享,大家參考使用吧

首先,我們在一個java文件中定義要存儲的結(jié)構類型:

復制代碼 代碼如下:

import java.util.Date ;
/**
 *
 * @author Nero
 */
public class Emp {
    private int empno ;
    private String ename ;
    private String job ;
    private Date hiredate ;
    private float sal ;
    public void setEmpno(int empno){
        this.empno = empno ;
    }
    public void setEname(String ename){
        this.ename = ename ;
    }
    public void setJob(String job){
        this.job = job ;
    }
    public void setHiredate(Date hiredate){
        this.hiredate = hiredate ;
    }
    public void setSal(float sal){
        this.sal = sal ;
    }
    public int getEmpno(){
        return this.empno ;
    }
    public String getEname(){
        return this.ename ;
    }
    public String getJob(){
        return this.job ;
    }
    public Date getHiredate(){
        return this.hiredate ;
    }
    public float getSal(){
        return this.sal ;
    }
}

下面我們定義一個數(shù)據(jù)庫連接類,負責向數(shù)據(jù)庫發(fā)起連接。java連接數(shù)據(jù)庫需要驅(qū)動包,我們可以自行下載,測試的時候我使用的是mysql-connector-java-5.0.5-bin.jar。在運行程序的時候Eclipse會提示需要加載的數(shù)據(jù)庫驅(qū)動包,一些是類似于"org.gjt.mm.mysql.Driver" 之類的標準包,一般來說我們選擇工作目錄里的驅(qū)動包就可以了。

復制代碼 代碼如下:

import java.sql.Connection ;
import java.sql.DriverManager ;
/**
 *
 * @author Nero
 */
public class DatabaseConnection {
    private static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
    private static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
    private static final String DBUSER = "root" ;
    private static final String DBPASSWORD = "root" ;
    private Connection conn ;
    public DatabaseConnection() throws Exception {
        Class.forName(DBDRIVER) ;
        this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
    }
    public Connection getConnection(){
        return this.conn ;
    }
    public void close() throws Exception {
        if(this.conn != null){
            try{
                this.conn.close() ;
            }catch(Exception e){
                throw e ;
            }
        }
    }
}

接下來我們定義一個接口,這個接口能夠幫助我們輕松地實現(xiàn)代理方法。接口內(nèi)的方法只有三個:插入、查找全部和通過ID查找。

復制代碼 代碼如下:

import java.util.* ;

/**
 *
 * @author Nero
 */
public interface IEmpDAO {
    public boolean doCreate(Emp emp) throws Exception ;
    public List<Emp> findAll(String keyWord) throws Exception ;
    public Emp findById(int empno) throws Exception ;
}

然后呢,我們繼承這個接口,實現(xiàn)具體數(shù)據(jù)庫的操作類,都是一些很基本的數(shù)據(jù)庫操作,沒啥好說的。主要要注意的是構造函數(shù)那里,參數(shù)使用Connection對象,后面使用這個類的時候要傳入前面定義的數(shù)據(jù)庫連接類DatabaseConnection中的函數(shù)getConnection()返回的Connection對象。

復制代碼 代碼如下:

import java.sql.* ;
/**
 *
 * @author Nero
 */
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);
        this.pstmt.setInt(1, emp.getEmpno());
        this.pstmt.setString(2,emp.getEname()) ;
    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)
        {
            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);
        this.pstmt.setString(1,"%"+keyWord+"%"); //轉(zhuǎn)義字符
        this.pstmt.setString(2,"%"+keyWord+"%");
        ResultSet rs = this.pstmt.executeQuery(sql);
        Emp emp = null;
        while(rs.next())
        {
            emp = new Emp();
            emp.setEmpno(rs.getInt(1));
            emp.setEname(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.setEname(rs.getString(2)) ;
            emp.setJob(rs.getString(3)) ;
            emp.setHiredate(rs.getDate(4)) ;
            emp.setSal(rs.getFloat(5)) ;
        }
        this.pstmt.close() ;
        return emp ;
    }   
}

下面我們看看代理類的實現(xiàn),個人覺得到這里就比較有意思了。在這個類里面,聲明了一個數(shù)據(jù)庫連接類DatabaseConnection的對象,一個數(shù)據(jù)庫應用類EmpDAOImpl對象,用DatabaseConnection對象初始化EmpDAOImpl對象,然后在代理類的每個函數(shù)中都使用EmpDAOImpl對象去調(diào)用從同一接口繼承而來的方法,這樣即對具體實現(xiàn)方法進行了一定程度的隱藏。

復制代碼 代碼如下:

import java.sql.* ;
/**
 *
 * @author Nero
 */
public class EmpDAOProxy implements IEmpDAO{
    private DatabaseConnection dbc = null ;
    private EmpDAOImpl dao = null ;
    public EmpDAOProxy() throws Exception{
        this.dbc = new DatabaseConnection();
        this.dao = new EmpDAOImpl(this.dbc.getConnection());
    }
    public boolean doCreate(Emp emp) throws Exception{
        boolean flag = false;
        try{
            if(this.dao.findById(emp.getEmpno()) == null)
            {
                flag = this.dao.doCreate(emp);

            }
        }catch(Exception e)
        {
            throw e;
        }finally{
            this.dbc.close();
        }
        return flag;
    }
    public List<Emp> findAll(String keyWord) throws Exception{
        List<Emp> all = null ;
        try{
            all = this.dao.findAll(keyWord) ;
        }catch(Exception e){
            throw e ;
        }finally{
            this.dbc.close() ;
        }
        return all ;
    }
    public Emp findById(int empno) throws Exception{
        Emp emp = null ;
        try{
            emp = this.dao.findById(empno) ;
        }catch(Exception e){
            throw e ;
        }finally{
            this.dbc.close() ;
        }
        return emp ;
    }
}

這還不是全部,我們可以再加一個工廠類來實現(xiàn)工廠模式:

復制代碼 代碼如下:

/**
 *
 * @author Nero
 */
public class DAOFactory {
    public static IEmpDAO getIEmpDAOInstance() throws Exception{
        return new EmpDAOProxy() ;
    }
}

這個工廠類有什么用呢?最后我們在主類文件中進行調(diào)用,可以看看工廠類有什么作用:

復制代碼 代碼如下:

/**
 *
 * @author Nero
 */
public class TestDAOInsert {
    public static void main(String args[]) throws Exception{
        Emp emp = null ;
        for(int x=0;x<5;x++){
            emp = new Emp() ;
            emp.setEmpno(1000 + x) ;
            emp.setEname("中文顯示測試 - " + x) ;
            emp.setJob("程序員 - " + x) ;
            emp.setHiredate(new java.util.Date()) ;
            emp.setSal(500 * x) ;
            DAOFactory.getIEmpDAOInstance().doCreate(emp) ;
        }
    }
}

可見具體的實現(xiàn)方法隱藏得比較好,通過工廠類調(diào)用get方法獲取代理類,代理類調(diào)用特定方法,然后由代理類內(nèi)的具體操作對象去調(diào)用具體的操作方法。

其實這些東西看起來會覺得很簡單,但是自己設計的時候往往會忘記。主要是因為用得不多吧,一開始總是要強迫自己想起來去做,然后慢慢地才能變成一種習慣。

相關文章

  • Java多線程Condition接口原理介紹

    Java多線程Condition接口原理介紹

    這篇文章主要介紹了Java多線程Condition接口原理介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring中@Scheduled和HttpClient的連環(huán)坑

    Spring中@Scheduled和HttpClient的連環(huán)坑

    這篇文章主要給大家介紹了關于Spring中@Scheduled和HttpClient的連環(huán)坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • SpringBoot整合MongoDB的實現(xiàn)代碼

    SpringBoot整合MongoDB的實現(xiàn)代碼

    自己本科時候一直使用的是Mysql,目前的課題組使用的是MongoDB,因此就花了一部分時間整理了一下,實現(xiàn)springboot與MongoDB的整合,并且實現(xiàn)基本的增刪改查操作,從頭到尾給出一個完整的案例。
    2021-05-05
  • java實現(xiàn)獲取用戶的MAC地址

    java實現(xiàn)獲取用戶的MAC地址

    本文給大家匯總介紹了下使用java實現(xiàn)獲取客戶端用戶的MAC地址的方法,當然最后一種更全面一些,有需要的小伙伴們可以根據(jù)需求自由選擇。
    2015-10-10
  • 使用Java通過OAuth協(xié)議驗證發(fā)送微博的教程

    使用Java通過OAuth協(xié)議驗證發(fā)送微博的教程

    這篇文章主要介紹了使用Java通過OAuth協(xié)議驗證發(fā)送微博的教程,使用到了新浪微博為Java開放的API weibo4j,需要的朋友可以參考下
    2016-02-02
  • Springboot自動加載配置的原理解析

    Springboot自動加載配置的原理解析

    Springboot遵循“約定優(yōu)于配置”的原則,使用注解對一些常規(guī)的配置項做默認配置,減少或不使用xml配置,讓你的項目快速運行起來,這篇文章主要給大家介紹了關于Springboot自動加載配置原理的相關資料,需要的朋友可以參考下
    2021-10-10
  • Java獲取UTC時間的方法詳解

    Java獲取UTC時間的方法詳解

    這篇文章主要介紹了Java獲取UTC時間的方法,結(jié)合具體實例形式詳細分析了Java針對時區(qū)、本地時間、時間偏移量等相關操作技巧,需要的朋友可以參考下
    2017-04-04
  • java中實現(xiàn)map與對象相互轉(zhuǎn)換的幾種實現(xiàn)

    java中實現(xiàn)map與對象相互轉(zhuǎn)換的幾種實現(xiàn)

    這篇文章主要介紹了java中實現(xiàn)map與對象相互轉(zhuǎn)換的幾種實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • java中Scanner輸入用法實例

    java中Scanner輸入用法實例

    Java的Scanner用法,主要用于算法筆試時的控制臺輸入,下面這篇文章主要給大家介紹了關于java中Scanner輸入用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Spring boot實現(xiàn)一個簡單的ioc(1)

    Spring boot實現(xiàn)一個簡單的ioc(1)

    這篇文章主要為大家詳細介紹了Spring boot實現(xiàn)一個簡單的ioc,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論