目录
第一步:创建Spring核心配置文件applicationContext.xml
第二步:在Spring核心配置文件中配置DataSource数据源
概述:
通过使用Spring的IoC容器,对MyBatis实例进行管理。
Spring能把MyBatis集成进来,像使用一个框架那样去使用,将MyBtatis框架中所有的对象注入Spring容器,交给Spring容器进行统一管理。直接从IoC容器中获取获取对象。
集成依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
整合Spring和MyBatis需要在Spring应用上下文中定义:
- SqlSessionFactory
- 数据映射器类
在MyBatis-Spring中,使用SqlSessionFactoryBean来创建SqlSessionFactory。配置这个工厂Bean到Spring的XML配置文件中:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
注意:
SqlSessionFactory需要一个DataSource(数据源),数据源由SpringIoC容器进行统一管理。
在MyBatis单独的使用中,通过SqlSessionFactoryBuilder来创建SqlSessionFactory。在MyBatis-Spring中,使用SqlSessionBean来创建SqlSessionFactory。
MyBatis通过SqlSessionFactory来获取Session。获取Session实例之后,通过Session实例执行sql语句,提交事务,回滚连接等操作,当不在需要时,使用close方法结束Session。
SqlSessionFactory有唯一的必要属性:用于JDBC的DataSource,可以是任意的DataSource对象,这个DataSource对象是由Spring进行管理。
configLocation属性:用来指定MyBatis的XML配置文件路径,可以对基础配置进行修改<setting>或<typeAliases>等
SqlSessionTemplate是MyBatis-Spring的核心,作为SqlSession的一个实现可以代替SqlSession。模板可以参与到Spring的事务中,并且由于其是线程安全的,可以提供多个映射器类使用。
可以使用SqlSessionFactory做为构造方法参数来创建SqlSessionTemplate对象。
<!--配置sqlSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--只能通过构造器注入sqlSessionFactory,因为没有set方法-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
这个sqlSession直接注入到dao Bean容器中,只需要在dao接口实现类中添加SqlSession属性:
public class UserMapperImpl implements UserMapper{
private SqlSessionTemplate sqlSession;
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
public List<User> selectAll() {
return sqlSession.getMapper(UserMapper.class).selectAll();
}
}
注入SqlSessionTemplate:
<!-- 创建mapper对象-->
<bean id="userMapperImpl" class="com.sunny.ssm.mapper.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
MyBatis使用步骤:
- 定义dao接口
- 配置dao接口对应的XML配置文件
- 定义MyBatis的主配置文件
- 通过SqlSession获取dao接口对应的XML配置文件,获取接口类的字节码文件,创建dao代理对象
如何使用dao对象,需要使用getMapper( )方法,怎么样能使用getMapper( )方法,需要哪些条件:
- 获取SqlSession对象,需要使用SqlSessionFactory的openSession( )方法。
- 创建SqlSessionFactory对象。通过读取MyBatis的主配置文件,创建SqlSessionFactory对象
需要SqlSessionFactory对象,使用Factory能获取SqlSession,有了SqlSession就能获取dao接口类,目的就是获取dao对象,通过接口的代理对象调用方法。
Factory创建需要读取主配置文件:
(我们会使用独立的连接池类替换MyBatis默认自带的,把连接池类也交给Spring创建)
<!--configuration核心配置文件-->
<configuration>
<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/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="131452"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="接口类对应得XML配置文件引用"/>
</mappers>
</configuration>
Druid数据库连接池:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE
整合Spring-MyBatis步骤:
第一步:创建Spring核心配置文件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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd ">
<!-- Spring连接的JDBC数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true" />
<property name="username" value="root" />
<property name="password" value="131452" />
</bean>
<!-- 指出Mybatis的核心配置文件,关于数据库表和Java文件的映射写在里面 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="configuration.xml"></property>
</bean>
<!-- 指出数据库接口方法所在的包 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
autowire="byName">
<property name="basePackage" value="接口包路径" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>
第二步:在Spring核心配置文件中配置DataSource数据源
创建配置文件database.properties文件
#连接数据库的四个基本要素
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名
jdbc.username=root
jdbc.password=131452
#druid连接池其他配置,省略
<!--DataSource: 使用Spirng的数据源替换Mybatis的配置, 可以使用c3p0,dbcp,druid,或者spring提供的jdbc-->
<!-- 加载数据库配置信息 -->
<context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>
<!-- 连接池对象 -->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="username" value="${jdbc.username}"/>
<property name="url" value="${jdbc.url}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
第三步:配置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>
<!--配置操作数据库的xml配置文件路径-->
<mappers>
<mapper resource="接口类映射的xml文件路径" />
</mappers>
</configuration>
配置Druid数据库连接池:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${jdbc.jdbcUrl}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="driverClassName" value="${jdbc.driverClass}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20" />
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" />
</bean>