前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 框架学习(九)---- Spring 整合 Mybatis 框架

Spring 框架学习(九)---- Spring 整合 Mybatis 框架

作者头像
RAIN7
发布2022-07-09 13:05:49
8380
发布2022-07-09 13:05:49
举报
文章被收录于专栏:RAIN7 de 编程之路

Spring 框架学习(九)---- 整合 Mybatis 框架

一、整合 Mybatis的过程

不管在整合前还是整合后,sqlSessionFactory都是非常重要的(mybatis的核心)

整合前

mybatis-config.xml配置文件 -> sqlSessionFactory ->sqlSession

整合后

sqlSessionFactory(通过注入内部包含了各种核心配置) ->sqlSessionTemplate

sqlSessionFactory 是通过构造器注入的方式注入到SqlSession中的,因为源码中没有set方法

我们在实现类中构造sqlSession的时候,需要使用构造器的方式注入该属性。

接口与映射的xml文件时通过SqlSessionFactory进行绑定的

二、Spring 整合 Mybatis导入的依赖

  整合前把spring-webmvc spring的一套全部导入,防止之后还有导入其他的spring依赖,下面是还需要导入的

注意mybatis 的版本和 spring的版本得匹配

(1)Mybatis 依赖(未整合spring)

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

(2)mybatis-spring 整合相关的jar包

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
</dependency>

(3)spring相关依赖

spring-jdbc提供驱动以及数据源

代码语言:javascript
复制
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

spring环境

代码语言:javascript
复制
<dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.18</version>
        </dependency>

spring 的事务相关的依赖

代码语言:javascript
复制
 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

(4)MySQL数据库的驱动jar包

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>

(5)mybatis数据源的内容

xml格式

代码语言:javascript
复制
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
 <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=GMT"/>
 <property name="username" value="root"/>
 <property name="password" value="123456"/>

properties格式

代码语言:javascript
复制
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
username=root
password=123456

三、Spring 整合 Mybatis 方式一

(1)注册数据源(使用DriverManageDataSource),使用SqlSessionFactory完全替代mybatis-config 核心配置文件,注册sqlSessionTemplate将SqlSessionFactory通过构造器注入。

  • 通过数据源使得spring、mybatis连接数据库
  • SqlSessionFactory,使用SqlSessionFactoryBean类 作为mybatis的替代,所有的mybatis核心配置都注入到其中
  • SqlSessionTemplate ,就是之前我们使用的SqlSession,程序员或者用户在调用sql代码时得使用sqlSession
  • SqlSessionFactory只能通过构造器注入 注入到 SqlSessionTemplate,底层没有set方法,只有构造方法。
代码语言:javascript
复制
<!--    数据源一般是固定代码-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=GMT"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--     完全替代了配置文件-->
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath:com/bit/mapper/UserMapper.xml"/>
</bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory"/>
    </bean>

(2)Mappepr层接口定义方法

代码语言:javascript
复制
package com.bit.mapper;
import com.bit.pojo.User;
import java.util.List;

public interface UserMapper {
    List<User> selectAll();
}

(3)与接口绑定的xml配置文件,实现具体的方法

代码语言:javascript
复制
<?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="com.bit.mapper.UserMapper">
    <select id="selectAll" resultType="com.bit.pojo.User">
          select * from user;
    </select>
</mapper>

(4)自定义一个类实现接口,注入了SqlSessionTemplate,在类中将方法使用SqlSessionTemplate进行调用,用户在使用的时候就不需要创建SqlSessionTemplate了

代码语言:javascript
复制
package com.bit.mapper;
import com.bit.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class UserMapperImpl implements UserMapper{

    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;
 
 // 通过 @Autowired进行注入,反射原理,set方法不需要写
 // 根据类型能在配置文件中查找到SqlSessionTemplate,然后在配置文件中注入SqlSessionFactory
 
    public List<User> selectAll() {
        UserMapper userMapper = sqlSessionTemplate.getMapper(UserMapper.class);
        return userMapper.selectAll();
    }
    
    // 相当于对方法封装了一层,用户在使用的时候可以直接调用,不需要再创建SqlSession
}

四、Spring 整合 Mybatis 方式二

第二种整合方式,和第一种没有本质区别

  实现类继承sqlSessionDapSupport,相当于这个类对sqlSessionTemplate 又封装了一次,我们不需要注入SqlSessionTemplate了,可以继承之后直接调用父类的getSession方法拿到SqlSessionTemplate

  同时继承的sqlSessionDaoSupport 得在配置文件中将 SqlSessionFactory 装配作为属性,之后的效果就和sqlSession差不多

  要给实现类的父类注入sqlSessionFactort的属性,之后实现类就能达到调用自身方法就可拿到SqlSessiontemplate,不需要SqlSessionTemplate的注入装配了

(1)给实现接口的类的父类DaoSupport进行注入属性,注入SqlSessionFactory

代码语言:javascript
复制
    <bean id="userMapperImpl" class="com.bit.mapper.UserMapperImpl" >
<!--        实现类的父类daoSupport需要注入sqlSessionFactory,然后daoSupport的作用就和SqlSession差不多,不需要sqlSession注入以及装配了-->
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

(2)实现接口的自定义类继承SqlSessionDaoSupport类,之后调用getSession方法获取SqlSession,通过sqlSession调用方法返回

代码语言:javascript
复制
package com.bit.mapper;
import com.bit.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;


public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{

    public List<User> selectAll() {
       return getSqlSession().getMapper(UserMapper.class).selectAll();
    }
}

五、总结

最后其实本质都是一样的,第一种更接近整合的原本流程,我们要好好记住

1、注册数据源(datasource)

2、注册sqlSessionFactory,作为myabatis-config.xml的替代,在里面注入内容(数据源、注册mapper、别名等)

3、注册sqlSessionTemplate,将sqlSessionFactory通过构造器注入

4、自定义类实现接口,将SqlSessionTemplate注入进行调用方法

此时已经整合成功了

5、程序员在使用的时候,为了不用每次都创建sqlSession,在接口之外创建接口的实现类,注册实现类,在实现类中调用注入sqlSessionTemplate,然后通过sqlSession调用接口的方法

整合之后的效果

  • 使用spring的配置文件彻底代替了mybatis的配置文件,
  • 不需要每次在测试的时候都使用工具类进行创建sqlSession
  • spring整合 mybatis之后,事务默认是自动提交的,不需要openSession(ture)手动开启事务。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring 框架学习(九)---- 整合 Mybatis 框架
  • 一、整合 Mybatis的过程
  • 二、Spring 整合 Mybatis导入的依赖
    • (1)Mybatis 依赖(未整合spring)
      • (2)mybatis-spring 整合相关的jar包
        • (3)spring相关依赖
          • (4)MySQL数据库的驱动jar包
            • (5)mybatis数据源的内容
            • 三、Spring 整合 Mybatis 方式一
            • 四、Spring 整合 Mybatis 方式二
            • 五、总结
            相关产品与服务
            云数据库 MySQL
            腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档