mybatisplus入门案例

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项目

  1. 使用 Spring Initializr 快速初始化一个 Spring Boot 工程。

  2. 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>

    复制代码
     <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>
    </project>

3.idea中安装lombok插件

install安装

安装成功了

2.4 编写代码

  1. 配置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 等方法的具体实现。
  1. 添加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% 消除误报。
  1. 添加日志
    在application.yml中配置日志输出

    配置MyBatis日志

    mybatis-plus:
    configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

相关推荐
ZePingPingZe2 小时前
DriverManager、DataSource、数据库驱动以及数据库连接池的关系
android·数据库·adb
Loiioฅ2 小时前
ctfshow-web入门-sql注入-171-186
数据库·sql
思成不止于此3 小时前
【MySQL 零基础入门】DML 核心语法全解析:表数据的增删改操作篇
数据库·笔记·sql·学习·mysql
yy17962610013 小时前
mysql基本结构及操作
数据库
todoitbo3 小时前
时序数据库选型实战指南:国产时序数据库Apache IoTDB的技术对比与实践
数据库·apache·时序数据库·iotdb·国产
赵渝强老师3 小时前
【赵渝强老师】TiDB的备份恢复策略
数据库·mysql·oracle·tidb
Ditglu.3 小时前
数据库运维(DBA)职业能力提升知识库
运维·数据库·dba
黛琳ghz3 小时前
机密计算与安全容器:openEuler安全生态深度测评
服务器·数据库·安全·计算机·操作系统·openeuler
小清兔4 小时前
一个unity中URP的环境下旋转天空盒的脚本(RotationSky)
开发语言·数据库·学习·程序人生·unity·c#·游戏引擎