mp总结 mybatisPlus

一、准备

1.引入依赖(引入后可以不再引mybatis依赖)

复制代码
<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.4.2</version>
</dependency>

2.在mapper和services上继承mp

mapper: extends BaseMapper<User>(泛型为对应的实体类)

services:

启动类上加上扫描@MapperScan("com.xxxde.mp.mapper")

3.常用配置

二、常用注解

1.原理与约定

mp的原理是基于反射得到实体类的字节码,从而得到数据库中表的字段一般mp对实体类的约定:

类名驼峰转下划线作为表名

名为id的字段作为主键

变量名驼峰转下划线作为表的字段名

2.常用注解

@TableName:用来指定表名

@Tableld:用来指定表中的主键字段信息

@TableField:用来指定表中的普通字段信息

2.1示例

复制代码
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")
public class Users {

     //用户id
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;

    // 用户名
    @TableField("username")
    private String username;

    // 状态
    @TableField("is_married")
    private boolean isMarried;

    @TableField("`order`")
    private Integer order;

    //不是数据库字段
    @TableField(exist = false)
    private String password;



}

2.2解释

IdType枚举

AUTO:数据库自增长

INPUT:通过set方法自行输入

ASSIGN_ID:分配lD,接口ldentifierGenerator的方法nextld来生成id默认实现类为DefaultldentifierGenerator雪花算法

使用@TableField的常见场景:

成员变量名与数据库字段名不一致

成员变量名以is开头,且是布尔值

成员变量名与数据库关键字冲突

成员变量不是数据库字段

三、条件构造器

1.QueryWrapper

(除了新增,其他的都可以用这个进行条件构造)

示例

复制代码
 @Test
    void tesQueryRupper() {
        //1.构造查询条件 select id,username,info,balance from user where username like ? and balance>?
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .select("id","username","info","balance")
                .like("username","o")
                .ge("balance",1000);
        //2.查询
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

 @Test
    void tesUpdateQueryWrapper() {
        //1.要更新的数据  update user set balance=2000 where username="jack"
        User user = new User();
        user.setBalance(2000);
        //2.更新的条件
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .eq("username","jack");
        //3.执行更新
        userMapper.update(user,wrapper);
    }

  @Test
    void tesUpdate() {
       List<Long> ids=List.of(1L,2L,4L);
        UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
                .setSql("balance = balance- 200")
                        .in("ids",ids);

        //3.执行更新 update user set balance = balance- 200 where id in(1,2,4)
        userMapper.update(null,wrapper);
    }

2.自定义SQL

利用wrapper构建where条件mp

四、services接口

自己的services接口继承 IService<User>泛型是对应的实体

自己的services接口的实现类 继承ServicesImpl<UserMapper,User>

1. IService的Lambda查询

表格的条件查询

2.IService的Lambda更新

3.IService的Lambda批量新增

在mp的配置中加入配置&rewriteBatchedStatements=true,开启预编译,让所有语句变成一条,提高效率

五、mp的扩展功能

1.Db静态工具

当在一个services中使用另一个services,另一个也要使用这个services,这样就会出现循环依赖,而静态工具就能解决

2.逻辑删除

如 用户删除商品的订单时采用逻辑删除,这样商家可以进行分析和统计

实现:在表中添加一个字段进行区分标记

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

3.枚举处理器

java中的枚举与数据库类型的转换

定义一个枚举类在与要进行对应的项上加上 @EnumValue

枚举类

实体类

在配置文件中加入配置

复制代码
mybatis-plus:
      configuration:
        default-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler

4.JSON处理器

数据库中表的字段类型时JSON格式,对应的实体是String

在实体上加入@TableName("user",autoResultMap = true)

对应的字段上加入

复制代码
@TableField(value = "info",typeHandler = JacksonTypeHandler.class)

六、mp分页插件

使用 首先定义一个配置类注册插件

使用

相关推荐
A-刘晨阳6 小时前
AI原生时序数据库选型指南:从数据存储到智能决策的范式跃迁
数据库·时序数据库·ai-native
whinc7 小时前
Rust技术周刊 2026年第17周
后端·rust
whinc7 小时前
Rust技术周刊 2026年第18周
后端·rust
xqqxqxxq7 小时前
Java AI智能P图工具技术笔记
java·人工智能·笔记
whinc7 小时前
Rust技术周刊 2026年第16周
后端·rust
HalvmånEver7 小时前
MySQL的增删改查命令合集合集
数据库·sql·oracle
谷雨不太卷7 小时前
进程的状态码
java·前端·算法
jieyucx7 小时前
Go语言深度解剖:Map扩容机制全解析(增量扩容+等量扩容+渐进式迁移)
开发语言·后端·golang·map·扩容策略
顾温7 小时前
default——C#/C++
java·c++·c#
空中海7 小时前
02 ArkTS 语言与工程规范
java·前端·spring