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号