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);
    }

更新null值,无法通过实体更新,只能使用warrpper的Set实现

如想把上例中的email改为空值。

LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(User::getEmail,""); 
updateWrapper.eq(User::Id,1L);

userService.update(updateWrapper); //或者userMapper.update(null,updateWrapper);

  

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);
    }

 

posted on 2021-03-04 21:14  飞飞乐园  阅读(318)  评论(0编辑  收藏  举报