SpringBoot中mybatis-plus的自动填充

120 阅读2分钟
1.配置自动填充的字段

package com.jsonweb.json.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

import java.util.Date;

/**
 * Author: Json
 * Date: 2021/10/17
 * 实体类
 **/
//lombok 注解
//不需要写 get set方法 有参无参构造 都会生成
@Data
public class User {
    @TableId(type= IdType.AUTO)
    private  Integer id;
    private  String name;
    private  Integer age;
    private  String email;

    @TableField(fill = FieldFill.INSERT)  //自动填充
    private Date creatTime;

    @TableField(fill = FieldFill.UPDATE)  //更新填充
    private Date updateTime;
}

2.

1.png

package com.jsonweb.json.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * Author: Json
 * Date: 2021/10/24
 * @Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理
 * @Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能
 * @Repository注解在持久层中,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。
 * @Controller层是spring-mvc的注解,具有将请求进行转发,重定向的功能。
 * @Service层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。
 **/

@Component  //需要架个这样的注解 最普通的组件,可以被注入到spring容器进行管理
public class myHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // this.setFieldValByName("creatTime",new Date(),metaObject);
      //  this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}
3. 执行插入和更新操作测试

//添加测试
@Test
public  void add(){
    User user=new User();
    user.setName("whl");
    user.setAge(10);
    user.setEmail("123@qq.com");
    //不需要设置 id值 会自动生成 框架会自动生成一个 id值
    int insert = userMapper.insert(user);
    System.out.println("返回值:"+insert);
}

//主键生成策略
//1.自动增长  分表分库不方便      @TableId(type= IdType.AUTO) 注解  在id上增加
//2. UUID  排序不方便
//3. Redis实现
//4. mp中的自带策略 snowflake算法

//IdType 类型:
//AUTO 自动增长
//ID_WORKER MP自带
//ID_WORKER_STR MP自带
//INPUT 自己输入
//NONE  没策略
//UUID 唯一值


@Test
public void updateTest(){
    //根据id 更新字段
    User user = new User();
    user.setId(1);
    user.setAge(3);
    int i = userMapper.updateById(user);
    System.out.println(i);
}