BaseDao封裝增刪改查的代碼詳解
一、什么是BaseDao?
BaseDao是一種通用的數(shù)據(jù)訪問對(duì)象,用于提供對(duì)數(shù)據(jù)庫(kù)的基本操作,例如插入、更新、刪除和查詢數(shù)據(jù)等。它通常封裝了對(duì)數(shù)據(jù)庫(kù)的底層操作,使得其他DAO對(duì)象可以繼承BaseDao以獲得對(duì)數(shù)據(jù)庫(kù)的訪問能力,同時(shí)減少了重復(fù)的代碼編寫。BaseDao可以提供基本的CRUD(創(chuàng)建、讀取、更新、刪除)功能,同時(shí)也可以實(shí)現(xiàn)一些通用的查詢方法,例如按條件查詢、分頁(yè)查詢等。通過使用BaseDao,開發(fā)人員可以更加方便地操作數(shù)據(jù)庫(kù),提高開發(fā)效率。
BaseDao的優(yōu)點(diǎn):
1、代碼復(fù)用
BaseDao提供了通用的數(shù)據(jù)庫(kù)操作方法,可以將一些重復(fù)的數(shù)據(jù)庫(kù)操作封裝起來,從而減少代碼冗余。
2、統(tǒng)一管理
通過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、降低耦合性
通過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)行操作。
具體來說,BaseDao可以完成以下操作:
1, 新增數(shù)據(jù):將數(shù)據(jù)新增到數(shù)據(jù)庫(kù)中,包括單條數(shù)據(jù)和批量數(shù)據(jù)新增。
2,修改數(shù)據(jù):修改數(shù)據(jù)庫(kù)中已有的數(shù)據(jù),可以根據(jù)指定的條件來修改更新數(shù)據(jù)。
3,刪除數(shù)據(jù):刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù),可以根據(jù)指定的條件來刪除數(shù)據(jù)。
4,查詢數(shù)據(jù):從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),可以根據(jù)指定的條件進(jìn)行查詢,也可以進(jìn)行分頁(yè)查詢。
除了上述基本操作,BaseDao還可以提供一些通用的查詢方法,例如按條件查詢、排序查詢、聚合查詢等,以滿足各種不同的業(yè)務(wù)需求。通過繼承BaseDao,開發(fā)人員可以復(fù)用這些基本操作,減少重復(fù)的代碼編寫,提高開發(fā)效率。
三、BaseDao封裝增刪改查(代碼詳解)
1)基礎(chǔ)的JDBC操作類
- 更新操作 (添加、修改、刪除)
- 1. 添加(添加單條數(shù)據(jù)和批量數(shù)據(jù))
- 2. 修改(修改數(shù)據(jù)庫(kù)中已有的數(shù)據(jù),可以根據(jù)指定的條件來修改更新數(shù)據(jù))
- 3. 刪除(刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù),可以根據(jù)指定的條件來刪除數(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è)字段(返回一條記錄是否更新成功!)
/**
* 增、刪、改的操作
* @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)文章
Nacos配置管理實(shí)踐(手把手教你搭建Nacos集群)
本文詳解Nacos配置管理在微服務(wù)中的實(shí)現(xiàn),包括通過bootstrap.yml讀取Nacos配置、配置優(yōu)先級(jí)規(guī)則(本地>服務(wù)名>環(huán)境)、熱更新機(jī)制及集群搭建步驟(數(shù)據(jù)庫(kù)初始化、Nginx反向代理),強(qiáng)調(diào)多環(huán)境隔離與容災(zāi)部署優(yōu)化2025-08-08
WebSocket實(shí)現(xiàn)數(shù)據(jù)庫(kù)更新時(shí)前端頁(yè)面刷新
這篇文章主要為大家詳細(xì)介紹了WebSocket實(shí)現(xiàn)數(shù)據(jù)庫(kù)更新時(shí)前端頁(yè)面刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
Java中EnumMap和EnumSet枚舉操作類的簡(jiǎn)單使用詳解
這篇文章主要介紹了Java中EnumMap和EnumSet枚舉操作類的簡(jiǎn)單使用詳解,EnumMap是Map接口的一種實(shí)現(xiàn),專門用于枚舉類型的鍵,所有枚舉的鍵必須來自同一個(gè)枚舉?EnumMap不允許鍵為空,允許值為空,需要的朋友可以參考下2023-11-11
Spring?中?PageHelper?不生效問題及解決方法
這篇文章主要介紹了Spring?中?PageHelper?不生效問題,使用這個(gè)插件時(shí)要注意版本的問題,不同的版本可能 PageHelper 不會(huì)生效,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Lombok的詳細(xì)使用及優(yōu)缺點(diǎn)總結(jié)
最近在學(xué)Mybatis,接觸到了Lombok的使用,所以寫一篇文章記錄一下,包括lombok的安裝及使用優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧2021-07-07
java求100以內(nèi)的素?cái)?shù)示例分享
素?cái)?shù)是指因數(shù)只有1和本身的數(shù)字,這篇文章主要介紹了java求100以內(nèi)的素?cái)?shù)示例,需要的朋友可以參考下2014-03-03
Spring Security基本架構(gòu)與初始化操作流程詳解
這篇文章主要介紹了Spring Security基本架構(gòu)與初始化操作流程,Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架2023-03-03

