BaseDao之JDBC封装、增、删、改、查操作(超详细!)

2024-03-28 13:20

本文主要是介绍BaseDao之JDBC封装、增、删、改、查操作(超详细!),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • BaseDao介绍
      • BaseDao的核心特性
      • BaseDao基本操作特点
    • JDBC封装增,删,改,查

BaseDao介绍

BaseDao是一种在Java开发中常用的数据访问对象(Data Access Object)模式的实现,它主要用于简化数据库操作,提高开发效率和代码的可维护性。BaseDao通常与ORM(对象关系映射)框架如MyBatis结合使用,以提供一套标准的数据库操作方法,如增删改查等。

BaseDao的核心特性

  1. 标准数据库操作方法:BaseDao提供了一系列标准的数据库操作方法,如insertupdatedeleteselect等,这些方法通常与数据库表一一对应,使得开发者可以直接调用接口中的方法来操作数据库,而无需关心具体的SQL语句实现。
  2. 简化SQL编写:通过BaseDao,开发者无需手写mapper.xml文件或手动编写SQL语句,BaseDao会自动根据接口方法和实体类属性生成相应的SQL语句,极大地减少了手动编写SQL的工作量。
  3. 支持复杂查询:BaseDao支持复杂查询的构建,如分页查询、条件查询等,以满足业务逻辑的各种需求。它通常利用注解处理器或代码生成技术在编译时自动生成Query类,这些Query类提供流式调用的方式,帮助开发者更直观方便地构建查询条件。
  4. 逻辑删除功能:BaseDao支持逻辑删除,即在删除操作时,不是物理删除记录,而是更新一个删除标记字段,这样被删除的记录仍然存在于数据库中,但不会被查询出来。
  5. 分库分表支持:BaseDao内置了分库分表功能,支持指定键分键和自定义分库分表算法,框架自动根据算法选择库表。同时也兼容第三方分库分表组件。
  6. 代码生成:BaseDao提供工具通过数据库表结构自动生成Entity类,提高开发效率。
  7. 字节码增强:采用字节码增强技术提高框架性能和效率,相比传统的反射调用方式性能表现显著提升。

BaseDao基本操作特点

BaseDao(基础数据访问对象)是一种常见的设计模式,用于在软件开发中提供数据库操作的抽象层。BaseDao的设计旨在简化数据库访问逻辑,减少代码冗余,并提高数据访问层的可维护性和可扩展性。以下是BaseDao基本操作的特点:

  1. 封装性
    BaseDao封装了所有与数据库交互的细节,包括连接的创建与关闭、SQL语句的执行、参数的绑定和结果集的映射等。这种封装性使得上层业务逻辑不需要关心底层的数据库实现,只需调用BaseDao提供的方法即可完成数据操作。

  2. 通用性
    ​ BaseDao通常包含了一组通用的数据操作方法,如增删改查(CRUD)。这些方法可以应用于任何数据表或实体类,而不需要为每个数据表单独编写代码。通用性使得BaseDao可以作为多个数据访问层的基类或接口。

  3. 可扩展性
    ​ BaseDao的设计允许开发者通过继承或实现接口来扩展新的功能。例如,可以添加新的操作方法来处理特定业务逻辑的需求,或者覆盖已有方法以实现特定的数据处理逻辑。

  4. 灵活性
    ​ 由于BaseDao提供了方法的模板,开发者可以根据需要选择合适的数据库访问技术(如JDBC、Hibernate、MyBatis等)来实现这些方法。这种灵活性使得BaseDao可以适应不同的项目需求和技术栈。

  5. 易于维护
    ​ BaseDao的封装和通用性使得数据访问层的代码更加简洁和易于维护。当数据库访问逻辑发生变化时,只需修改BaseDao中的相应方法,而不需要修改每个数据访问对象。

  6. 错误处理和日志记录
    ​ BaseDao通常会包含错误处理和日志记录的逻辑,以确保数据库操作的稳定性和可追踪性。这有助于及时发现和解决数据库访问过程中的问题。

  7. 事务管理
    ​ BaseDao可以集成事务管理功能,确保数据操作的原子性、一致性、隔离性和持久性(ACID属性)。通过BaseDao,开发者可以更容易地管理事务边界,实现复杂的业务逻辑。

  8. 性能优化
    ​ BaseDao可以通过缓存、连接池等技术来优化数据库访问性能。例如,可以重用数据库连接,减少连接创建和关闭的开销;可以通过缓存常用数据,减少对数据库的频繁访问。

  9. 数据映射
    ​ BaseDao可以集成对象关系映射(ORM)框架,如Hibernate或MyBatis,来简化Java对象和数据库记录之间的映射。这样可以减少手动编写SQL语句的工作量,并提高代码的可读性和可维护性。

