mybatis-plus-增改,自动填充

1.主键生成策略

配置主键自增:

①实体类字段加上(@TableId(type=IdType.AUTO))

②数据库字段一定要自增

其余的源码解释:

public enum IdType{
    AUTO(0),//自增
    NONE(1),//未设置主键
    INPUT(2),//手动输入
    ID_WORK(3),//默认全局唯一id
    UUID(4),//全局唯一id  uuid
    ID_WORK_STR(5);//字符串表示法
}

2.插入操作

public void testInsert(){
        User user=new User();
        user.setName("zhangsan");
        user.setAge(12);
        user.setEmail("123@abc.com");
        int insert = userMapper.insert(user);//自动生成id
        System.out.println(user);
    }

3.更新操作

public void testUpdate(){
        //通过条件自动拼接sql  UPDATE user SET age=?, email=? WHERE id=? 
        User user=new User();
        user.setId((long)1);
        user.setEmail("1234@abc.com");
        //参数是一个对象
        int update = userMapper.updateById(user);
        System.out.println(update);
    }

4.自动填充

创建时间,修改时间,这种操作一般都是自动填充。

阿里开发手册:所有数据库表gmt_create,gmt_modified几乎所有表都要配置上,而且需要自动化。

方式一:数据库级别(给字段赋初值)

方式二:代码级别

public enum FieldFill{
    DEFAULT,
    INSERT,
    UPDATE,
    INSERT_UPDATE;
}

①实体类字段属性上增加注解

//自段添加填充
@TableField(fill= FieldFill.INSERT)
private Date createTime;
@TableField(fill=FieldFill.INSERT_UPDATE)
private Date updateTime;

②编写处理器来处理这个注解

新建处理类,继承接口MetaObjectHandler,重写填充方法

package com.example.demo.handler;

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

import java.util.Date;
@Slf4j
@Component//一定不要忘记把处理器加到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ...");
        //setFieldValByName(String fieldName,Object fieldValue,MetaObject metaObject)填充字段名,字段填充值,要给哪个值处理
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
    //更新的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ...");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

测试插入

@Test
    public void testInsert(){
        User user=new User();
        user.setName("zhangsan");
        user.setAge(12);
        user.setEmail("123@abc.com");
        int insert = userMapper.insert(user);//自动生成id
        System.out.println(user);
    }

所有博客均为自己学习的笔记。如有错误敬请理解。
原文地址:https://www.cnblogs.com/tangtang-benben/p/14477502.html