BaseDao封装增删改查(超详解!)

news/2024/4/27 15:25:43/文章来源:https://blog.csdn.net/Jin_Xiang123/article/details/137083271

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍对数据库中表中的数据进行增改删查询,封装一个工具类(BaseDao)的详细使用以及部分理论知识


🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

一、什么是BaseDao?

BaseDao的优点:

1、代码复用

2、统一管理

3、提高开发效率

4、提供扩展性

5、降低耦合性

二、BaseDao具体是做什么操作的?

三、BaseDao封装增删改查(代码详解)

1)基础的JDBC操作类

2)BaseDao封装增删改查

3)演示BaseDao增删改查使用方


一、什么是BaseDao?

BaseDao是一种通用的数据访问对象,用于提供对数据库的基本操作,例如插入、更新、删除和查询数据等。它通常封装了对数据库的底层操作,使得其他DAO对象可以继承BaseDao以获得对数据库的访问能力,同时减少了重复的代码编写。BaseDao可以提供基本的CRUD(创建、读取、更新、删除)功能,同时也可以实现一些通用的查询方法,例如按条件查询、分页查询等。通过使用BaseDao,开发人员可以更加方便地操作数据库,提高开发效率。

BaseDao的优点:

1、代码复用

BaseDao提供了通用的数据库操作方法,可以将一些重复的数据库操作封装起来,从而减少代码冗余。

2、统一管理

通过BaseDao可以将数据库操作集中管理,可以统一维护和修改数据库操作逻辑,提高代码的可维护性。

3、提高开发效率

使用BaseDao可以快速完成数据库操作,减少开发人员编写重复代码的时间,提高开发效率。

4、提供扩展性

BaseDao可以根据具体业务需求进行扩展,例如添加新的查询方法或者自定义的数据库操作逻辑。

5、降低耦合性

通过BaseDao可以将数据库操作与业务逻辑分离,降低模块之间的耦合性,提高系统的可维护性和可测试性。

综上所述,BaseDao的使用可以简化数据库操作,提高开发效率和代码质量。

二、BaseDao具体是做什么操作的?

BaseDao主要负责从数据库获取数据,对数据库中表的增删改查等数据进行操作。

具体来说,BaseDao可以完成以下操作:

1, 新增数据:将数据新增到数据库中,包括单条数据和批量数据新增。

2,修改数据:修改数据库中已有的数据,可以根据指定的条件来修改更新数据。

3,删除数据:删除数据库中的数据,可以根据指定的条件来删除数据。

4,查询数据:从数据库中获取数据,可以根据指定的条件进行查询,也可以进行分页查询。

除了上述基本操作,BaseDao还可以提供一些通用的查询方法,例如按条件查询、排序查询、聚合查询等,以满足各种不同的业务需求。通过继承BaseDao,开发人员可以复用这些基本操作,减少重复的代码编写,提高开发效率。

三、BaseDao封装增删改查(代码详解)

1)基础的JDBC操作类

  • 更新操作 (添加、修改、删除)
    • 1. 添加(添加单条数据和批量数据)
    • 2. 修改(修改数据库中已有的数据,可以根据指定的条件来修改更新数据)
    • 3. 删除(删除数据库中的数据,可以根据指定的条件来删除数据)
  • 查询操作
    • 1. 查询一个字段 (只会返回一条记录且只有一个字段;常用场景:查询总数量)
    • 2. 查询集合

2)BaseDao封装增删改查

1、连接:将数据库与Java进行连接

