Spring整合MyBatis

1.引入数据库jar和C3P0连接池jar包

<!-- mysql依赖 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.25</version>
</dependency>
<!-- c3p0依赖 -->
<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.5</version>
</dependency>

2.引入Spring的jar包以及配置文件

Spring 选择的版本是5.2.1的版本,因为使用的是release版本会自动下载关联依赖包。我们在配置数据库事务的时侯需要使用AOP,所以还需要引入aspectj包,用于切面编程,如下所示:

<!-- spring依赖 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.1.RELEASE</version>
</dependency>
<!-- spring-orm依赖 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-orm</artifactId>
  <version>5.2.1.RELEASE</version>
</dependency>
<!-- aspectjweaver -->
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.2</version>
  <scope>runtime</scope>
</dependency>

配置文件我们需要引入的是 spring.xml文件,放到resources包下,为了区分Spring和SpringMVC的功能,把配置文件的名称修改为spring-application.xml。在这里插入图片描述
在web.xml文件中添加上字符集过滤器,避免字符乱码的出现,如下所示:

<!--解决中文乱码的过滤器-->
<filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <!-- 要使用的字符集,一般使用UTF-8 -->
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <!-- 这里不能留空或者直接写 / ,否则不起作用 -->
  <url-pattern>/*</url-pattern>
</filter-mapping>

3.引入MyBatis的jar包以及配置文件

除了MyBatis的核心包之外,好要把Spring整合MyBatis需要的mybatis-spring包引过来。如下所示:

<!-- mybatis依赖 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.6</version>
</dependency>
<!-- mybatis-spring -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.3.2</version>
</dependency>

把MyBatis的配置文件mybatis-config.xml文件引入过来,如下图所示:
在这里插入图片描述

4.修改config配置文件实现数据库管理和事务管理

现在我们项目中包含了Spring和 MyBatis 的相关配置,接下来就是需要修改我们的配置文件,实现Spring的管理机制,把 MyBatis交给Spring来管理,统一调配。
在学 MyBatis 的时候,是把数据库环境书写在mybatis-config.xml文件中的,现在需要把它们全部从mybatis-config.xml文件中去除。
然后在spring-application.xml文件中增加上对数据库环境的配置,我们现在不单单使用了MyBatis,为了进一步的增加数据库的效率,采用c3po连接池来做一下数据库连接的管理。这里分成几个步骤来进行:
配置具有C3PO 连接池的数据源。这里要特别的说明一点,mysql 数据库我们选择的是8.0的版本,所以我们必须在连接数据库的url上设置上数据库时区,我们当前的时区是北京时区,但是在选择的时候,使用的是 Asia/Shanghai。不设置的话,数据库连接会失败。

<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>
    <property name="maxPoolSize" value="20"/>
    <property name="minPoolSize" value="5"/>
</bean>
  1. 读取mybatis-config.xml配置文件,datasource所指的是数据源,configLocation就是MyBatis的核心配置文件。
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
  1. 扫描Mapper的代理对象,这一步是为了完成对mybatis中映射文件的加载,basePackage是映射文件所在的包。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="mapper"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
  1. 配置sqlSessionTemplate对象,就是sqlSession的模板对象。
<bean name="template" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
  1. 配置事务管理,使用声明式事务,并且开启动态代理的功能。在配置中tx:method是各种通知配置。
<!-- spring整合mybatis步骤5:配置DataSourceTransactionMananger对象 需要指定属性:dataSource -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<!-- spring整合mybatis步骤5:使用xml完成事务的配置 -->
<aop:config>
    <aop:pointcut id="trPointcut" expression="execution(public * com.gxy.service.impl.*.*(..))"/>
    <aop:advisor advice-ref="myTx" pointcut-ref="trPointcut"/>
</aop:config>
<tx:advice id="myTx" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="delete*" read-only="false" isolation="SERIALIZABLE" propagation="REQUIRED"/>            
        <tx:method name="update*" read-only="false" isolation="SERIALIZABLE" propagation="REQUIRED"/>
        <tx:method name="insert*" read-only="false" isolation="SERIALIZABLE" propagation="REQUIRED"/>
        <tx:method name="select*" read-only="true" isolation="DEFAULT" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>
<!-- 注解aop的配置,必须开启代理,默认是false -->
<aop:aspectj-autoproxy expose-proxy="true"/>
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值