Java通過JDBC 進行Dao層的封裝

來源:互聯網
上載者:User

標籤:擷取   lis   size   bean   array   方法   詳細介紹   通過   介紹   

前言

前面有一章節,我專門講解了Java通過JDBC 進行MySQL資料庫操作,這主要講解了MySQL資料庫的串連和簡單的操作,但是在真正的Java項目中,我們要不斷的和資料庫打交道,為了提高資料庫操作的執行效率和增加代碼的複用性,將重新封裝一個Dao層,也就是資料訪問層 ,用來訪問資料庫實現資料的持久化。

Dao層設計Dao層操作通用的步驟:
  • 1.寫SQL語句
  • 2.擷取串連
  • 3.建立stmt
  • 4.執行sql

a)更新 
String sql = “delete from admin where id=?””; 
String sql = “insert into admin (userName,pwd) values (?,?)” 
public void update(String sql, Object[] paramValues);

b)查詢 
String sql = “select * from admin”; 
String sql = “select * from admin where id=? And pwd =?”; 
// 傳入的什麼類型的對象,就封裝為什麼類型 
// 要求: 列的名稱,要與指定類型的對象的屬性名稱一樣 
Public List query (String sql , Object[] paramValues , Class clazz); 
T t; // 對象賦值

  • 5.關閉/異常
編寫BaseDao,自己寫的所有的Dao都繼承此類

其中JDBCUtil類在上篇博文Java通過JDBC 進行MySQL資料庫操作中有詳細介紹,這裡就比說了。

/** * 通用的dao,自己寫的所有的dao都繼承此類; * 此類定義了2個通用的方法: *  1. 更新 *  2. 查詢 * @author Charlie.chen * */public class BaseDao {    // 初始化參數    private Connection con;    private PreparedStatement pstmt;    private ResultSet rs;    /**     * 查詢的通用方法     * @param sql     * @param paramsValue     */    public <T> List<T> query(String sql, Object[] paramsValue,Class<T> clazz){        try {            // 返回的集合            List<T> list = new ArrayList<T>();            // 對象            T t = null;            // 1. 擷取串連            con = JdbcUtil.getConnection();            // 2. 建立stmt對象            pstmt = con.prepareStatement(sql);            // 3. 擷取預留位置參數的個數, 並設定每個參數的值            int count = pstmt.getParameterMetaData().getParameterCount();            if (paramsValue != null && paramsValue.length > 0) {                for (int i=0; i<paramsValue.length; i++) {                    pstmt.setObject(i+1, paramsValue[i]);                }            }            // 4. 執行查詢            rs = pstmt.executeQuery();            // 5. 擷取結果集中繼資料            ResultSetMetaData rsmd = rs.getMetaData();            // ---> 擷取列的個數            int columnCount = rsmd.getColumnCount();            // 6. 遍曆rs            while (rs.next()) {                // 要封裝的對象                t = clazz.newInstance();                // 7. 遍曆每一行的每一列, 封裝資料                for (int i=0; i<columnCount; i++) {                    // 擷取每一列的列名稱                    String columnName = rsmd.getColumnName(i + 1);                                        // 擷取每一列的列名稱, 對應的值                    Object value = rs.getObject(columnName);                    // 封裝: 設定到t對象的屬性中  【BeanUtils組件】                    BeanUtils.copyProperty(t, columnName, value);                               }                // 把封裝完畢的對象,添加到list集合中                list.add(t);            }            return list;        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            JdbcUtil.closeAll(con, pstmt, rs);        }    }    /**     * 更新的通用方法     * @param sql   更新的sql語句(update/insert/delete)     * @param paramsValue  sql語句中預留位置對應的值(如果沒有預留位置,傳入null)     */    public void update(String sql,Object[] paramsValue){        try {            // 擷取串連            con = JdbcUtil.getConnection();            // 建立執行命令的stmt對象            pstmt = con.prepareStatement(sql);            // 參數中繼資料: 得到預留位置參數的個數            int count = pstmt.getParameterMetaData().getParameterCount();            // 設定預留位置參數的值            if (paramsValue != null && paramsValue.length > 0) {                // 迴圈給參數賦值                for(int i=0;i<count;i++) {                    pstmt.setObject(i+1, paramsValue[i]);                }            }            // 執行更新            pstmt.executeUpdate();        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            JdbcUtil.closeAll(con, pstmt, null);        }}

 

編寫實際操作的Dao類繼承自BaseDao
public class AdminDao extends BaseDao {    // 刪除    public void delete(int id) {        String sql = "delete from admin where id=?";        Object[] paramsValue = {id};        super.update(sql, paramsValue);    }    // 插入    public void insert(Admin admin) {        String sql = "insert into admin (userName,pwd) values (?,?)";        Object[] paramsValue = {admin.getUserName(),admin.getPwd()};        super.update(sql, paramsValue);    }    // 查詢全部    public List<Admin> getAll(){        String sql = "select * from admin";        List<Admin> list = super.query(sql, null, Admin.class);        return list;    }    // 根據條件查詢(主鍵)    public Admin findById(int id){        String sql = "select * from admin where id=?";        List<Admin> list = super.query(sql, new Object[]{id}, Admin.class);        return  (list!=null&&list.size()>0) ? list.get(0) : null;    }}

 

JavaBean類
/** * 1. bean類設計 * @author Charlie.chen * */public class Admin {    private int id;    private String userName;    private String pwd;    private int age;    private Date birth;    public Date getBirth() {        return birth;    }    public void setBirth(Date birth) {        this.birth = birth;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    @Override    public String toString() {        return "Admin [age=" + age + ", birth=" + birth + ", id=" + id                + ", pwd=" + pwd + ", userName=" + userName + "]";    }   }

Java通過JDBC 進行Dao層的封裝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.