其他分享
首页 > 其他分享> > Mybatis-Plus一些简单使用技巧

Mybatis-Plus一些简单使用技巧

作者:互联网

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

Insert插入

主键生成策略

默认生成,通过雪花算法生成ID 参考博客:https://blog.csdn.net/lq18050010830/article/details/89845790

==>  Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==>  Parameters: 1423577873627734017(Long), 哈撒给(String), 19(Integer), 2238770242@qq.com(String)

可以观察到@TableId注下有很多主键生成方案

AUTO(0),自增长ID,前提是将数据库设置为自增长
INPUT(2),自己输入ID
ASSIGN_ID(3),雪花算法,默认
ASSIGN_UUID(4),不带下划线的UUID,但是是String类型的

自动填充

gmt_create (创建时间)gmt_modified(修改时间)这两个属性都需要操作自动化完成,我们并不能手动的去控制。

 

先在数据库里加上这两个字段

然后更改实体类,在要操作的字段上加@TableField注解,注意这里是时间的类型是LocalDateTime

@TableField(fill = FieldFill.INSERT)
private LocalDateTime gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime gmtModified;

这个注解下有一个FieldFill类下有这么几个常量

DEFAULT,
INSERT,
UPDATE,
INSERT_UPDATE;

然后写一个类实现MetaObjectHandler接口

这个类必须@Component注册为组件

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("gmtCreate", LocalDateTime.now(), metaObject);
        this.setFieldValByName("gmtModified",LocalDateTime.now(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified",LocalDateTime.now(),metaObject);
    }
}

 

乐观锁OptimisticLockerInnerInterceptor

当要更新一条记录的时候,希望这条记录没有被别人更新
乐观锁实现方式:

 

在数据库新增一个version列,默认值为1

在实体类中同样增加version,并且加上@version注解

@Configuration
@MapperScan("com.lyk.mapper")
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

 

分页查询

写一个MP的配置类

@Configuration
@MapperScan("com.lyk.mapper")
public class MyBatisPlusConfig {
    //分页查询
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor2() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }
}

然后测试

Page<User> userPage = userMapper.selectPage(page, null);
List<User> records = page.getRecords();

page.getRecords()获取分页数据。

@Test
void limitText(){
    Page<User> page = new Page<>(1,5);
    Page<User> userPage = userMapper.selectPage(page, null);
    List<User> records = page.getRecords();
    System.out.println("是否有前一页"+page.hasPrevious());
    System.out.println("是否有后一页"+page.hasNext());
    System.out.println("一页有"+page.getSize()+"条数据");
    System.out.println("总页数: "+page.getPages());
    System.out.println("总记录数: "+page.getTotal());
    for (User record : records) {
        System.out.println(record);
    }

 

逻辑删除

给数据库新增一个del字段作为删除标记

给实体类增加这个字段,并标注@TableLogic注解

@TableLogic
private int del;

在配置文件中配置

mybatis-plus.global-config.db-config.logic-delete-field=del
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

逻辑删除特点

 

标签:metaObject,技巧,page,println,MybatisPlusInterceptor,version,Plus,Mybatis,public
来源: https://www.cnblogs.com/davidofme/p/16323196.html