【Spring】Spring整合MyBatis

目录

概述: 

集成依赖:

注意:

MyBatis使用步骤:

整合Spring-MyBatis步骤:

第一步:创建Spring核心配置文件applicationContext.xml

第二步:在Spring核心配置文件中配置DataSource数据源

第三步:配置MyBatis核心配置文件


概述: 

      通过使用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使用步骤:

  1. 定义dao接口
  2. 配置dao接口对应的XML配置文件
  3. 定义MyBatis的主配置文件
  4. 通过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&amp;useUnicode=true&amp;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>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃糖的范同学

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值