文章目录
1.environment
两个数据库都有一张名为car的表:
mybatis-config.xml
<?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>
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
<!--default表示默认环境,当使用mybatis创建sqlSessionFactory的时候,没有指定环境的话,使用这个环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sdnu"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="mybatisDB">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.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>
<!--执行XxxxMapper.xml文件的路径-->
<!--resource属性会自动从类的根路径下开始查找资源-->
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
CarMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 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 values(null, '8888', '沃尔沃', 30.0, '2000-09-08', '燃油车')
</insert>
</mapper>
测试类
ConfigurationTest.java
package com.sdnu.mybatis.test;
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;
import java.io.IOException;
public class ConfigurationTest {
@Test
public static void main(String[] args) throws IOException {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("car.insertCar");
sqlSession.commit();
sqlSession.close();
SqlSessionFactoryBuilder sqlSessionFactoryBuilder1 = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory1 = sqlSessionFactoryBuilder1.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatisDB");
SqlSession sqlSession1 = sqlSessionFactory1.openSession();
sqlSession1.insert("car.insertCar");
sqlSession1.commit();
sqlSession1.close();
}
}
设置断点
断点前:
断点后
2.transactionManager
作用:配置任务管理器,指定mybatis用什么方式去管理事务
type属性有两个值
- JDBC
使用原生jdbc代码来管理事务 - MANAGED
mybatis不再管理事务,而是将事务交给其它JavaEE容器管理,例如spring
(交给容器去管理事务,但⽬前使⽤的是本地程序,没有容器的⽀持,当mybatis找不到容器的⽀持时:没有事务。也就是说只要执⾏⼀条DML语句,则提交⼀次。)
3. dataSource
(1)dataSource被称为数据源
(2)作用:为程序提供Connection对象。(但凡是给程序提供Connection对象的,都叫做数据源。)
(3)数据源实际上是一套规范。JDK中有这套规范:javax.sql.DataSource(这个数据源的规范,这套接口实际上是JDK规定的。)
(4)我们自己也可以编写数据源组件,只要实现javax.sql.DataSource接口就行了。实现接口当中所有的方法。这样就有了自己的数据源。
比如你可以写一个属于自己的数据库连接池(数据库连接池是提供连接对象的,所以数据库连接池就是一个数据源)。
(5)常见的数据源组件(数据库连接池):druid
(6)type属性用来指定数据源的类型,就是指定具体使用什么方式来获取Connection对象:(type属性有三个值:必须是三选一。
type=“[UNPOOLED|POOLED|JNDI]”)
- UNPOOLED:不使用数据库连接池技术。每一次请求过来之后,都是创建新的Connection对象。
- POOLED:使用mybatis自己实现的数据库连接池。
- JNDI:集成其它第三方的数据库连接池。
JNDI是一套规范。谁实现了这套规范呢?大部分的web容器都实现了JNDI规范:
例如:Tomcat、Jetty、WebLogic、WebSphere,这些服务器(容器)都实现了JNDI规范。
JNDI是:java命名目录接口。Tomcat服务器实现了这个规范。
3.1 使用UNPOOLED
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sdnu"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
测试程序:
@Test
public void testDataSource() throws IOException{
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
//通过sqlSessionFactory可以开启多个会话
//会话1
SqlSession sqlSession1 = sqlSessionFactory.openSession();
sqlSession1.insert("car.insertCar");
sqlSession1.commit();
sqlSession1.close();
//会话2
SqlSession sqlSession2 = sqlSessionFactory.openSession();
sqlSession2.insert("car.insertCar");
sqlSession2.commit();
sqlSession2.close();
}
3.2 使用POOLED
针对上面程序改一行:
<dataSource type="POOLED">
3.3 POOLED的一些配置
4.properties
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=Wgf720130601
mybatis-config.xml
<?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>
<!-- <properties>-->
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="Wgf720130601"/>-->
<!-- </properties>-->
<properties resource="jdbc.properties"/>
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
<!--default表示默认环境,当使用mybatis创建sqlSessionFactory的时候,没有指定环境的话,使用这个环境-->
<environments default="development">
<environment id="mybatisDB">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<property name="poolMaximumActiveConnections" value="10"/>
<property name="poolTimeToWait" value="2000"/>
<property name="poolMaximumCheckoutTime" value="10000"/>
<property name="poolMaximumIdleConnections" value="5"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--执行XxxxMapper.xml文件的路径-->
<!--resource属性会自动从类的根路径下开始查找资源-->
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
resource从类路径开始加载
5.mapper
mapper标签⽤来指定SQL映射⽂件的路径,包含多种指定⽅式,这⾥先主要看其中两种:
- mapper标签⽤来指定SQL映射⽂件的路径,包含多种指定⽅式,这⾥先主要看其中两种:
- 第⼆种:url,从指定的url位置加载