/*** 数据库连接*/
public class BaseDao {private String driver = "com.mysql.jdbc.Driver";// 数据库驱动字符串private String url = "jdbc:mysql://localhost:3306/epet";// 连接URL字符串private String user = "root"; // 数据库用户名private String password = "root"; // 用户密码Connection conn = null;				// 数据连接对象/*** 获取数据库连接对象*/public Connection getConnection() {if(conn==null) {// 获取连接并捕获异常try {Class.forName(driver);conn = DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();// 异常处理}}return conn;/ 返回连接对象}

2.1、查询:查询一个字段(返回一条记录且只有一个字段,常用场景:查询走数量)

/*** 查看的操作* @param sql 预编译的 SQL 语句* @param objs 参数的字符串数组* @return 返回查看数据行数*查询一个字段 (只会返回一条记录且只有一个字段;常用场景:查询总数量)* 1、得到数据库连接* 2、定义sql语句* 3、预编译* 4、如果有参数,则设置参数,下标从1开始 (数组或集合、循环设置参数)* 5、执行查询,返回结果集* 6、判断并分析结果集* 7、关闭资源*/public ResultSet getCheckAll(String sql,Object [] objs){ResultSet rs=null;PreparedStatement pstmt = null;try {//得到数据库连接getConnection();//定义sql语句pstmt=conn.prepareStatement(sql);//预编译if(objs!=null){//如果有参数,则设置参数,下标从1开始 (数组或集合、循环设置参数)for (int i = 0; i <objs.length; i++) {pstmt.setObject(i+1, objs[i]);}}//执行查询,返回结果集rs=pstmt.executeQuery();} catch (SQLException e) {//抛出异常e.printStackTrace();} finally{//关闭资源closeAll(conn,pstmt,rs);}return rs;}

3、增删改:增、删、改一个字段(返回一条记录是否更新成功!)

/*** 增、删、改的操作* @param preparedSql 预编译的 SQL 语句* @param param 参数的字符串数组* @return 影响的行数* 增、删、改一个字段(返回一条记录是否更新成功!)* 1、得到数据库连接* 2、定义sql语句* 3、预编译* 4、如果有参数,则设置参数,下标从1开始 (数组或集合、循环设置参数)* 5、执行增、删、改,返回结果* 6、判断并分析结果* 7、关闭资源*/public int exceuteUpdate (String preparedSql, Object[] param) {PreparedStatement pstmt = null;int num = 0;//得到数据库连接conn =  getConnection();try {//定义sql语句pstmt = conn.prepareStatement(preparedSql);if (param != null) {for (int i = 0; i < param.length; i++) {//为预编译sql设置参数pstmt.setObject(i + 1, param[i]);}}//执行增、删、改,返回结果num = pstmt.executeUpdate();} catch (SQLException e) {//抛出sql类型异常e.printStackTrace();} finally{//关闭资源closeAll(conn,pstmt,null);}return num;}

4、关闭:判断结果集对象是否为空,是则关闭

/*** 关闭数据库连接* @param conn 数据库连接* @param stmt Statement对象* @param rs 结果集*/public void closeAll(Connection conn, Statement stmt, ResultSet rs) {// 若结果集对象不为空,则关闭if (rs != null) {try {rs.close();} catch (Exception e) {e.printStackTrace();}}// 若Statement对象不为空,则关闭if (stmt != null) {try {stmt.close();} catch (Exception e) {e.printStackTrace();}}// 若数据库连接对象不为空,则关闭if (conn != null) {try {conn.close();} catch (Exception e) {e.printStackTrace();}}}

3)演示BaseDao增删改查使用方法

以下代码是进行测试BaseDao增删改查以及演示BaseDao增删改查使用方法

package cn.gd.dao;
/*** 测试BaseDao增删改查* 演示BaseDao增删改查使用方法* */
public class testDao {public static void main(String[] args) {/*导入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};//返回结果dao.exceuteUpdate(sqlAdd, objsAdd);/*2、测试删除功能*///2.1、传入sql语句 2.2、传入Object类型对象String sqlDel = "delete booksTab where id = ?";Object[] objsDel = {1001};//返回结果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};//返回结果dao.exceuteUpdate(sqlUpdate, objsUpdate);/*4、测试查看功能*///4.1、传入sql语句 4.2、传入Object类型对象String sqlCheck = "select * from booksTab;";Object[] objsCheck = {};//返回结果集dao.getCheckAll(sqlCheck, objsCheck);}
}

 总结不易,希望宝宝们不要吝啬亲爱的👍哟(^U^)ノ~YO! 如有问题,欢迎评论区批评指正😁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1026602.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python数据实时传给unity工程并绘制出来

python # 服务器端代码 import socket import random import struct import time# 创建一个服务器Socket server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 监听的地址和端口 host 127.0.0.1 port 12345# 绑定地址和端口 server_socket.bind((host, port…

C语言中常用的文件操作

本文将介绍常用的关于文件操作函数&#xff0c;如fopen,fclose,fread,fwrite,feek,ftell,rewind以及feof和ferror等文件操作操作函数&#xff0c;还介绍一些用于所有输入输出流的函数如fgetc,fputc,fgets,fputs,fprintf,fscanf等函数&#xff0c;还介绍了sscanf,sprintf函数,fe…

主流电商平台淘宝/1688/京东电商数据实时采集监测|电商API接口接入

电商大数据平台基于网络主流电商平台淘宝/1688/京东电商数据进行搭建&#xff0c;全面监测了包含淘宝、京东、苏宁、美团、大众点评等共计100余个主流电商交易平台&#xff0c;并凭借多年的电子商务数据分析挖掘经验积累形成的电商数据清洗体系和挖掘模型&#xff0c;能高效完成…

DashVector - 阿里云向量检索服务

DashVector 文章目录 DashVector一、关于 DashVector二、使用 DashVector 前提准备1、创建Cluster&#xff1a;2、获得API-KEY3、安装最新版SDK 三、快速使用 DashVector1. 创建Client2. 创建Collection3、插入Doc4、相似性检索5、删除Doc6. 查看Collection统计信息7. 删除Coll…

Flask 与小程序 的图片数据交互 过程及探讨研究学习

今天不知道怎么的&#xff0c;之前拿编程浪子地作品抄过来粘上用好好的&#xff0c;昨天开始照片突的就不显示了。 今天不妨再耐味地细细探究一下微信小程序wxml 和flask服务器端是怎么jpg图片数据交互的。 mina/pages/food/index.wxml <!--index.wxml--> <!--1px …

Python程序设计 循环结构(二)

1.斐波那契数列 编写一个能计算斐波那契数列中第x个数的小程序。斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列、 因数学家莱昂纳多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为…

日本EPSON 爱普生HUD汽车抬头显示系统芯片

目前HUD产品在新车上的配装率逐年上升&#xff0c;预计在2025年将达到30%。那么在介绍爱普生HUD整合方案之前&#xff0c;让我们先了解一下什么叫HUD。 HUD&#xff08;Head Up Display&#xff09;中文叫抬头显示系统&#xff0c;又被叫做平行显示系统。早被应用在飞机辅助…

Linux系统——硬件命令

目录 一.网卡带宽 1.查看网卡速率——ethtool 网卡名 2.查看mac地址——ethtool -P 网卡名 二、内存相关 1.显示系统中内存使用情况——free -h 2.显示内存模块的详细信息——dmidecode -t memory 三、CPU相关 1.查看CPU架构信息——lscpu 2.性能模式 四、其他硬件命…

C语言例4-37:输出10~100的全部素数

素数是指除1和它本身之外不能被其他任何整数整除。 自己思考的基础代码如下&#xff1a; //输出10~100的全部素数 //素数是指除1和它本身之外不能被其他任何整数整除 //自己思考的基础代码 #include<stdio.h> int main(void) {int n10,i2,m,counter0; // n10~100;for(n…

如何用Flask中的Blueprints构建大型Web应用

本文分享自华为云社区《构建大型Web应用Flask中的Blueprints指南》&#xff0c;作者&#xff1a; 柠檬味拥抱。 什么是Blueprints&#xff1f; 什么是Blueprints&#xff1f; Blueprints是Flask中的一种模式&#xff0c;用于将应用程序分解为可重用的模块。每个蓝图实际上是…

IDEA | 资源文件中文乱码问题解决

问题 IDEA打开资源文件&#xff0c;显示乱码问题。 解决方案 1、电脑是mac&#xff0c;点击IDEA->【Preferences】->【Editor】->【File Encodings】 2、选择【Properties Files】中的UTF-8&#xff0c;并勾选Transparent native-to-ascii conversion。 3、最后点击…

蓝桥杯算法赛(二进制王国)

问题描述 二进制王国是一个非常特殊的国家&#xff0c;因为该国家的居民仅由 0 和 1 组成。 在这个国家中&#xff0c;每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示&#xff0c;例如 101、 000、 111 等。 现在&#xff0c;国王选了出 N 户家庭参加邻国的庆典…

Karmada 管理有状态应用 Xline 的早期探索与实践

背景与动机 目前随着云原生技术和云市场的不断成熟&#xff0c;越来越多的 IT 厂商开始投入到跨云多集群的怀抱当中。以下是 flexera 在 2023 年中关于云原生市场对多云多集群管理的接受程度的调查报告&#xff08;http://info.flexera.com&#xff09; 从 flexera 的报告中可…

python_1

要求&#xff1a; 代码&#xff1a; # 先将分钟数转化成年数&#xff0c;再将余数做为天数 minute float(input("请输入分钟数&#xff1a;")) year_1 (minute / 60 / 24) // 365 day_1 (minute / 60 / 24) % 365 now f"{minute}分钟{year_1}年{day_1}天&q…

Polkadot、Kusama 和六大领先平行链现已上线 Dune 数据分析平台!

3 月 19 日对于波卡社区来说是一个关键性的时刻&#xff0c;因为 Polkadot 数据首次在领先的区块链数据开源分析平台 Dune 上可以被访问和使用。这是 Colorful Notion 和 Dune 之间战略合作的结果&#xff0c;这次的合作与集成将使 Polkadot 生态系统的可见性大幅增强&#xff…

力扣面试150 阶乘后的零 数论 找规律 质因数

Problem: 172. 阶乘后的零 思路 &#x1f468;‍&#x1f3eb; 大佬神解 一个数末尾有多少个 0 &#xff0c;取决于这个数 有多少个因子 10而 10 可以分解出质因子 2 和 5而在阶乘种&#xff0c;2 的倍数会比 5 的倍数多&#xff0c;换而言之&#xff0c;每一个 5 都会找到一…

HTML 常用标签总结

本篇文章总结了一些我在学习html时所记录的标签&#xff0c;虽然总结并不是非常全面&#xff0c;但都是一些比较常用的。 html元素标签 首先一个html界面是由无数个元素标签组成的&#xff0c;每个元素具有它的属性 1.input 单行文本框 标签type属性——text <input ty…

机器学习周记(第三十一周:文献阅读-GGNN)2024.3.18~2024.3.24

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文模型 1.2.1 数据处理 1.2.2 门控图神经网络 1.2.3 掩码操作 2 相关知识 2.1 图神经网络&#xff08;GNN&#xff09; 2.2 图卷积神经网络&#xff08;GCN&#xff09; 3 相关代码 摘要 本周阅读了一篇利用图神…

IDEA2023版本整合SpringBoot热部署

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 开发环境篇 ✨特色专栏&#xff1a; M…

波奇学Linux:自定义协议和序列和反序列化

TCP是面向字节流的如何保证&#xff0c;读取上来的数据是一个"完整"的报文 tcp传输控制协议&#xff1a;什么时候发&#xff0c;发多少&#xff0c;出错怎么办 read和write都是从用户到内核空间的拷贝&#xff0c;数据不一定传输到另一个台主机的缓冲区&#xff0c;…