首页 > 其他分享 >跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager

时间:2023-03-15 16:31:46浏览次数:36  
标签:配置文件 car mybatis 杜从 sqlSession MyBatis SqlSessionFactoryBuilder 连接 连接池

MyBatis核心配置文件详解

transactionManager

配合视频教程观看,更易学习理解,课程讲解从Mybatis的一些核心要点与实战中的运用,一直过渡到MyBaits源码,由表及里的代入架构思维。一步一案例,一码一实操。从简单到深入,从实战到源码,MyBatis重点、难点、考点一网打尽。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="dev">
<environment id="dev">
<transactionManager type="MANAGED"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
@Test
public void testTransactionManager() throws Exception{
// 准备数据
Car car = new Car();
car.setCarNum("133");
car.setBrand("丰田霸道");
car.setGuidePrice(50.3);
car.setProduceTime("2020-01-10");
car.setCarType("燃油车");
// 获取SqlSessionFactory对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config2.xml"));
// 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行SQL
int count = sqlSession.insert("insertCar", car);
System.out.println("插入了几条记录:" + count);
}

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_连接池

当事务管理器是:JDBC

  • 采用JDBC的原生事务机制:
  • 开启事务:conn.setAutoCommit(false);
  • 处理业务......
  • 提交事务:conn.commit();

当事务管理器是:MANAGED

  • 交给容器去管理事务,但目前使用的是本地程序,没有容器的支持,当mybatis找不到容器的支持时:没有事务。也就是说只要执行一条DML语句,则提交一次。

dataSource

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
@Test
public void testDataSource() throws Exception{
// 准备数据
Car car = new Car();
car.setCarNum("133");
car.setBrand("丰田霸道");
car.setGuidePrice(50.3);
car.setProduceTime("2020-01-10");
car.setCarType("燃油车");
// 获取SqlSessionFactory对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config3.xml"));
// 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 执行SQL
int count = sqlSession.insert("insertCar", car);
System.out.println("插入了几条记录:" + count);
// 关闭会话
sqlSession.close();
}

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_mybatis_02当type是UNPOOLED,控制台输出:

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_xml_03

修改配置文件mybatis-config3.xml中的配置:

<dataSource type="POOLED">

Java测试程序不需要修改,直接执行,看控制台输出:

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_连接池_04

通过测试得出:UNPOOLED不会使用连接池,每一次都会新建JDBC连接对象。POOLED会使用数据库连接池。【这个连接池是mybatis自己实现的。】

<dataSource type="JNDI">

JNDI的方式:表示对接JNDI服务器中的连接池。这种方式给了我们可以使用第三方连接池的接口。如果想使用dbcp、c3p0、druid(德鲁伊)等,需要使用这种方式。

这种再重点说一下type="POOLED"的时候,它的属性有哪些?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!--最大连接数-->
<property name="poolMaximumActiveConnections" value="3"/>
<!--这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。-->
<property name="poolTimeToWait" value="20000"/>
<!--强行回归池的时间-->
<property name="poolMaximumCheckoutTime" value="20000"/>
<!--最多空闲数量-->
<property name="poolMaximumIdleConnections" value="1"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_xml_05

poolMaximumActiveConnections:最大的活动的连接数量。默认值10

poolMaximumIdleConnections:最大的空闲连接数量。默认值5

poolMaximumCheckoutTime:强行回归池的时间。默认值20秒。

poolTimeToWait:当无法获取到空闲连接时,每隔20秒打印一次日志,避免因代码配置有误,导致傻等。(时长是可以配置的)

当然,还有其他属性。对于连接池来说,以上几个属性比较重要。

最大的活动的连接数量就是连接池连接数量的上限。默认值10,如果有10个请求正在使用这10个连接,第11个请求只能等待空闲连接。

最大的空闲连接数量。默认值5,如何已经有了5个空闲连接,当第6个连接要空闲下来的时候,连接池会选择关闭该连接对象。来减少数据库的开销。

需要根据系统的并发情况,来合理调整连接池最大连接数以及最多空闲数量。充分发挥数据库连接池的性能。【可以根据实际情况进行测试,然后调整一个合理的数量。】

下图是默认配置:

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_连接池_06

在以上配置的基础之上,可以编写java程序测试:

@Test
public void testPool() throws Exception{
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config3.xml"));
for (int i = 0; i < 4; i++) {
SqlSession sqlSession = sqlSessionFactory.openSession();
Object selectCarByCarNum = sqlSession.selectOne("selectCarByCarNum");
}
}
<select id="selectCarByCarNum" resultType="com.powernode.mybatis.pojo.Car">
select id,car_num carNum,brand,guide_price guidePrice,produce_time produceTime,car_type carType from t_car where car_num = '100'
</select>

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_mybatis_07

跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager_mybatis_08

 

 


标签:配置文件,car,mybatis,杜从,sqlSession,MyBatis,SqlSessionFactoryBuilder,连接,连接池
From: https://blog.51cto.com/zzfmhx/6123068

相关文章

  • 软件学习记录(七)配置文件的保存与读取功能(ini文件的使用)
    软件学习记录(七)配置文件的保存与读取功能(ini文件的使用)配置文件路径:CommonMethods.SysSetPath=Path.Combine(newstring[]{Application.StartupPath.ToString(),"Se......
  • SpringBoot+MyBatis批量插入数据的三种方式
    1.背景介绍在开发过程中,我们经常会遇到往数据库表中插入大量数据的场景,比如excel批量导入数据。那么该如何快速地插入数据呢?我们可以考虑使用批量插入来实现,实测100000......
  • Mybatis数据库驱动
    Mybatis数据库驱动最近在学习mybatis的源码,有一个databaseIdProvider根据不同数据库执行不同sql的功能,我正好有一个mysql还有一个瀚高数据库,就去试了一下,使用如下pom......
  • Mac 开发 | IDEA 设置 Mybatis 的XML SQL 语句提示
    1、IDEA链接数据库2、IDEA设置数据库方言为链接的数据库方言3、IDEASQL解析范围设置4、可以在mapperxml中写select测试了。......
  • Java Mybatis 笔记
    MyBatis1、简介1.1什么是MybatisMyBatis是一款优秀的持久层框架;它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获......
  • MybatisX无法自动生成entity实体类
    在做项目的时候,安装MybatisX插件可以让我们不用写实体类,加快我们的开发速度,让我们更专注于业务逻辑的开发,可是最近在做项目的时候,发现MybatisX插件的MybatisX-Generator无......
  • mybatis源码-注解sql
    Mybatis-注解sqlDemo主启动类publicclassMybatisHelloWorld{publicstaticvoidmain(String[]args)throwsException{Stringresource="org/myb......
  • Linux 工具命令(03): 使用 envsubst 渲染配置文件
    Linux工具命令(03):使用envsubst渲染配置文件如果在公众号文章发现状态为已更新,建议点击查看原文查看最新内容。状态:未更新原文链接:https://typonotes.co......
  • springboot 中使用@Value 获取配置文件中参数问题
    springboot中使用@Value("${spring.redis.password}")获取配置文件中参数时,如果配置文件中没有相关参数,项目启动时会报错Causedby:java.lang.IllegalArgumentExcep......
  • Mybatis的工作原理
    mybatis的工作原理mybatis基本工作原理封装sql->调用JDBC操作数据库->返回数据封装JDBCQ:JDBC是什么?Java中规范客户端程序如何访问数据库的应用程序接口J。驱动......