BaseDao封裝增刪改查的代碼詳解
一、什么是BaseDao?
BaseDao是一種通用的數(shù)據(jù)訪問對象,用于提供對數(shù)據(jù)庫的基本操作,例如插入、更新、刪除和查詢數(shù)據(jù)等。它通常封裝了對數(shù)據(jù)庫的底層操作,使得其他DAO對象可以繼承BaseDao以獲得對數(shù)據(jù)庫的訪問能力,同時(shí)減少了重復(fù)的代碼編寫。BaseDao可以提供基本的CRUD(創(chuàng)建、讀取、更新、刪除)功能,同時(shí)也可以實(shí)現(xiàn)一些通用的查詢方法,例如按條件查詢、分頁查詢等。通過使用BaseDao,開發(fā)人員可以更加方便地操作數(shù)據(jù)庫,提高開發(fā)效率。
BaseDao的優(yōu)點(diǎn):
1、代碼復(fù)用
BaseDao提供了通用的數(shù)據(jù)庫操作方法,可以將一些重復(fù)的數(shù)據(jù)庫操作封裝起來,從而減少代碼冗余。
2、統(tǒng)一管理
通過BaseDao可以將數(shù)據(jù)庫操作集中管理,可以統(tǒng)一維護(hù)和修改數(shù)據(jù)庫操作邏輯,提高代碼的可維護(hù)性。
3、提高開發(fā)效率
使用BaseDao可以快速完成數(shù)據(jù)庫操作,減少開發(fā)人員編寫重復(fù)代碼的時(shí)間,提高開發(fā)效率。
4、提供擴(kuò)展性
BaseDao可以根據(jù)具體業(yè)務(wù)需求進(jìn)行擴(kuò)展,例如添加新的查詢方法或者自定義的數(shù)據(jù)庫操作邏輯。
5、降低耦合性
通過BaseDao可以將數(shù)據(jù)庫操作與業(yè)務(wù)邏輯分離,降低模塊之間的耦合性,提高系統(tǒng)的可維護(hù)性和可測試性。
綜上所述,BaseDao的使用可以簡化數(shù)據(jù)庫操作,提高開發(fā)效率和代碼質(zhì)量。
二、BaseDao具體是做什么操作的?
BaseDao主要負(fù)責(zé)從數(shù)據(jù)庫獲取數(shù)據(jù),對數(shù)據(jù)庫中表的增刪改查等數(shù)據(jù)進(jìn)行操作。
具體來說,BaseDao可以完成以下操作:
1, 新增數(shù)據(jù):將數(shù)據(jù)新增到數(shù)據(jù)庫中,包括單條數(shù)據(jù)和批量數(shù)據(jù)新增。
2,修改數(shù)據(jù):修改數(shù)據(jù)庫中已有的數(shù)據(jù),可以根據(jù)指定的條件來修改更新數(shù)據(jù)。
3,刪除數(shù)據(jù):刪除數(shù)據(jù)庫中的數(shù)據(jù),可以根據(jù)指定的條件來刪除數(shù)據(jù)。
4,查詢數(shù)據(jù):從數(shù)據(jù)庫中獲取數(shù)據(jù),可以根據(jù)指定的條件進(jìn)行查詢,也可以進(jìn)行分頁查詢。
除了上述基本操作,BaseDao還可以提供一些通用的查詢方法,例如按條件查詢、排序查詢、聚合查詢等,以滿足各種不同的業(yè)務(wù)需求。通過繼承BaseDao,開發(fā)人員可以復(fù)用這些基本操作,減少重復(fù)的代碼編寫,提高開發(fā)效率。
三、BaseDao封裝增刪改查(代碼詳解)
1)基礎(chǔ)的JDBC操作類
- 更新操作 (添加、修改、刪除)
- 1. 添加(添加單條數(shù)據(jù)和批量數(shù)據(jù))
- 2. 修改(修改數(shù)據(jù)庫中已有的數(shù)據(jù),可以根據(jù)指定的條件來修改更新數(shù)據(jù))
- 3. 刪除(刪除數(shù)據(jù)庫中的數(shù)據(jù),可以根據(jù)指定的條件來刪除數(shù)據(jù))
- 查詢操作
- 1. 查詢一個(gè)字段 (只會返回一條記錄且只有一個(gè)字段;常用場景:查詢總數(shù)量)
- 2. 查詢集合
2)BaseDao封裝增刪改查
1、連接:將數(shù)據(jù)庫與Java進(jìn)行連接
/** * 數(shù)據(jù)庫連接 */ public class BaseDao { private String driver = "com.mysql.jdbc.Driver";// 數(shù)據(jù)庫驅(qū)動字符串 private String url = "jdbc:mysql://localhost:3306/epet";// 連接URL字符串 private String user = "root"; // 數(shù)據(jù)庫用戶名 private String password = "root"; // 用戶密碼 Connection conn = null; // 數(shù)據(jù)連接對象 /** * 獲取數(shù)據(jù)庫連接對象 */ public Connection getConnection() { if(conn==null) { // 獲取連接并捕獲異常 try { Class.forName(driver); conn = DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace();// 異常處理 } } return conn;/ 返回連接對象 }
2、查詢:查詢一個(gè)字段(返回一條記錄且只有一個(gè)字段,常用場景:查詢走數(shù)量)
/** * 查看的操作 * @param sql 預(yù)編譯的 SQL 語句 * @param objs 參數(shù)的字符串?dāng)?shù)組 * @return 返回查看數(shù)據(jù)行數(shù) *查詢一個(gè)字段 (只會返回一條記錄且只有一個(gè)字段;常用場景:查詢總數(shù)量) * 1、得到數(shù)據(jù)庫連接 * 2、定義sql語句 * 3、預(yù)編譯 * 4、如果有參數(shù),則設(shè)置參數(shù),下標(biāo)從1開始 (數(shù)組或集合、循環(huán)設(shè)置參數(shù)) * 5、執(zhí)行查詢,返回結(jié)果集 * 6、判斷并分析結(jié)果集 * 7、關(guān)閉資源 */ public ResultSet getCheckAll(String sql,Object [] objs){ ResultSet rs=null; PreparedStatement pstmt = null; try { //得到數(shù)據(jù)庫連接 getConnection(); //定義sql語句 pstmt=conn.prepareStatement(sql); //預(yù)編譯 if(objs!=null){ //如果有參數(shù),則設(shè)置參數(shù),下標(biāo)從1開始 (數(shù)組或集合、循環(huán)設(shè)置參數(shù)) for (int i = 0; i <objs.length; i++) { pstmt.setObject(i+1, objs[i]); } } //執(zhí)行查詢,返回結(jié)果集 rs=pstmt.executeQuery(); } catch (SQLException e) { //拋出異常 e.printStackTrace(); } finally{ //關(guān)閉資源 closeAll(conn,pstmt,rs); } return rs; }
3、增刪改:增、刪、改一個(gè)字段(返回一條記錄是否更新成功!)
/** * 增、刪、改的操作 * @param preparedSql 預(yù)編譯的 SQL 語句 * @param param 參數(shù)的字符串?dāng)?shù)組 * @return 影響的行數(shù) * 增、刪、改一個(gè)字段(返回一條記錄是否更新成功?。? * 1、得到數(shù)據(jù)庫連接 * 2、定義sql語句 * 3、預(yù)編譯 * 4、如果有參數(shù),則設(shè)置參數(shù),下標(biāo)從1開始 (數(shù)組或集合、循環(huán)設(shè)置參數(shù)) * 5、執(zhí)行增、刪、改,返回結(jié)果 * 6、判斷并分析結(jié)果 * 7、關(guān)閉資源 */ public int exceuteUpdate (String preparedSql, Object[] param) { PreparedStatement pstmt = null; int num = 0; //得到數(shù)據(jù)庫連接 conn = getConnection(); try { //定義sql語句 pstmt = conn.prepareStatement(preparedSql); if (param != null) { for (int i = 0; i < param.length; i++) { //為預(yù)編譯sql設(shè)置參數(shù) pstmt.setObject(i + 1, param[i]); } } //執(zhí)行增、刪、改,返回結(jié)果 num = pstmt.executeUpdate(); } catch (SQLException e) { //拋出sql類型異常 e.printStackTrace(); } finally{ //關(guān)閉資源 closeAll(conn,pstmt,null); } return num; }
4、關(guān)閉:判斷結(jié)果集對象是否為空,是則關(guān)閉
/** * 關(guān)閉數(shù)據(jù)庫連接 * @param conn 數(shù)據(jù)庫連接 * @param stmt Statement對象 * @param rs 結(jié)果集 */ public void closeAll(Connection conn, Statement stmt, ResultSet rs) { // 若結(jié)果集對象不為空,則關(guān)閉 if (rs != null) { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } // 若Statement對象不為空,則關(guān)閉 if (stmt != null) { try { stmt.close(); } catch (Exception e) { e.printStackTrace(); } } // 若數(shù)據(jù)庫連接對象不為空,則關(guān)閉 if (conn != null) { try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } }
3)演示BaseDao增刪改查使用方法
以下代碼是進(jìn)行測試BaseDao增刪改查以及演示BaseDao增刪改查使用方法
package cn.gd.dao; /** * 測試BaseDao增刪改查 * 演示BaseDao增刪改查使用方法 * */ public class testDao { public static void main(String[] args) { /*導(dǎo)入BaseDao方法*/ BaseDao dao = new BaseDao(); /*1、測試新增功能*/ //1.1、傳入sql語句 1.2、傳入Object類型對象 String sqlAdd = "insert into booksTab(id,name,author,price)VALUES(?,?,?,?)"; Object[] objsAdd = {1001, "java入門到入獄", "唐某某",158}; //返回結(jié)果 dao.exceuteUpdate(sqlAdd, objsAdd); /*2、測試刪除功能*/ //2.1、傳入sql語句 2.2、傳入Object類型對象 String sqlDel = "delete booksTab where id = ?"; Object[] objsDel = {1001}; //返回結(jié)果 dao.exceuteUpdate(sqlDel, objsDel); /*3、測試修改功能*/ //3.1、傳入sql語句 3.2、傳入Object類型對象 String sqlUpdate = "update booksTab set name= ?,author = ?,price =? where id = ?"; Object[] objsUpdate = {"java入門到入獄","唐某某",158,1001}; //返回結(jié)果 dao.exceuteUpdate(sqlUpdate, objsUpdate); /*4、測試查看功能*/ //4.1、傳入sql語句 4.2、傳入Object類型對象 String sqlCheck = "select * from booksTab;"; Object[] objsCheck = {}; //返回結(jié)果集 dao.getCheckAll(sqlCheck, objsCheck); } }
到此這篇關(guān)于BaseDao封裝增刪改查的代碼詳解的文章就介紹到這了,更多相關(guān)BaseDao封裝增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中使用BigDecimal進(jìn)行精確運(yùn)算
這篇文章主要介紹了Java中使用BigDecimal進(jìn)行精確運(yùn)算的方法,非常不錯(cuò),需要的朋友參考下2017-02-02vscode快速引入第三方j(luò)ar包發(fā)QQ郵件
這篇文章主要介紹了vscode快速引入第三方j(luò)ar包發(fā)QQ郵件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Spring中的ThreadPoolTaskExecutor線程池使用詳解
這篇文章主要介紹了Spring中的ThreadPoolTaskExecutor線程池使用詳解,ThreadPoolTaskExecutor 是 Spring框架提供的一個(gè)線程池實(shí)現(xiàn),用于管理和執(zhí)行多線程任務(wù),它是TaskExecutor接口的實(shí)現(xiàn),提供了在 Spring 應(yīng)用程序中創(chuàng)建和配置線程池的便捷方式,需要的朋友可以參考下2024-01-01springcloud 熔斷監(jiān)控Hystrix Dashboard和Turbine
這篇文章主要介紹了springcloud 熔斷監(jiān)控Hystrix Dashboard和Turbine,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08