目录
▐ 前言
在上一篇文章 手把手教你搭建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),有请求使用时,直接从连接池中取出一个对象,用完之后归还,减少了创建和销毁的时间开销。
这种方式的优点包括:
- 提高性能:避免了频繁创建和关闭数据库连接的开销,从而加快了应用程序的响应速度。
- 资源有效利用:通过复用连接,能够更有效地利用系统资源。
例如,在一个高并发的 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系列持续创造和更新中...
推荐文章: