MyBatis-Plus快速入门(一)日志配置、CRUD扩展(插入、更新)、主键生成策略、自动填充
mybatis-plus日志配置
SQL是不可见的,所以开发的时候我们得知道它是怎么执行的,所以我们得看日志;但上线时得去除掉,它是浪费时间的。
#日志配置 #org.apache.ibatis.logging.stdout.StdOutImpl 默认的 控制台输出 其他的得导入相应的配置 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
输出日志

配置好日志后就可以以后学习或者做项目的时候查看自动生成的SQL了,你会爱上他的!
CRUD扩展
插入操作
//测试插入
    @Test
    public void InsertUser(){
        SysUser sysUser = new SysUser();
        sysUser.setUsername("admin6");
        sysUser.setPassword("123456");
        sysUser.setPhone(123456);
        sysUser.setEmail("123456@qq.com");
        int result = userMapper.insert(sysUser);//帮我们自动生成的id
        System.out.println(result);//受影响的行数
        System.out.println(sysUser);//发现id会自动回填
    }

数据库插入的 id 默认值为:全局的唯一id!
主键生成策略
默认 @TableId(type = IdType.ID_WORKER) 全局唯一id
分布式系统唯一id生成方案汇总链接:https://www.cnblogs.com/haoxinyue/p/5208136.html
雪花算法:

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一!
主键自增
需要配置主键自增:
1.实体类字段 @TableId(type = IdType.AOUT)
2.数据库字段自增

3.再次测试插入即可!
其余源码解释
public enum IdType {
    AUTO(0), // 数据库id自增
    NONE(1), // 未设置主键
    INPUT(2), // 手动设置
    ID_WORKER(3), // 默认的全局唯一id
    UUID(4), // 全局唯一id  UUID
    ID_WORKER_STR(5); // ID_WORKER 字符串表示法
}
一旦使用 @TableId(type = IdType.INPUT) 手动输入id,id就得自己配置了
测试更新
//测试更新
    @Test
    public void updateUser(){
        SysUser sysUser = new SysUser();
        //通过条件自动拼接动态SQL
        sysUser.setUserId(6L);
        sysUser.setUsername("admin测试");
        sysUser.setPassword("654321");
        //注意 updateById 获取的参数是一个对象
        userMapper.updateById(sysUser);
    }

所有的SQL都是自动帮我们动态配置的
自动填充
创建时间、修改时间,这些操作一般都是自动化完成的,我们不希望手动操作!
在阿里巴巴手册中:gmt_create、gmt_modified几乎所有的表都得配置上,就得需要自动化!
方式一:数据库级别(不推荐,工作中不允许我们修改数据库的!)
1.在表中新增字段 create_time、update_time

也可以自己手动添加默认。
2.测试方法,在实体类中添加新增字段
private Date createTime; private Date updateTime;

默认:CURRENT_TIMESTAMP
3.查看更新结果

方式二:代码级别
1.去除掉数据库创建时间、修改时间的默认值

2.实体类字段属性上需要添加注解
    @TableField(fill = FieldFill.INSERT)//字段添加填充内容
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
3.编写处理器来处理这个注解即可
package com.ljj.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 fieldVal, 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);
    }
}
4.测试插入和更新观察时间即可!
 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号