mybatisplus学习笔记(2)-主键生成策略和自动填充

本文介绍了MyBatisPlus中主键生成策略的使用,包括自动增长、UUID、Redis生成ID和默认雪花算法,并详细讲解了如何实现添加、修改操作。同时,文章还探讨了自动填充功能,通过原始方式和注解配置实现创建时间和更新时间的自动管理。

以下内容参考尚硅谷的https://www.bilibili.com/video/BV1y7411y7am视频

1.查看sql语句和实现添加操作

1.1 查看sql语句

在application.properties中配置下面语句可以在控制台中查看相关的sql语句

#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

下面是一个添加操作的sql语句

在这里插入图片描述

1.2 实现添加操作
@Test
public void insertUser(){
    User user = new User();
    user.setName("张飞");
    user.setAge(36);
    user.setEmail("zhangfei@qq.com");
    int insert = userMapper.insert(user);
    if (insert>0){
        System.out.println("插入成功");
    }else {
        System.out.println("插入失败");
    }
}

运行上面语句,数据库中添加下面数据

在这里插入图片描述

此处需要注意的是,并没有设置id,mybatisplus自动生成了一个19位的id值。

2.如何使用主键策略

在实体类id上面添加注解@TableId(type = IdType.ID_WORKER),

在这里插入图片描述

其中有6中可选择,如下所示

在这里插入图片描述

其中

AUTO:自动增长

ID_WORKER:mp自带策略(id为整型时使用)

ID_WORKER_STR:mp自带策略(id为字符串类型时使用)

INPUT:用户手动输入

NONE:不使用策略

UUID:随机生成一个id

2.1 主键策略–自动增长
2.2 .主键策略–UUID

每次生成随机唯一的值

2.3 主键策略–redis生成id
2.4 主键策略–mp自带默认策略(雪花算法)

3.实现修改操作

根据id修改,只需要添加需要修改的项即可

注意如果id为long类型,需要在数字后面添加L

@Test
public void updateUser(){
    User user = new User();
    user.setId(1280147169042636801L);
    user.setAge(42);

    int result = userMapper.updateById(user);
    if (result>0){
        System.out.println("修改成功");
    }else {
        System.out.println("修改失败");
    }
}

4.自动填充

4.1 原始方式

1.在数据库增加字段

在数据库增加create_time,update_time字段

2.在实体类增加属性

在实体类增加create_time,update_time属性

3.手动设置相关属性

执行添加操作

@Test
public void insertUser1(){
    User user = new User();
    user.setName("刘备");
    user.setAge(29);
    user.setEmail("liubei@qq.com");
    user.setCreateTime(new Date());
    user.setUpdateTime(new Date());

    int insert = userMapper.insert(user);
    if (insert>0){
        System.out.println("插入成功");
    }else {
        System.out.println("插入失败");
    }
}
4.运行结果

在这里插入图片描述

4.2 自动填充

1.在实体类上添加注解
@TableField(fill = FieldFill.INSERT)//插入时注入
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //插入和修改时都注入
private Date updateTime;
2.配置handler类

实现MetaObjectHandler中的两个方法(插入和修改)

注意必须在类上面添加@Component注解,否则自动填充无法生效

package com.nslt.mpdemo10101.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    //mp执行添加操作时,这个方法执行
    @Override
    public void insertFill(MetaObject metaObject) {
        //方法中三个参数,分别是实体类的属性,要设置的值,元数据
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }

    //mp执行修改操作时,这个方法执行
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

3.测试

执行下面语句

@Test
    public void insertUser2(){
        User user = new User();
        user.setName("关羽");
        user.setAge(45);
        user.setEmail("关羽@qq.com");
        int insert = userMapper.insert(user);
        if (insert>0){
            System.out.println("插入成功");
        }else {
            System.out.println("插入失败");
        }
    }

结果如下

在这里插入图片描述

发现时间已自动填充

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值