DAO設計模式的理解


為了降低耦合性,提出了DAO封裝數據庫操作的設計模式。

它可以實現業務邏輯與數據庫訪問相分離。相對來說,數據庫是比較穩定的,其中DAO組件依賴於數據庫系統,提供數據庫訪問的接口。

一般的DAO的封裝由以下另個原則:

  •   一個表對應一個表,相應地封裝一個DAO類。
  •   對於DAO接口,必須由具體的類型定義。這樣可以避免被錯誤地調用。

 在DAO模式中,將對數據的持久化抽取到DAO層,暴露出Service層讓程序員使用,這樣,一方面避免了業務代碼中混雜JDBC調用語句,使得業務落實實現更加清晰。

 通常我們創建一個包,用於保存DAO接口,再創建一個包,用於保存DAO接口的實現類即可。

 下面展示一個DAO接口實例Manage:

public interface Manage {
    /*插入(insert)操作--->方法名(插入的數據1,插入的數據2,……)-->返回T|F*/
    public boolean insert(String name,String classes,String score);
    /*獲取全表(select *)操作-->利用Bean,一行對應一個Bean-->返回一個承載Bean的Collection*/
    public Collection select();
    /*刪除(delete)操作-->方法名(where處需要的數據)--->返回T|F*/
    public boolean delete(String id);
    /*獲取指定行對象---->方法名(where處需要的數據)---->返回一個承載Bean的List*/
    public List up_select(String id);
    /*修改指定行對象---->方法名(修改數據1,修改數據2,……,where處需要的數據)---->返回T|F*/
    public boolean update(String name,String classes,String id);
}

 下面我們針對一張具體的表對Manage創建實現類,比如表名為test,數據庫名為bean。

 

public class ManageInfo implements Manage {
    final private String url="jdbc:mysql://localhost:3306/bean";
    final private String user="root";
    final private String password="root";
    @Override
    public boolean insert(String name, String classes, String score) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url, user, password);
        String sql="insert into test(name,classes,score) Values(?,?,?)";
        PreparedStatement st=conn.prepareStatement(sql);
        st.setString(1,name);
        st.setString(2,classes);
        st.setString(3,score);
        int count=st.executeUpdate();
        if(count<=1){
            return  true;
        }else {
            return false;
        }
    }

其余實現近乎相同,若返回Bean類型的Collection,則從ResultSet里讀取出每一行的數據。

將一行的數據,存入一個Java Bean中(為Bean 創建對應類型的成員變量),並將Set好的Bean存入Add入Collection。

再讀取下一行的數據,重復操作,最后返回Collection即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM