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.测试插入和更新观察时间即可!

 

 

 素材来源地址:狂神说  https://www.bilibili.com/video/BV17E411N7KN?p=2

posted @ 2020-09-08 10:53  吃完肥皂吐泡泡  阅读(564)  评论(0)    收藏  举报