首页 > 其他分享 >Mybatis配置代码解读(事务管理与连接池)

Mybatis配置代码解读(事务管理与连接池)

时间:2024-07-20 16:55:50浏览次数:17  
标签:事务管理 事务 数据库 Mybatis 操作 连接 连接池

目录

配置代码解读

事务管理方式

数据库连接池 

测试代码解读

SqlSessionFactory

SqlSession

接口的代理对象


▐ 前言

在上一篇文章 手把手教你搭建Mybatis框架-CSDN博客 中分享了如何搭建Mybatis框架,但没有对一些配置文件和语法做出详细解读,刚开始学习的小白们可能会有很多不理解的代码,所以本篇文章会详细解读Mybatis配置代码和相关语法,更进一步的认识和学习Mybatis!

配置代码解读

在Mybaits核心配置文件中有这么一行代码:<transactionManager type="JDBC"/>

它表示事务管理方式,“transactionManager”表示事务管理器,“type="JDBC"”指定了事务管理器的类型为 JDBC,意味着将使用基于 JDBC 提供的机制和接口来管理事务,那么接下来就说说什么是事务管理?

事务管理方式

 •  简单讲,事务管理就是一次对数据库操作过程中,执行多条sql的管理。

 •  事务只针对新增,修改,删除操作,查询是不需要提交事务的。

 •  当执行一系列数据库操作时,JDBC事务管理器会确保要么所有操作都成功提交,要么在出现错误时全部回滚,以保证数据的完整性和一致性。

 •  例如生活中的转账操作,要从A账户向B账户转200元,那么就需要向数据库发送2条sql

    sql1:A账户 -200                                   ①

    其它代码(可能出现异常)                    ②

    sql2:B账号 +200                                  ③

当JDBC把sql代码发送给数据库时,此时不会立刻执行,而是把所有操作都成功执行完后再提交事务

若每执行一条sql就提交一次事务,那么如果①成功执行,②出现异常,导致③没有执行,但由于①成功执行后提交了事务,会出现A账号-200,B账户没有+200的情况!

▐ JDBC 事务管理器的工作原理是什么?

在 Java 中,JDBC 事务管理器的工作原理主要包括以下几个关键步骤:

1. 开启事务
通过调用 Connection 对象的 setAutoCommit(false) 方法来开启一个事务。这意味着后续的数据库操作不会自动提交,而是由开发者手动控制提交或回滚。

2. 执行数据库操作
在事务范围内执行一系列的 SQL 语句,如插入、更新、删除等操作。

3. 决定提交或回滚
如果所有操作都成功完成,并且希望将这些操作的结果永久保存到数据库中,就调用 Connection 对象的 commit() 方法来提交事务。

例如,如果在一个电商应用中,用户下单后需要同时更新库存和创建订单记录,只有这两个操作都成功,才提交事务。

如果在执行数据库操作过程中出现了异常或错误,或者由于业务逻辑的需要,决定取消这些操作对数据库的影响,就调用 Connection 对象的 rollback() 方法来回滚事务。

比如,在转账操作中,如果从一个账户扣除金额成功,但向另一个账户添加金额失败,就回滚整个事务,以保证数据的一致性。

4. 恢复自动提交模式(可选)
在事务完成后,如果希望后续的数据库操作恢复自动提交模式,可以调用 Connection 对象的 setAutoCommit(true) 方法。

总之,JDBC 事务管理器通过控制事务的开启、操作执行、提交或回滚,来保证数据库操作的原子性、一致性、隔离性和持久性。


在Mybaits核心配置文件中有这么一行代码:<dataSource type="POOLED">

它表示数据库连接池,用于定义数据源的类型为 “ 池化(POOLED)” ,那么接下来就说说什么是数据库连接池?

数据库连接池 

池,也就是一个集合,起缓存作用,由于频繁的创建销毁与数据库的连接对象是比较占用时间和空间的,所以可以在一个集合(池子)中默认创建若干个连接对象(默认是10),有请求使用时,直接从连接池中取出一个对象,用完之后归还,减少了创建和销毁的时间开销。

这种方式的优点包括:

  1. 提高性能:避免了频繁创建和关闭数据库连接的开销,从而加快了应用程序的响应速度。
  2. 资源有效利用:通过复用连接,能够更有效地利用系统资源。

例如,在一个高并发的 Web 应用中,如果没有使用池化数据源,每次请求都创建新连接,可能会导致数据库连接资源耗尽,系统性能下降。而使用池化数据源,如 <dataSource type="POOLED"> 配置,可以有效地应对大量并发请求,保证系统的稳定和高效运行。

再比如,在一个企业级的业务系统中,大量的短时间数据库操作频繁发生,池化数据源能够显著减少连接创建和关闭的时间,提高整体的处理效率。

▐ 配置 POOLED 数据源时,通常需要设置哪些参数?

1. 数据库驱动类
指定用于连接数据库的驱动程序类的全限定名,例如 com.mysql.jdbc.Driver 。

2. 数据库 URL
包含数据库服务器的地址、端口、数据库名称等信息,例如 jdbc:mysql://localhost:3306/mydatabase 。

3. 用户名和密码
用于登录数据库的认证信息。

4. 初始连接数
指定连接池在初始化时创建的连接数量。

5. 最大连接数
设定连接池能够创建的最大连接数量,防止过多的连接导致资源耗尽。

6. 最小空闲连接数
确保连接池中始终保持的最少空闲连接数量。

