目录
mybatis-config.xml :
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <environments default="development">
- <environment id="development">
- <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"/>
- dataSource>
- environment>
- environments>
- <mappers>
- <mapper resource="CarMapper.xml"/>
- <mapper resource="CarMapper2.xml"/>
- mappers>
- configuration>
mybatis-003-configuration :
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
-
- <environments default="production">
-
- <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"/>
- dataSource>
- environment>
-
- <environment id="production">
- <transactionManager type="JDBC" />
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- dataSource>
- environment>
- environments>
- <mappers>
- <mapper resource="CarMapper.xml"/>
- mappers>
- configuration>
CarMapper.xml
- "1.0" encoding="UTF-8" ?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
- <mapper namespace="car">
- <insert id="insertCar">
- insert into t_car(id,car_num,brand,guide_price,produce_time,car_type) values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
- insert>
- mapper>
ConfigurationTest.testEnvironment
- package com.dong.mybatis;
-
- import com.powernode.mybatis.pojo.Car;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.Test;
-
- public class ConfigurationTest {
-
- @Test
- public void testEnvironment() throws Exception{
- // 准备数据
- Car car = new Car();
- car.setCarNum("133");
- car.setBrand("丰田霸道");
- car.setGuidePrice(50.3);
- car.setProduceTime("2020-01-10");
- car.setCarType("燃油车");
-
- // 一个数据库对应一个SqlSessionFactory对象
- // 两个数据库对应两个SqlSessionFactory对象,以此类推
- SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
-
- // 使用默认数据库
- SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
- SqlSession sqlSession = sqlSessionFactory.openSession(true);
- int count = sqlSession.insert("insertCar", car);
- System.out.println("插入了几条记录:" + count);
-
- // 使用指定数据库
- SqlSessionFactory sqlSessionFactory1 = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "dev");
- SqlSession sqlSession1 = sqlSessionFactory1.openSession(true);
- int count1 = sqlSession1.insert("insertCar", car);
- System.out.println("插入了几条记录:" + count1);
- }
- }
执行结果:


mybatis-config2.xml :
- "1.0" encoding="UTF-8" ?>
- 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>
ConfigurationTest.testTransactionManager :
- @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);
- }
当事务管理器是:JDBC
当事务管理器是:MANAGED
mybatis-config3.xml :
- "1.0" encoding="UTF-8" ?>
- 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>
ConfigurationTest.testDataSource :
- @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();
- }
当type是UNPOOLED,控制台输出:

修改配置文件mybatis-config3.xml中的配置:
mybatis-config3.xml :
<dataSource type="POOLED">
Java测试程序不需要修改,直接执行,看控制台输出:

通过测试得出:UNPOOLED不会使用连接池,每一次都会新建JDBC连接对象。POOLED会使用数据库连接池。【这个连接池是mybatis自己实现的。】
mybatis-config3.xml:
<dataSource type="JNDI">
JNDI的方式:表示对接JNDI服务器中的连接池。这种方式给了我们可以使用第三方连接池的接口。如果想使用dbcp、c3p0、druid(德鲁伊)等,需要使用这种方式。
这种再重点说一下type="POOLED"的时候,它的属性有哪些?
mybatis-config3.xml
- "1.0" encoding="UTF-8" ?>
- 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"/>
-
- <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>
poolMaximumActiveConnections:最大的活动的连接数量。默认值10
poolMaximumIdleConnections:最大的空闲连接数量。默认值5
poolMaximumCheckoutTime:强行回归池的时间。默认值20秒。
poolTimeToWait:当无法获取到空闲连接时,每隔20秒打印一次日志,避免因代码配置有误,导致傻等。(时长是可以配置的)
当然,还有其他属性。对于连接池来说,以上几个属性比较重要。
最大的活动的连接数量就是连接池连接数量的上限。默认值10,如果有10个请求正在使用这10个连接,第11个请求只能等待空闲连接。
最大的空闲连接数量。默认值5,如何已经有了5个空闲连接,当第6个连接要空闲下来的时候,连接池会选择关闭该连接对象。来减少数据库的开销。
需要根据系统的并发情况,来合理调整连接池最大连接数以及最多空闲数量。充分发挥数据库连接池的性能。【可以根据实际情况进行测试,然后调整一个合理的数量。】
下图是默认配置:

在以上配置的基础之上,可以编写java程序测试:
ConfigurationTest.testPool
- @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");
- }
- }
CarMapper.xml :
- <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提供了更加灵活的配置,连接数据库的信息可以单独写到一个属性资源文件中,假设在类的根路径下创建jdbc.properties文件,配置如下:
jdbc.properties :
- jdbc.driver=com.mysql.cj.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/powernode
在mybatis核心配置文件中引入并使用:
mybatis-config4.xml :
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
- <properties resource="jdbc.properties">
- <property name="jdbc.username" value="root"/>
- <property name="jdbc.password" value="root"/>
- properties>
-
- <environments default="dev">
- <environment id="dev">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
-
- <property name="driver" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- dataSource>
- environment>
- environments>
- <mappers>
- <mapper resource="CarMapper.xml"/>
- mappers>
- configuration>
编写Java程序进行测试:
ConfigurationTest.testProperties :
- @Test
- public void testProperties() throws Exception{
- SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
- SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config4.xml"));
- SqlSession sqlSession = sqlSessionFactory.openSession();
- Object car = sqlSession.selectOne("selectCarByCarNum");
- System.out.println(car);
- }
properties两个属性:
resource:这个属性从类的根路径下开始加载。【常用的。】
url:从指定的url加载,假设文件放在d:/jdbc.properties,这个url可以写成: file:///d:/jdbc.properties。注意是三个斜杠哦。
注意:如果不知道mybatis-config.xml文件中标签的编写顺序的话,可以有两种方式知道它的顺序:
mapper标签用来指定SQL映射文件的路径,包含多种指定方式,这里先主要看其中两种:
第一种:resource,从类的根路径下开始加载【比url常用】
mybatis-config4.xml :
- <mappers>
- <mapper resource="CarMapper.xml"/>
- mappers>
如果是这样写的话,必须保证类的根下有CarMapper.xml文件。
如果类的根路径下有一个包叫做test,CarMapper.xml如果放在test包下的话,这个配置应该是这样写:
mybatis-config4.xml :
- <mappers>
- <mapper resource="test/CarMapper.xml"/>
- mappers>
第二种:url,从指定的url位置加载
假设CarMapper.xml文件放在d盘的根下,这个配置就需要这样写:
mybatis-config4.xml :
- <mappers>
- <mapper url="file:///d:/CarMapper.xml"/>
- mappers>
mapper还有其他的指定方式,后面再看!!!