实现mybatis与spring进行整合,通过spring管理SqlSessionFactory、mapper接口。
一、mybatis与spring整合jar
mybatis官方提供与mybatis与spring整合jar包:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.3</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.2.RELEASE</version> </dependency>
二、Spring配置文件
在classpath下创建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 引入数据库的配置文件 --> <context:property-placeholder location="classpath:properties/jdbc.properties"/> <!--数据源--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${db.username}"/> <property name="password" value="${db.password}"/> <property name="jdbcUrl" value="${db.jdbcUrl}"/> <property name="driverClass" value="${db.driverClass}"/> </bean> <!-- spring事务管理 --> <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 开启基于注解的事务 --> <tx:annotation-driven transaction-manager="dataSourceTransactionManager" proxy-target-class="true"/> <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --> <!--创建出SqlSessionFactory对象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- configLocation指定全局配置文件的位置 --> <property name="configLocation" value="classpath:mybatis-config/mybatis-config_01.xml" /> <!--mapperLocations: 指定mapper文件的位置--> <property name="mapperLocations" value="classpath:sqlmap/*.xml"></property> </bean> </beans>
三、测试
public class Test_04 { public static final String RESOURCE = "applicationContext.xml"; private SqlSessionFactory sqlSessionFactory; @Before public void createFactory() { sqlSessionFactory = (SqlSessionFactory) new ClassPathXmlApplicationContext(RESOURCE).getBean("sqlSessionFactory"); } @Test public void test_Method01() { SqlSession sqlSession1 = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapperDao dao1 = sqlSession1.getMapper(UserMapperDao.class); //使用session1执行第一次查询 User user1 = dao1.findUserById("2"); System.out.println("user = " + user1); sqlSession1.commit(); //关闭session sqlSession1.close(); //使用session2执行第二次查询,由于开启了二级缓存这里从缓存中获取数据不再向数据库发出sql SqlSession sqlSession2 = sqlSessionFactory.openSession(); //获限mapper接口实例 UserMapperDao dao2 = sqlSession2.getMapper(UserMapperDao.class); //第二次查询,由于是同一个session则不再向数据发出语句直接从缓存取出 User user2 = dao2.findUserById("2"); System.out.println("user = " + user2); //关闭session sqlSession1.close(); } }