01Mybatis-Plus基础篇

本文介绍了Mybatis-Plus(MP)的基础概念和使用步骤,包括自动填充、乐观锁、主键策略、Wrapper条件构造器对象、通用CRUD操作,以及SQL注入原理。MP是一个MyBatis的增强工具,提供了丰富的CRUD操作,如自动填充字段、乐观锁机制、主键生成策略,并支持灵活的查询条件构造。
摘要由CSDN通过智能技术生成

1. 概述

1.1 什么是Mybatis-Plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

官网:https://mybatis.plus/ 或 https://mp.baomidou.com/

几个特性:

  1. 强大的 CRUD 操作:内置通用 Mapper、通用 Service,继承BaseMapper<POJO>即可使用
  2. 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence)
  3. 内置分页插件
  4. 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  5. 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

1.2 使用步骤

  1. 导入依赖:
<dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.5.1</version>
</dependency>
  1. 在Mapper中继承BaseMapper<POJO>

1.3 MPConfig类

@Configuration
@MapperScan("包路径")
public class MybatisPlusConfig {
   
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
   
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        // 配置分页插件
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        // 配置乐观锁插件
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

1.4 表前缀:@TableName

找不到表时的解决方案:

1)在POJO中加上注解@TableName(“表名”)

2)在application.yml中设置表的前缀, 此时会自动将前缀与BaseMapper中的泛型POJO类名拼接

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_

1.5 @TableField

解决字段名不一致问题(非驼峰)与其他问题:@TableField

value属性用于解决名字不一致问题:value=“字段名”

exist属性用于解决某成员变量是否为表中字段问题, 默认值true : exist = false

select属性用于解决不加入查询字段的问题(如password) : select = false

fill属性 : 自动填充

1.5.1 自动填充

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。

我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:

(1)数据库表中添加自动填充字段

在User表中添加datetime类型的新的字段 create_time、update_time

(2)实体上添加注解

// insert时执行
@TableField(fill = FieldFill.INSERT)
// update时执行
@TableField(fill = FieldFill.UPDATE)
// insert与update都会执行
@TableField(fill = FieldFill.INSERT_UPDATE)

(3)实现元对象处理器接口

创建一个MyMetaObjectHandler类实现MetaObjectHandler类, 并重写insertFill与updateFill方法, 分别表示插入与更新时会对该元数据执行的操作(元数据:粗略理解就是表中字段)

记得加上@Component注解, 不然Spring得不到就无法执行处理

接着在这俩个方法中使用setFieldValByName(nameStr,执行的操作 , MetaObject)方法对字段进行处理:

  1. nameStr : @TableField字段下的成员变量名称(字符串形式)
  2. 执行的操作 : 每次insert或者update对该元数据进行的操作, 例如new Date(), 1等等
  3. MetaObject : 重写方法传入参数

示例:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
   

    private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);

    @Override
    public void insertFill(MetaObject metaObject) {
   
        LOGGER.info("start insert fill ....");
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
        // 逻辑删除:
        this.setFieldValByName("deleted", 0, metaObject);
        // 乐观锁:
        this.setFieldValByName("version", 1, metaObject);
    }

    @Override
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值