Spring Mybatis随记

  1. 连接池获取连接逻辑
com.zaxxer.hikari.pool.HikariPool#getConnection(long)
// 内部循环获取空闲连接,返回前检查数据库连接是否可以用

  1. Spring获取连接
    如果已经开启了事务,只要没提交事务,调用非事务的DAO执行sql也会被事务统一管理
org.springframework.jdbc.datasource.DataSourceTransactionManager#doBegin 
// 获取连接后将其设置为手动提交
  1. mybatis获取连接
org.mybatis.spring.transaction.SpringManagedTransaction#getConnection
// 一个线程里当前只有一个连接被org.springframework.transaction.support.TransactionSynchronizationManager管理
// 如果非事务的操作,或者事务已提交,该连接不会被Spring管理
org.mybatis.spring.transaction.SpringManagedTransaction#openConnection
  1. mybatis获取SqlSession
org.mybatis.spring.SqlSessionUtils#getSqlSession
// 使用Spring管理SqlSession
org.mybatis.spring.SqlSessionUtils#registerSessionHolder

mybatis通过SqlSession进行数据库操作;
spring中通过TransactionSynchronizationManager为每个线程对应的数据库连接维护了事务相关的信息

  1. 打印事务日志
<!-- hikari 日志-->
	<logger name="com.zaxxer" level="DEBUG" additivity="false">
		<appender-ref ref="console"/>
	</logger>

	<!-- 数据库连接 -->
	<logger name="org.springframework.jdbc" level="DEBUG" additivity="false">
		<appender-ref ref="console"/>
	</logger>

	<!--spring 事务相关-->
	<logger name="org.springframework.transaction" level="DEBUG" additivity="false">
		<appender-ref ref="console"/>
	</logger>

	<!-- mybatis 相关-->
	<logger name="org.mybatis.spring" level="DEBUG" additivity="false">
		<appender-ref ref="console"/>
	</logger>
  1. 打印SQL
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
	<!-- 开启业务mapper日志 -->
	<logger name="com.ibreeze" level="DEBUG" additivity="false">
		<appender-ref ref="console"/>
	</logger>
  1. 日志过程
// Spring JDBC获取连接
o.s.jdbc.support.JdbcTransactionManager  : Acquired Connection [HikariProxyConnection@748466085 wrapping com.mysql.cj.jdbc.ConnectionImpl@402d6012] for JDBC transaction
// 连接设置为手动提交
o.s.jdbc.support.JdbcTransactionManager  : Switching JDBC Connection [HikariProxyConnection@748466085 wrapping com.mysql.cj.jdbc.ConnectionImpl@402d6012] to manual commit
o.s.jdbc.support.JdbcTransactionManager  : Participating in existing transaction
org.mybatis.spring.SqlSessionUtils       : Creating a new SqlSession
org.mybatis.spring.SqlSessionUtils       : Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46c662f2]
c.j.b.c.m.c.MybatisPlusMetaObjectHandler : mybatis plus start insert fill ....
// myabtis.Spring
o.m.s.t.SpringManagedTransaction         : JDBC Connection [HikariProxyConnection@748466085 wrapping com.mysql.cj.jdbc.ConnectionImpl@402d6012] will be managed by Spring
// SqlSession CRUD
c.j.b.w.b.f.m.SysFormMapper2.insert      : ==>  Preparing: INSERT INTO bip_wf_form ( form_id, form_name, create_by, create_time, update_by, update_time ) VALUES ( ?, ?, ?, ?, ?, ? )
c.j.b.w.b.f.m.SysFormMapper2.insert      : ==> Parameters: 1702632127793(Long), in(String), null, 2023-12-15T17:22:07.793(LocalDateTime), null, 2023-12-15T17:22:07.844(LocalDateTime)
c.j.b.w.b.f.m.SysFormMapper2.insert      : <==    Updates: 1
// 释放SqlSession操作
org.mybatis.spring.SqlSessionUtils       : Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46c662f2]
// 再次操作时重新获取SqlSession
org.mybatis.spring.SqlSessionUtils       : Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46c662f2] from current transaction
com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Pool stats (total=1, active=1, idle=0, waiting=0)
c.j.b.w.b.f.m.S.selectCount              : ==>  Preparing: SELECT COUNT( * ) FROM bip_wf_form
c.j.b.w.b.f.m.S.selectCount              : ==> Parameters: 
com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@30cf72ed
com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - After adding stats (total=2, active=1, idle=1, waiting=0)
c.j.b.w.b.f.m.S.selectCount              : <==      Total: 1
org.mybatis.spring.SqlSessionUtils       : Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46c662f2]

org.mybatis.spring.SqlSessionUtils       : Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46c662f2]
org.mybatis.spring.SqlSessionUtils       : Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46c662f2]
// 回滚数据库
o.s.jdbc.support.JdbcTransactionManager  : Initiating transaction rollback
o.s.jdbc.support.JdbcTransactionManager  : Rolling back JDBC transaction on Connection [HikariProxyConnection@748466085 wrapping com.mysql.cj.jdbc.ConnectionImpl@402d6012]
// 释放连接
o.s.jdbc.support.JdbcTransactionManager  : Releasing JDBC Connection [HikariProxyConnection@748466085 wrapping com.mysql.cj.jdbc.ConnectionImpl@402d6012] after transaction

相关推荐

  1. C++<span style='color:red;'>随</span><span style='color:red;'>记</span>

    C++

    2023-12-16 08:40:01      32 阅读
  2. Spring Mybatis

    2023-12-16 08:40:01       40 阅读
  3. uniapp

    2023-12-16 08:40:01       51 阅读
  4. vol----学习!!!

    2023-12-16 08:40:01       35 阅读
  5. 设备驱动-

    2023-12-16 08:40:01       10 阅读
  6. git<span style='color:red;'>随</span><span style='color:red;'>记</span>

    git

    2023-12-16 08:40:01      8 阅读
  7. -SQLAlchemy ORM 梳理

    2023-12-16 08:40:01       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 08:40:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 08:40:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 08:40:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 08:40:01       20 阅读

热门阅读

  1. Mac下ERROR: Cannot connect to the Docker daemon

    2023-12-16 08:40:01       43 阅读
  2. BOOST_MP11_VERSION宏用法的测试程序

    2023-12-16 08:40:01       45 阅读
  3. Excel高频函数合集

    2023-12-16 08:40:01       33 阅读
  4. hive中如何求取中位数?

    2023-12-16 08:40:01       40 阅读
  5. ARM JTAG 调试原理

    2023-12-16 08:40:01       43 阅读
  6. 分布式文件存储系统minio了解下

    2023-12-16 08:40:01       41 阅读
  7. C 语言中,结构体「.」与「->」的区别

    2023-12-16 08:40:01       38 阅读
  8. react函数组件中Hooks和ahooks的区别

    2023-12-16 08:40:01       44 阅读