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

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值