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

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.mzph.cn/news/782797.shtml

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

相关文章

动态规划——回文串问题

目录 练习1&#xff1a;回文子串 练习2&#xff1a;最长回文子串 练习3&#xff1a;回文串分割IV 练习4&#xff1a;分割回文串 练习5&#xff1a;最长回文子序列 练习6&#xff1a;让字符串成为回文串的最小插入次数 本篇文章主要学习使用动态规划来解决回文串相关问题&…

ES6 学习(一)-- 基础知识

文章目录 1. 初识 ES62. let 声明变量3. const 声明常量4. 解构赋值 1. 初识 ES6 ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准&#xff0c;已经在2015年6月正式发布了。它的目标&#xff0c;是使得」JavaScript语言可以用来编写复杂的大型应用程序&#xff0c;成为…

python 报错问题汇总

error: [WinError 32] 另一个程序正在使用此文件&#xff0c;进程无法访问。: d:\\anaconda\\envs\\yolov5\\lib\\site-packages\\ISR-2.2.0-py3.7.egg 解决方法&#xff1a;重启pycharm python-contrib 无法安装 opencv-contrib-python 安装包网址&#xff1a;安装包下载链接…

c++ vector介绍

1、什么是vector std::vector 是C标准库&#xff08;STL&#xff09;中的一个动态数组类模板。它允许存储相同类型的元素集合&#xff0c;并且可以根据需要动态地增加或减少其大小。std::vector 提供了一组函数来访问、插入和删除元素&#xff0c;以及执行其他与数组操作相关的…

新收获——蓝桥杯单片机第十四届国赛程序设计题

大家要是初学&#xff0c;可以去看西风那里的系统课程&#xff0c;非常全面&#xff0c;有利于形成你自己的代码风格。 笔者发文章只是分享性的&#xff0c;有需要者才拿去用其中的一个小片段。 代码在这&#xff1a; 一、这个是首写自主完成的&#xff0c;bug应该也是没有的…

预处理详解(一) -- 预定义符号与#define定义

目录 一. 预定义符号二. #define1.#define定义常量2.#define定义宏3.带有副作用的宏参数4.宏替换的规则5.宏和函数的对比 一. 预定义符号 %s _ _FILE_ _ //文件 %s _ _ DATE_ _ //日期 %s _ _ TIME_ _ //时间 %d _ _ LINE_ _ //行号 %d _ _ STDC_ _ //如果编译器支持 ANSI C,那…

Vmware下减小Ubuntu系统占用系统盘大小

1、虚拟机设置下占用空间 如图&#xff0c;给虚拟机分配了120GB&#xff0c;已经占用116.9GB&#xff0c;开机会提示空间不足。 2、实际使用空间 ubuntu系统下使用“df -h”命令查看实际使用空间大小50GB左右 造成这个原因是&#xff0c;虚拟机的bug&#xff1a;在虚拟机的ub…

算法学习——LeetCode力扣动态规划篇6

算法学习——LeetCode力扣动态规划篇6 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&…

ADC--数模转换器的使用

目录 前言 ADC接口使用 配置准备 确定引脚编号 光敏电阻--PF7​编辑 ADC3_IN5 开始配置 实验进阶 MQ_3--酒精传感器、水位传感器、火焰传感器 前言 ADC(analog-digital conversion)顾名思义模拟数字转换器,把外界的譬如温度、湿度、酒精含量、水位、特殊光波等等的现实…

突破编程_C++_网络编程(OSI 七层模型(网络层))

1 网络层的功能与作用 1.1 功能与作用详解 OSI 网络层是 OSI 参考模型中的第三层&#xff0c;位于数据链路层和应用层之间&#xff0c;其主要功能与作用涉及到网络中的数据通信和端到端的连接服务。其详细的功能与作用如下&#xff1a; 路由选择与分组交换&#xff1a;网络层…

通过PandasAI使用自然语言进行数据分析

通过PandasAI使用自然语言进行数据分析 介绍 ​ PandasAI是一个Python库&#xff0c;可以很容易地用自然语言向数据提问。它可以帮助您使用生成人工智能来探索、清理和分析数据。 使用PandasAI 这里使用Anaconda和Jupyter使用PandasAI 进入一个文件目录 创建一个 Notebook …

道可云元宇宙每日资讯|元宇宙标准化工作组成立大会召开

道可云元宇宙每日简报&#xff08;2024年3月28日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 元宇宙标准化工作组成立大会召开 3月21日&#xff0c;元宇宙标准化工作组成立大会暨第一次全体委员会议在浙江省丽水市青田县召开。元宇宙标准化工作组的建立&#…

阿里云服务器初始化简记

文章目录 推荐版本CPU、内存、硬盘视活动而定&#xff0c;一般活动价99元一年注意带宽云服务器具体设置建议系统推荐CentOS 7.9本地系统推荐MacOSiTerm2本地系统推荐Win11Linux子系统推荐开发环境NginxPythonMySQL 机器和系统基本状况测试网速设置Vim显示中文其他系统状态监控和…

Python | Leetcode Python题解之第2题两数相加

题目&#xff1a; 题解&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optiona…

仓库规划csp

满分代码&#xff08;直接暴力&#xff09; #include<iostream> using namespace std; const int M11; const int N1001; int n,m; int a[N][M]; bool isfather(int x,int y)//y是否是x的上级仓库 {for(int i1;i<m;i){if(a[x][i]>a[y][i])return false;}return …

LabVIEW无人机大气数据智能测试系统

LabVIEW无人机大气数据智能测试系统 随着无人机技术的迅速发展&#xff0c;大气数据计算机作为重要的机载设备&#xff0c;在确保飞行安全性方面发挥着重要作用。设计了一套基于LabVIEW的无人机大气数据智能测试系统&#xff0c;通过高效、稳定的性能测试&#xff0c;及时发现…

统计XML文件内标签的种类和其数量及将xml格式转换为yolov5所需的txt格式

1、统计XML文件内标签的种类和其数量 对于自己标注的数据集&#xff0c;需在标注完成后需要对标注好的XML文件校验&#xff0c;下面是代码&#xff0c;只需将SrcDir换成需要统计的xml的文件夹即可。 import os from tqdm import tqdm import xml.dom.minidomdef ReadXml(File…

图像缩放算法双立方插值法

双立方插值法&#xff08;Bicubic Interpolation&#xff09;是一种常用的图像缩放算法&#xff0c;它通过对原始图像中的像素进行加权平均来计算目标图像中的像素值。相比双线性插值&#xff0c;双立方插值能更好地保留图像的细节和平滑过渡效果。 具体实现步骤如下&#xff…

Vue路由导航守卫

一、什么是Vue路由导航守卫&#xff1f; Vue路由导航守卫是Vue Router提供的一种机制&#xff0c;它可以让你在路由跳转之前或之后执行一些自定义逻辑&#xff0c;例如&#xff1a;鉴权、重定向等。守卫分为全局守卫、路由独享守卫和组件内守卫。 二、全局守卫 全局守卫作用…

Jenkins执行策略(图文讲解)

Jenkins执行策略-图文讲解 一&#xff1a;手动执行1、手动执行流程2、手动执行操作 二、通过构建触发器——定时执行1、定时执行流程2、定时执行操作 三、当开发部署成功之后进行执行——在测试项配置——关注的项目1、执行流程2、操作流程 四、测试代码有更新的时候自动构建1、…