Java通過JDBC 進行Dao層的封裝


前言

前面有一章節,我專門講解了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 + "]"; } }


免責聲明!

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



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