mybatis-plus 测试插入功能+更新功能
测试插入功能

我们使用自带的插入功能 同时不给出ID

@Test
    void testInsert(){
        User user1=new User();
        user1.setAge(20);
        user1.setName("jie");
        user1.setEmail("hhh@qq.com");
        //返回受影响的行数
        int insert = userMapper.insert(user1);
        System.out.println(insert);
        System.out.println(user1);
    }

会发现mplus会自动生成一个ID,同时对象的ID属性也会被赋值
这里自动生成了ID 0
mybatis-plus 测试插入功能+更新功能_字段
mybatis-plus 测试插入功能+更新功能_字段_02

生成的策略会根据ID类型而改变

使用@TableId注解

mybatis-plus 测试插入功能+更新功能_数据库_03
格式例子

 @TableId(type = IdType.AUTO)
    private long id;

有如下类型
mybatis-plus 测试插入功能+更新功能_实体类_04

测试AUTO类型ID

使用上面注解声明ID是AUTO类型 在数据库对应的字段也改为自增类型
mybatis-plus 测试插入功能+更新功能_数据_05
现在我们插入一条数据试试
mybatis-plus 测试插入功能+更新功能_实体类_06
可以发现mplus会知道使用AUTO类型

测试更新操作

原数据
mybatis-plus 测试插入功能+更新功能_字段_07
测试代码:

@Test
    void testUpdate(){
        //构造一个ID相同的类型 交给函数处理即可
        User user=new User();
        //ID为6 类型为Long
        user.setId(6L);
        user.setName("被更新的jie");
        userMapper.updateById(user);
    }

运行后发现给出的属性在数据库被修改了,没有给的属性就不会改变 十分方便
mybatis-plus 测试插入功能+更新功能_数据_08

自动化填充处理

一些字段是需要用到自动化填充(如时间)

数据库层次操作

数据库添加两个字段 默认值为当前时间戳,update_time设置为根据当前时间戳更新
mybatis-plus 测试插入功能+更新功能_数据库_09
实体类同步

private Date createTime;
private Date updateTime;

这样后我们就调用上面的函数就可以实现同步更新时间了,都是不推荐直接修改数据库 所以我们要选择代码层次的方法

代码层次的方法

删除在数据库上的更新 默认值设置
在实体类上添加注解
使用@TableField注解 (字段注解)
该注解有一个属性
mybatis-plus 测试插入功能+更新功能_数据库_10
属性不同值表
mybatis-plus 测试插入功能+更新功能_字段_11

 @TableField(fill = FieldFill.INSERT)
    private Date createTime;
 @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

编写处理器去处理这个注解

package com.jie.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 MyHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

之后即可完成需要的功能