MyBatis-Plus快速上手

博主主页: 码农派大星.

数据结构专栏 :Java数据结构

数据库专栏: MySQL数据库

JavaEE专栏: JavaEE

软件测试专栏 :软件测试

关注博主带你了解更多知识

目录

[1. MyBatis-Plus介绍](#1. MyBatis-Plus介绍)

[2. 快速上⼿](#2. 快速上⼿)

[2.1 添加MyBatis-Plus和MySQL依赖,配置数据库连接信息](#2.1 添加MyBatis-Plus和MySQL依赖,配置数据库连接信息)

[2.2 编码](#2.2 编码)

创建实体类UserInfo

编写Mapper接⼝类

[2.3 常⻅注解](#2.3 常⻅注解)

@TableName

@TableField

@TableId

[2.4 打印⽇志](#2.4 打印⽇志)

[3. MyBatis-Plus复杂操作](#3. MyBatis-Plus复杂操作)

条件构造器

[3.1 QueryWrapper](#3.1 QueryWrapper)

[3.2 UpdateWrapper](#3.2 UpdateWrapper)

1. MyBatis-Plus介绍

MyBatis-Plus是⼀个 MyBatis 的增强⼯具, 在 MyBatis 的基础上只做增强不做改变, 为简化开发. 提⾼效率⽽⽣

⽀持数据库:

PostgreSQL, MySQL, MariaDB, Oracle, SQL Server, OceanBase, H2, DB2... 任何能使⽤MyBatis进⾏增删改查,并且⽀持标准SQL的数据库应该都在MyBatis-Plus的⽀持范围

2. 快速上⼿

2.1 添加MyBatis-Plus和MySQL依赖,配置数据库连接信息

Spring Boot

复制代码
 <dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
 <version>3.5.5</version>
 </dependency>

MySQL

复制代码
 <dependency>
 <groupId>com.mysql</groupId>
 <artifactId>mysql-connector-j</artifactId>
 <scope>runtime</scope>
 </dependency>

配置连接数据库

application.yml⽂件

复制代码
 # 数据库连接配置
 
spring:
 datasource:
 url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
 characterEncoding=utf8&useSSL=false
 username: root
 password: root
 driver-class-name: com.mysql.cj.jdbc.Drive

2.2 编码

MybatisPlus提供了⼀个基础的 BaseMapper 接⼝,已经实现了单表的CRUD,我们⾃定义的 Mapper只需要继承这个BaseMapper,就⽆需⾃⼰实现单表CRUD

创建实体类UserInfo

实 体类的属性名与表中的字段名⼀⼀对应

编写Mapper接⼝类

2.3 常⻅注解

MyBatis是如何知道,我们要操作的是哪张表,表⾥有哪些字段呢?

复制代码
@Mapper
public interface UserinfoMapper extends BaseMapper<UserInfo> {


}

UserInfoMapper 在继承 BaseMapper 时,指定了⼀个泛型,这个UserInfo就是与数据库表相对应的实

MyBatis-Plus会根据这个实体类来推断表的信息.

默认情况下:

  1. 表名:实体类的驼峰表⽰法转换成蛇形表⽰法(下划线分割),作为表名.⽐如UserInfo->user_info

  2. 字段:根据实体类的属性名转换为蛇形表⽰法作为字段名.⽐如deleteFlag->delete_flag

  3. 主键:默认为id

那如果实体类和数据库不是按照上述规则定义的呢?MyBatis-Plus也给我们提供了⼀下注解,让我们标 识表的信息

@TableName

从⽇志可以看到,默认查找的表名为userinfo.

我们可以通过 @TableName 来标识实体类对应的表

修改实体类名Userinfo为user_info,重新执⾏测试⽅法

复制代码
@Data

@TableName("user_info")
public class Userinfo {
 private Integer id;
 private String username;
 private String password;
 private Integer age;
 private Integer gender;
 private String phone;
 private Integer deleteFlag;
 private Date createTime;
 private Date updateTime;
}

@TableField

我们可以通过 @TableField 来标识对应的字段名

修改属性名deleteflag为delete_flag,重新执⾏测试⽅法

复制代码
@Data
@TableName("user_info")

public class Userinfo {
 private Integer id;
 private String username;
 private String password;
 private Integer age;
 private Integer gender;
 private String phone;

 @TableField("delete_flag")
 private Integer deleteflag;
 private Date createTime;
 private Date updateTime;
}

@TableId

我们可以通过 @TableId 来指定对应的主键

修改属性名userId为id

复制代码
@Data

@TableName("user_info")
public class Userinfo {

 @TableId("id")
 private Integer userId;
 private String username;
 private String password;
 private Integer age;
 private Integer gender;
 private String phone;

再次运⾏程序,程序运⾏结果正常

2.4 打印⽇志

Mybatis-Plus配置⽇志如下:

复制代码
mybatis-plus:
 configuration: # 配置打印 MyBatis⽇志 
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3. MyBatis-Plus复杂操作

条件构造器

QueryWrapper:⽤于构造查询条件,在AbstractWrapper的基础上拓展了⼀个select⽅法,允许指 定查询字段

UpdateWrapper:⽤于构造更新条件,可以在更新数据时指定条件

3.1 QueryWrapper

QueryWrapper并不只⽤于查询语句,⽆论是修改,删除,查询,都可以使⽤QueryWrapper来构建查询条件.

如何完成如下sql语句查询呢

复制代码
SELECT id,username,password,age FROM user_info WHERE age = 18 AND username 
"%min%"

测试如下:

复制代码
    @Autowired
    private UserinfoMapper userinfoMapper;

    @Test
    void SelectByWrapper(){
        QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("username","password","gender")
                        .eq("age",18)
                        .like("username","min");
        userinfoMapper.selectList(queryWrapper).forEach(System.out::println);
    }

lt :"less than" 的缩写,表⽰⼩于.

le :"lessthanorequalto"的缩写,表⽰⼩于等于

ge :"greaterthanorequalto"的缩写,表⽰⼤于等于.

gt :"greaterthan"的缩写,表⽰⼤于.

eq :"equals"的缩写,表⽰等于.

ne :"notequals"的缩写,表⽰不等于

3.2 UpdateWrapper

对于更新,我们也可以直接使⽤UpdateWrapper,在不创建实体对象的情况下,直接设置更新字段和条 件

完成下列sql修改

复制代码
 UPDATE user_info SET delete_flag=0, age=5 WHERE id IN (2,3)

 @Test
    void updateByWrapper() {
        UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
        updateWrapper.set("delete_flag",0).set("age",5).in("id", List.of(2,3));
        userinfoMapper.update(updateWrapper);
    }
相关推荐
圈圈编码9 分钟前
Spring Task 定时任务
java·前端·spring
俏布斯21 分钟前
算法日常记录
java·算法·leetcode
276695829226 分钟前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
爱的叹息27 分钟前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
程序猿chen37 分钟前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
松韬1 小时前
Spring + Redisson:从 0 到 1 搭建高可用分布式缓存系统
java·redis·分布式·spring·缓存
绝顶少年1 小时前
Spring Boot 注解:深度解析与应用场景
java·spring boot·后端
心灵宝贝1 小时前
Tomcat 部署 Jenkins.war 详细教程(含常见问题解决)
java·tomcat·jenkins
天上掉下来个程小白1 小时前
Redis-14.在Java中操作Redis-Spring Data Redis使用方式-操作列表类型的数据
java·redis·spring·springboot·苍穹外卖
ゞ 正在缓冲99%…2 小时前
leetcode22.括号生成
java·算法·leetcode·回溯