本章在前几章的基础之上将介绍 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%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
# mybatis 配置
mybatis:
# 别名配置
type-aliases-package: com.ruoyi.system
# 映射文件位置配置
mapper-locations: classpath*:mapper/**/*.xml
这一步主要是配置 数据库连接,和 Mybatis 的配置
配置包扫描
在主程序类上添加 @MapperScan 注解扫描 Mapper接口文件
@MapperScan("com.ruoyi.system.mapper")
@EnableDiscoveryClient
@SpringBootApplication
public class RuoYiSystemApplication {
实体类
package com.ruoyi.system.api.domain;
import lombok.Data;
import java.io.Serializable;
@Data
public 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 mapper
PUBLIC "-//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.email
from 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;
@SpringBootTest
public class SysUserMapperTest {
@Autowired
SysUserMapper userMapper;
@Test
public 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 代码片段: