SpringBoot2整合MyBatis

  • Post author:
  • Post category:其他




前言

在整合MyBatis之前,我们要准备哪些工作:



导入mysql场景:

```xml
<!--SpringBoot对mysql有版本仲裁,博主当前是SpringBoot2.6.6,mysql仲裁版本如下 -->
<mysql.version>8.0.28</mysql.version>
<!--大家也可自行查看自己的版本号 -->
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <mysql.version>8.0.28</mysql.version> <!--使用默认版本,不需要配version -->
</dependency>

想要修改版本

1、直接依赖引入具体版本(maven的就近原则)

2、重新声明版本(maven的属性的就近原则)

<java.version>1.8</java.version>

<mysql.version>8.0.28</mysql.version>

“`



配置文件修改:

```yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/user 
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
# 如果是mysql8以上版本,请使用下面配置:
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/hunnu?characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 123456 
```



1.导入Mybatis的starter(场景启动器)

<!--mybatis场景-->   
<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
</dependency>
注意:mybatis的场景包含了jdbc的依赖,所以不需要再次导入了
<!--jdbc场景 -->   
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
注:如果是使用 Spring Initilizr(项目初始化向导)来搭建的话,可在创建项目时就可以选中Mybatis的开发场景以及jdbc场景,系统会自动依赖引入。

在这里插入图片描述

导入了Mybatis的场景之后,我们会发现它给我们自动导入了:

在这里插入图片描述



2.Mybatis的自动配置(内含源码解析,初学者可跳过直接使用)

如果是以前使用SSM框架整合MyBatis时,避免不了要写一大推的代码编写Mybatis的核心配置文件啊,SqlSessionFactory以及SqlSession等等之类的东西。总体来说,相当地复杂。但是现在有了SpringBoot (博主的SpringBoot版本:2.6.6)的话,很多的配置都由SpringBoot已经封装好了,节省了很多编写程序的时间。

SpringBoot自动配置好了:

  • 全局配置文件

    application.yml
  • 自动配置好了

    SqlSessionFactory
  • 底层自动配置了

    SqlSessionTemplate



    SqlSessionTemplate

    组合了

    SqlSession
  • 主要我们写的Mybatis的接口标注了@Mapper注解就会被SpringBoot自动扫描进来。

我们可以CTRL+N 查找类:MybatisAutoConfiguration (mybatis的自动配置类)可以看到以下内容:

@EnableConfigurationProperties({MybatisProperties.class}) //mybatis配置项绑定类
@AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class})
public class MybatisAutoConfiguration implements InitializingBean {



//然后CTRL+左键进入到MybatisProperties.class中发现以下内容:
@ConfigurationProperties(
    prefix = "mybatis"
)
public class MybatisProperties {}

看到这里,我们发现了 prefix=“mybatis”,然后MybatisProperties又是mybatis配置项绑定类,也就是说我们在application.yml(配置文件)中写了以**“mybatis”**为前缀的配置项都是属于mybatis的配置!!!



3.XMl配置模式 (方式一)

我们可以在配置文件中修改mybatis的配置,来定义mybatis的全局配置文件的位置和sql映射文件位置:

# 配置mybatis规则
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml  #全局配置文件位置
  mapper-locations: classpath:mybatis/mapper/*.xml  #sql映射文件位置

然后在

resource

目录下创建

mybatis/mapper/UserPapper.xml

并写入:

<?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">
<!--namespace:命名空间,值为你的Mapper接口的全类名 -->        
<mapper namespace="com.atguigu.admin.mapper.AccountMapper">
<!-- 里面写的就是Mapper接口绑定到xml的sql映射语句 -->
</mapper>

注:这里有个很重要问题,就是为什么博主没有写mybatis的全局配置文件呢?

其实在上面

Mybatis的自动配置

里面说的

MybatisProperties

类中有一个属性叫private Configuration configuration:

在这里插入图片描述

也就是说我们只需修改application.yml(配置文件)中以”mybatis.configuration”为前缀的下面的所有,就是相当于修改mybatis的全局配置文件中的值!!

# 配置mybatis规则
mybatis:
#  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true
    
 可以不写全局配置文件,所有全局配置文件的配置都放在mybatis.configuration配置项中即可

总体流程:

  • 导入mybatis官方starter

  • 编写mapper接口。标准@Mapper注解

  • 编写sql映射文件并绑定mapper接口

  • 在application.yml中指定Mapper配置文件的位置,以及指定全局配置文件的信息(

    推荐配置在mybatis.configuration



4.注解方式(方式二)

使用注解可以省去mybatis的全局配置文件

mybatis-config.xml



xml

的sql映射文件。

示例代码如下:


pojo:

@Data
public class User {
    private int id;
    private String name;
    private int age;
    private String email;
    
}


mapper(dao):

@Mapper
public interface UserMapper {

    @Select("select * from user where id=#{id}")
    public Singer getUser(int id);
    
}


controller:

    @ResponseBody
    @RequestMapping("/getUser")
    public User getUser(@RequestParam("id")int id){
        User user =  userMapper.getUser(id);
        return user;
    }

结果:

在这里插入图片描述



5.混合模式 (最佳方式)

在实际生产开发中,最佳方式是

xml配置方式



注解方式

混合使用。


最佳实战:

  • 引入mybatis-starter的场景启动器
  • 配置application.yml中,指定mapper-location位置即可
  • 编写Mapper接口并标注

    @Mapper

    注解 (如果觉得每次写接口都要标注

    @Mapper

    这样很麻烦,在springboot主程序启动类中配置

    @MapperScan(“指定要扫描的位置”)

    )
  • 简单方法直接注解方式
  • 复杂方法编写mapper.xml进行绑定映射



版权声明:本文为maogenb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。