7. 连接超时时间
定义获取连接的等待超时时间,避免长时间阻塞。

8. 空闲连接回收时间
设置空闲连接在多长时间未被使用后将被回收。

<dataSource type="POOLED">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    <property name="initialSize" value="5"/>
    <property name="maxTotal" value="20"/>
    <property name="minIdle" value="3"/>
    <property name="maxWaitMillis" value="5000"/>
    <property name="timeBetweenEvictionRunsMillis" value="60000"/>
</dataSource>

测试代码解读

SqlSessionFactory

通过Mybatis核心文件的配置,Mybatis框架能够创建出 SqlSessionFactory 对象,SqlSessionFactory是用来创建SqlSession对象的,通过SqlSession 来执行数据库操作,如查询、插入、更新和删除等。

在一个大型的企业级应用中,可能会有多个不同的数据源配置,通过创建多个 SqlSessionFactory 来分别处理不同数据库的操作。

SqlSession

SqlSession对象是与数据库交互的,每次与数据库连接都需要创建一个新的连接对象,用完关闭即可,是Mybatis中进行数据库操作的关键接口,通过它可以方便地执行各种数据库操作并管理资源。

接口的代理对象

接口的代理对象是一种编程技术,常见的实现方式有静态代理和动态代理,由于接口是不能创建对象的,这里是通过接口的代理对象调用接口中对应方法所匹配的sql。

接口的代理对象在很多场景中都非常有用,比如日志记录、权限控制、事务处理等。 



  本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

海漫浩浩,我亦苦作舟!大家一起学习,一起进步!     Mybatis系列持续创造和更新中...

推荐文章:

手把手教你搭建Mybatis框架-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/2301_79263365/article/details/140454624?spm=1001.2014.3001.5501

标签:事务管理,事务,数据库,Mybatis,操作,连接,连接池
From: https://blog.csdn.net/2301_79263365/article/details/140544210

相关文章

  • JAVA面试框架篇(SSM和MyBatis)
    框架篇一.Spring1.Spring1.1Bean生命周期1.2Bean循环依赖(引用)说说spring中的循环引用构造方法出现了循环依赖怎么解决?1.3Bean线程安全问题问题:Spring中的Bean是线程安全的吗?1.4AOP(什么是AOP?)AOP:AspectOrientedProgramming面向切面编程应用场景(你们项目中有没有......
  • Mybatis学习笔记
    Mybatis入门Mybatis简介官网:https://mybatis.org/mybatis-3/zh/index.html入门程序查询user表中数据mapper接口packagecom.itheima.mapper;importcom.itheima.pojo.User;importorg.apache.ibatis.annotations.Mapper;importorg.apache.ibatis.annotations.Se......
  • swoole4 websocket + pdo连接池
    <?phpdeclare(strict_types=1);namespaceapp\api\controller\yy;useapp\common\controller\Api;useSwoole\Coroutine;useSwoole\Database\PDOConfig;useSwoole\Database\PDOPool;useSwoole\Runtime;usethink\Controller;classWebsocket{......
  • mybatis 插入时 返回主键
    在MyBatis中,如果你希望在插入数据时返回主键值,可以通过在<insert>标签中使用useGeneratedKeys="true"属性和keyProperty属性来实现。useGeneratedKeys属性表示使用数据库生成的主键,而keyProperty属性则指定用来接收这个生成主键的属性名。以下是一个简单的例子:假设你有一个用户......
  • 流式查询2、mybatis的ResultHandler 每次查询返回定义的500条
    流式查询2、mybatis通过用ResultHandler流式查询,每次查询返回定义的500条,再去批量处理(可异步并发):packagecom.aswatson.cdc.redis.schedule;importcom.aswatson.cdc.redis.common.lock.DistLock;importcom.aswatson.cdc.redis.common.lock.DistLockRegistry;importcom.as......
  • springboot~mybatis-pagehelper原理与使用
    原理PageHelper是一个用于MyBatis的分页插件,pagehelper-spring-boot-starter是其在SpringBoot中的集成组件。下面简要介绍PageHelper的分页原理:PageHelper的分页原理拦截器机制:PageHelper通过MyBatis的拦截器机制实现分页功能。它会在SQL执行前拦截并修改SQL语句,添加分页相......
  • springboot+vue+mybatis销售评价系统+PPT+论文+讲解+售后
    随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,销售评价系统当然也不能排除在外。销售评价系统是以实际运用为开发背景,运用软件工程开发方法,采用Java技术构建的一个管理系统。整个开发过程首先对软件系统进行需求分......
  • SSM 整合(Spring + MyBatis;Spring + Spring MVC)
    1.SSM整合(Spring+MyBatis;Spring+SpringMVC)文章目录1.SSM整合(Spring+MyBatis;Spring+SpringMVC)2.引入相关依赖3.SSM整合3.1创建包结构4.Spring整合+MyBatis4.1编写jdbc.properties4.2编写DataSourceConfig数据源配置4.3编写MyBatisConf......
  • SpringBoot整合MyBatis+MySQL
    一、添加mysql驱动mysqlmysql-connector-java二、添加MyBatis依赖org.mybatis.spring.bootmybatis-spring-boot-starter3.0.1三、添加配置spring:datasource:name:xx-datasourcedriverClassName:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/xx-......
  • java 使用mybatis时 模糊查询
    有两种方法,分别是直接字符串拼接,使用mybatis的bind函数绑定再查方法1<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g......