本章在前几章的基础之上将介绍 SpringBoot 整合 Mybatis。
配置Idea连接MySQL数据库
使用 idea 内置的工具连接上mysql,到后面我们写 Mapper文件时候,对于那些表名,字段名,会有很好的提示
新建MySQL连接
配置MySQL连接基本信息

URL内容:
jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
URL中注意配置时区
插件
选装
为了我们写代码的时候,在Mapper接口与 Mapper文件来回切换比较方便。推荐安装 MybatisX 插件
整合Mybatis
引入依赖
一个是 mybatis 整合依赖,一个是 mysql 连接数据库的依赖
<!-- 整合 MyBatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
版本号声明
mybatis 整合的依赖不是 SpringBoot 官网提供的,因此需要写版本号
在 父工程中声明版本号
<properties><spring-boot.mybatis>2.1.3</spring-boot.mybatis></properties><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${spring-boot.mybatis}</version></dependency>
编写配置文件
在之前的章节中,我们已经选用 nacos 作为配置中心,因此我们的配置将不再写入项目的 application.yml 文件中,而是写到 nacos 配置中心。
上一章我们已经在 nacos 控制台中创建一个配置,Data Id 为 ruoyi-system-dev.yml ,我们编辑这个文件
新增如下内容:
# 数据库连接基本信息spring:datasource:url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456# mybatis 配置mybatis:# 别名配置type-aliases-package: com.ruoyi.system# 映射文件位置配置mapper-locations: classpath*:mapper/**/*.xml
这一步主要是配置 数据库连接,和 Mybatis 的配置
配置包扫描
在主程序类上添加 @MapperScan 注解扫描 Mapper接口文件
@MapperScan("com.ruoyi.system.mapper")@EnableDiscoveryClient@SpringBootApplicationpublic class RuoYiSystemApplication {
实体类
package com.ruoyi.system.api.domain;import lombok.Data;import java.io.Serializable;@Datapublic class SysUser implements Serializable {private static final long serialVersionUID = 1L;private Long userId;private String userName;private String nickName;private String email;}
Mapper接口类
package com.ruoyi.system.mapper;import com.ruoyi.system.api.domain.SysUser;public interface SysUserMapper {public SysUser selectUserByUserName(String userName);}
映射描述文件
在 resource/mapper/system 目录下, 创建 SysUserMapper.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.ruoyi.system.mapper.SysUserMapper"><resultMap type="sysUser" id="SysUserResult"><id property="userId" column="user_id" /><result property="userName" column="user_name" /><result property="nickName" column="nick_name" /><result property="email" column="email" /></resultMap><sql id="selectUserVo">select u.user_id, u.user_name, u.nick_name, u.emailfrom sys_user u</sql><select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult"><include refid="selectUserVo"/>where u.user_name = #{userName}</select></mapper>
测试
引入测试依赖
<!-- 整合测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
测试类
package com.ruoyi.system.mapper;import com.ruoyi.system.api.domain.SysUser;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestpublic class SysUserMapperTest {@AutowiredSysUserMapper userMapper;@Testpublic void selectUserByUserName() {SysUser user = userMapper.selectUserByUserName("ry");System.out.println(user);}}
测试结果
Mybatis知识点介绍
别名配置
在 application.yml 文件中添加如下配置以后,在映射描述文件中就可以不要写类的全名(即包名+类名)
映射描述文件位置配置
即告诉Spring,我们的映射描述文件放在什么位置
tips: 路径中的 /* 表示可能有多层文件夹, /.xml 表示已xml结尾的文件

tips: 注意这里创建文件夹的时候,是先创建mapper文件夹,然后在mapper文件夹下面再创建system文件夹。不要直接创建 mapper.system。之前犯过这个错误,查了好半天。
mapper接口与映射描述文件一一对应
映射描述文件中的 namespace 是用来指定 mapper接口的,当我们按住 ctrl 键 然后把鼠标移动到 namespace 路径上,鼠标变成手势可以点击过去链接到接口,则说明我们的 mapper接口与映射描述文件对应上了
mapper接口中的方法与映射描述文件中的语句一一对应


如果装了 Mybatix 插件,还可以看到一个小图标,点击这个小图标也可以连接过去
结果集映射
当类的属性名称和表中的字段名不一致的时候,例如类中使用的是驼峰命名,而表中使用的是下划线_ 命名,那我们可以使用结果集映射来解决这个问题
SQL代码片段
当我们在编写映射描述文件的时候,有些重复的语句在很多地方都用到,如果每个地方都写一份,那修改起来也不方便。此时我们可以使用SQL 片段来解决这个问题
定义SQL 片段
引用 SQL 代码片段:
