本章在前几章的基础之上将介绍 SpringBoot 整合 Mybatis。

配置Idea连接MySQL数据库

使用 idea 内置的工具连接上mysql,到后面我们写 Mapper文件时候,对于那些表名,字段名,会有很好的提示

新建MySQL连接

image.png

配置MySQL连接基本信息

image.png
URL内容:

  1. jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8

URL中注意配置时区

插件

选装

为了我们写代码的时候,在Mapper接口与 Mapper文件来回切换比较方便。推荐安装 MybatisX 插件

整合Mybatis

引入依赖

一个是 mybatis 整合依赖,一个是 mysql 连接数据库的依赖

  1. <!-- 整合 MyBatis-->
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.projectlombok</groupId>
  12. <artifactId>lombok</artifactId>
  13. </dependency>

版本号声明

mybatis 整合的依赖不是 SpringBoot 官网提供的,因此需要写版本号
在 父工程中声明版本号

  1. <properties>
  2. <spring-boot.mybatis>2.1.3</spring-boot.mybatis>
  3. </properties>
  4. <dependency>
  5. <groupId>org.mybatis.spring.boot</groupId>
  6. <artifactId>mybatis-spring-boot-starter</artifactId>
  7. <version>${spring-boot.mybatis}</version>
  8. </dependency>

编写配置文件

在之前的章节中,我们已经选用 nacos 作为配置中心,因此我们的配置将不再写入项目的 application.yml 文件中,而是写到 nacos 配置中心。
上一章我们已经在 nacos 控制台中创建一个配置,Data Id 为 ruoyi-system-dev.yml ,我们编辑这个文件
新增如下内容:

  1. # 数据库连接基本信息
  2. spring:
  3. datasource:
  4. url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
  5. driver-class-name: com.mysql.cj.jdbc.Driver
  6. username: root
  7. password: 123456
  8. # mybatis 配置
  9. mybatis:
  10. # 别名配置
  11. type-aliases-package: com.ruoyi.system
  12. # 映射文件位置配置
  13. mapper-locations: classpath*:mapper/**/*.xml

这一步主要是配置 数据库连接,和 Mybatis 的配置

配置包扫描

在主程序类上添加 @MapperScan 注解扫描 Mapper接口文件

  1. @MapperScan("com.ruoyi.system.mapper")
  2. @EnableDiscoveryClient
  3. @SpringBootApplication
  4. public class RuoYiSystemApplication {

实体类

  1. package com.ruoyi.system.api.domain;
  2. import lombok.Data;
  3. import java.io.Serializable;
  4. @Data
  5. public class SysUser implements Serializable {
  6. private static final long serialVersionUID = 1L;
  7. private Long userId;
  8. private String userName;
  9. private String nickName;
  10. private String email;
  11. }

Mapper接口类

  1. package com.ruoyi.system.mapper;
  2. import com.ruoyi.system.api.domain.SysUser;
  3. public interface SysUserMapper {
  4. public SysUser selectUserByUserName(String userName);
  5. }

映射描述文件

在 resource/mapper/system 目录下, 创建 SysUserMapper.xml 文件,内容如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.ruoyi.system.mapper.SysUserMapper">
  6. <resultMap type="sysUser" id="SysUserResult">
  7. <id property="userId" column="user_id" />
  8. <result property="userName" column="user_name" />
  9. <result property="nickName" column="nick_name" />
  10. <result property="email" column="email" />
  11. </resultMap>
  12. <sql id="selectUserVo">
  13. select u.user_id, u.user_name, u.nick_name, u.email
  14. from sys_user u
  15. </sql>
  16. <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
  17. <include refid="selectUserVo"/>
  18. where u.user_name = #{userName}
  19. </select>
  20. </mapper>

测试

引入测试依赖

  1. <!-- 整合测试-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-test</artifactId>
  5. <scope>test</scope>
  6. </dependency>

测试类

  1. package com.ruoyi.system.mapper;
  2. import com.ruoyi.system.api.domain.SysUser;
  3. import org.junit.jupiter.api.Test;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. @SpringBootTest
  7. public class SysUserMapperTest {
  8. @Autowired
  9. SysUserMapper userMapper;
  10. @Test
  11. public void selectUserByUserName() {
  12. SysUser user = userMapper.selectUserByUserName("ry");
  13. System.out.println(user);
  14. }
  15. }

测试结果

image.png

Mybatis知识点介绍

别名配置

在 application.yml 文件中添加如下配置以后,在映射描述文件中就可以不要写类的全名(即包名+类名)
image.png
image.png

映射描述文件位置配置

即告诉Spring,我们的映射描述文件放在什么位置
image.png

tips: 路径中的 /* 表示可能有多层文件夹, /.xml 表示已xml结尾的文件

image.png

tips: 注意这里创建文件夹的时候,是先创建mapper文件夹,然后在mapper文件夹下面再创建system文件夹。不要直接创建 mapper.system。之前犯过这个错误,查了好半天。

mapper接口与映射描述文件一一对应

映射描述文件中的 namespace 是用来指定 mapper接口的,当我们按住 ctrl 键 然后把鼠标移动到 namespace 路径上,鼠标变成手势可以点击过去链接到接口,则说明我们的 mapper接口与映射描述文件对应上了
image.png

mapper接口中的方法与映射描述文件中的语句一一对应

image.png
image.png
如果装了 Mybatix 插件,还可以看到一个小图标,点击这个小图标也可以连接过去
image.png

结果集映射

当类的属性名称和表中的字段名不一致的时候,例如类中使用的是驼峰命名,而表中使用的是下划线_ 命名,那我们可以使用结果集映射来解决这个问题
image.png

SQL代码片段

当我们在编写映射描述文件的时候,有些重复的语句在很多地方都用到,如果每个地方都写一份,那修改起来也不方便。此时我们可以使用SQL 片段来解决这个问题
定义SQL 片段
image.png
引用 SQL 代码片段:
image.png