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