2 入门案例
2.1 开发环境
IDE: idea 2021
JDK:JDK8+
构建工具: maven 3.6.3
MySQL版本: MySQL 8.0
Spring Boot:2.7.6
MyBatis-Plus:3.5.1
2.2 创建数据库及表
创建数据库和表
CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTERSET utf8mb4 */; use `mybatis_plus`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名 ',
`age` int(11) DEFAULT NULL COMMENT '年龄 ',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱 ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加数据
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),(5, 'Billie', 24, 'test5@baomidou.com');
2.3 创建SpringBoot项目
-
使用 Spring Initializr 快速初始化一个 Spring Boot 工程。
-
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.6</version>
<relativePath/>
</parent>
<groupId>com.qcby</groupId>
<artifactId>MyBatisPlus1122</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MyBatisPlus1122</name>
<description>MyBatisPlus1122</description></project><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies>
3.idea中安装lombok插件
install安装

安装成功了

2.4 编写代码
-
配置application.yml文件
spring:
配置数据源信息
datasource:
# 配置数据源类型
type: com.zaxxer.hikari.HikariDataSource
# 配置连接数据库信息
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: '036520'
2.启动类
在Spring Boot启动类中添加@MapperScan注解,扫描mapper包

package com.qcby.mybatisplus1122;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.qcby.mybatisplus1122.mapper")
public class MyBatisPlus1122Application {
public static void main(String[] args) {
SpringApplication.run(MyBatisPlus1122Application.class, args);
}
}
3.添加实体类
package com.qcby.mybatisplus1122.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* lombok插件 省略实体类的声明操作
*/
@Data
@NoArgsConstructor //无参构造器
@AllArgsConstructor //有参构造器
//@Getter
//@Setter
//@TableName("user") //此注解用来设置该实体类所对应的表名
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
只有对项目进行编译(执行 "Build Project")后,Lombok 才会将 @Data 注解转换为实际的 getter、setter、equals、hashCode、toString 等方法,并体现在类结构或编译后的 class 文件中。
- 类结构页面查看
对应的快捷键有两种: - Ctrl + F12:会弹出一个类结构的悬浮窗口,可快速浏览和筛选类中的方法、属性等。

- Alt + 7:会打开一个独立的 "Structure" 工具窗口,展示当前类的完整结构。

- 编译后的class文件
在编译后的class文件中,可以看到Lombok 转换的 getter、setter、equals、hashCode、toString 等方法的具体实现。

-
添加Mapper
BaseMapper是MyBatis-Plus提供的模板mapper,其中包含了基本的CRUD方法,泛型为操作的 实体类型。package com.qcby.mybatisplus1122.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qcby.mybatisplus1122.entity.User;
import org.apache.ibatis.annotations.Mapper;//@Mapper
//@Repository
public interface UserMapper extends BaseMapper<User> {}
5.测试
@SpringBootTest
public class MybatisPlusTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelectList(){
//查询所有用户信息
//SELECT id,name,age,email FROM user
//selectList()根据MP内置的条件构造器查询一个list集合,null表示没有条件,即查询所有
userMapper.selectList(null).forEach(System.out::println);
}
}

注:
idea会在userMapper处报错,但是这个不影响重新的运行。

这是因为MyBatis/MyBatis-Plus 的Mapper接口,是MyBatis 在运行时动态生成代理类的(不是 Spring 直接管理的类)。而 IDEA 的代码检查是 "静态的"------ 它只看代码里有没有@Component/@Repository这类 Spring 注解,或者有没有显式的实现类。所以 IDEA 会误以为UserMapper没有被 Spring 管理(找不到实例),从而标红,但运行时 MyBatis 会把动态生成的代理类注册到 Spring 容器,所以实际能注入成功。
但是如果想消除注解有三个方法:
- 给UserMapper加@Repository注解
给Mapper接口加@Repository,IDEA 会认为 "这个接口是 Spring 的持久层组件",从而停止标红;但运行时 Spring 并不会真的实例化这个接口(因为接口不能直接实例化),实际还是 MyBatis 动态生成的代理类在工作。这是个 "让 IDEA 不报错" 的妥协方案,并不是@Repository的标准用法(标准用法是加在实现类上)。 - 同时加@Mapper+@MapperScan
这个需要同时加,只加一个还是会报错
这是IDEA 默认的代码检查规则导致的: - 只用@MapperScan(在启动类上):IDEA 默认不认识这个注解的作用,所以还是会认为Mapper接口没被 Spring 管理,标红。但它是加在启动类上的(启动类是 Spring 的核心配置类),idea会感知到这个注解指向的包 "属于 Spring 管理的范围";
- 只用@Mapper:给接口本身加了 MyBatis 的标记,但部分 IDEA 版本对@Mapper的支持不足(没识别到这是 MyBatis 的注解),所以标红;
- 两个一起用:IDEA 会觉得 "这个接口既被 MyBatis 标记,又被 Spring 启动类扫描,应该是被管理的",于是停止标红 ------并不是 IDEA 真的理解了@MapperScan,而是两个注解的信号让它 "放弃了检查"。
- 安装MybatisX插件
这个插件是专门适配 MyBatis/MyBatis-Plus 的 IDEA 插件,主要解决 "IDEA 静态检查和 MyBatis 动态代理不兼容" 的问题,功能包括: - 消除Mapper接口注入的标红(即使只加@MapperScan,IDEA 也能识别到 "这个接口是 MyBatis 管理的");

- 支持Mapper接口和 XML 文件之间的 "跳转"(点接口方法直接到 XML 的 SQL,点 XML 的 SQL 直接到接口);
点小鸟就可以跳到xml,Ctrl+鼠标左键,可以选择跳到哪里。在xml中点蓝色小鸟可以调回Mapper接口

- 自动提示Mapper接口的方法、XML 的 SQL 标签(像 JPA 一样智能补全);
- 集成代码生成器(可视化生成Mapper、实体类、XML)。
安装:

如果右键项目 → Maven/Gradle → Reload Project或者Invalidate Caches 等方法都已经试过了,还标红,这是因为MyBatisX 插件是 "优化" 这个问题,但不是所有场景都能 100% 消除误报。
-
添加日志
在application.yml中配置日志输出配置MyBatis日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