BaseDao通过提供一套标准化和可复用的数据访问接口,使得数据库操作更加简单、高效和可靠。它是现代Java企业应用架构中不可或缺的一部分。

JDBC封装增,删,改,查

代码:

public class BaseDao {// 数据库驱动字符串private static final String driver = "com.mysql.cj.jdbc.Driver";// 连接URL字符串private static final String url = "jdbc:mysql://localhost:3306/workClothingDB";// 数据库用户名private static final String name = "root";// 数据库密码private static final String password = "sasa";// 连接对象private static Connection conn = null;// 预处理对象private static PreparedStatement pre = null;// 结果集对象private static ResultSet rs = null;/*** 获取连接的数据库对象* @return 返回获取到的数据库对象*/public static Connection getConnection(){try {Class.forName(driver);conn = DriverManager.getConnection(url, name, password);} catch (ClassNotFoundException | SQLException e) {throw new RuntimeException(e);}return conn;}/*** 释放资源* @param rs    结果集对象* @param pre   预处理对象* @param conn  连接数据库对象*/public static void closeAll(ResultSet rs, PreparedStatement pre, Connection conn){try {if (rs != null){rs.close();}if (pre != null){pre.close();}if (conn != null){conn.close();}} catch (SQLException e) {throw new RuntimeException(e);}}/*** 增,删,改操作* @param sql   传入增,删,改的sql语句* @param objects   传入sql语句需要的数据,位置与sql需要的数据位置保持一致* @return  返回受影响的行数*/public static int executeUpdate(String sql, Object... objects) {int row = 0;conn = getConnection();try {pre = conn.prepareStatement(sql);// 传入需要的参数for (int i = 0; i < objects.length; i++) {pre.setObject(i + 1, objects[i]);}row = pre.executeUpdate();} catch (Exception e){throw new RuntimeException(e);}finally {closeAll(null, pre, conn);}return row;}/*** 执行查询操作并返回结果集* @param sql       传入的sql语句* @param objects   传入sql语句需要的数据,位置与sql需要的数据位置保持一致* @return          返回查询的结果集*/public static ResultSet executeQuery(String sql, Object... objects) {try {conn = getConnection();pre = conn.prepareStatement(sql);// 传入需要的参数for (int i = 0; i < objects.length; i++) {pre.setObject(i + 1, objects[i]);}rs = pre.executeQuery();} catch (SQLException e) {throw new RuntimeException(e);} finally {closeAll(rs, pre, conn);}return rs;}
}

在这个封装类中,我们定义了几个静态方法来处理数据库操作:

  • getConnection():用于获取数据库连接。
  • executeQuery(String sql, Object... objects):用于执行查询操作,返回ResultSet对象。
  • executeUpdate(String sql, Object... objects):用于执行更新操作(如插入、更新、删除),返回受影响的行数。
  • closeAll(ResultSet rs, PreparedStatement pre, Connection conn):用于关闭数据库资源,防止资源泄露。

使用这个封装类可以简化数据库操作的代码,使得代码更加简洁和易于维护。同时,通过异常处理和资源管理,可以确保数据库操作的稳定性和资源的正确释放。

,返回受影响的行数。

  • closeAll(ResultSet rs, PreparedStatement pre, Connection conn):用于关闭数据库资源,防止资源泄露。

使用这个封装类可以简化数据库操作的代码,使得代码更加简洁和易于维护。同时,通过异常处理和资源管理,可以确保数据库操作的稳定性和资源的正确释放。

请注意,这个示例仅用于演示基本的JDBC封装,实际应用中可能需要根据项目需求进行更多的定制和优化,例如添加事务管理、连接池管理、日志记录等。此外,为了提高性能和安全性,建议使用连接池来管理数据库连接,而不是每次操作都创建和关闭新的连接。

这篇关于BaseDao之JDBC封装、增、删、改、查操作(超详细!)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855724

相关文章

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

沁恒CH32在MounRiver Studio上环境配置以及使用详细教程

目录 1.  RISC-V简介 2.  CPU架构现状 3.  MounRiver Studio软件下载 4.  MounRiver Studio软件安装 5.  MounRiver Studio软件介绍 6.  创建工程 7.  编译代码 1.  RISC-V简介         RISC就是精简指令集计算机(Reduced Instruction SetCom

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create