概述
一、配置日志
使用了MyBatis-Plus开发, 就会导致所有的sql是不可见的,我们希望知道他是怎么执行的,就需要看对应的日志操作。
# 日志配置,采用默认的控制台输出
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
配置完成后就可以在控制台输出执行sql的过程
二、主键生成策略
官方文档:https://baomidou.com/pages/4c6bcf/
在模拟插入的时候,调用insert方法,未设置id但是系统会自动生成id
- 1. Twitter的snowflake算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:**使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。**具体实现的代码可以参看https://github.com/twitter/snowflake。雪花算法支持的TPS可以达到419万左右(2^22*1000)。
雪花算法在工程实现上有单机版本和分布式版本。单机版本如下,分布式版本可以参看美团leaf算法:https://github.com/Meituan-Dianping/Leaf
详解文章: https://www.cnblogs.com/haoxinyue/p/5208136.html
- 2.对应数据库中的主键
- 3.主键自增 AUTO
@TableId(type = IdType.AUTO)
private Long id;
注意:在设置主键自增时,需要将数据库中的主键也设置为自增,否则就会报错,无法是现在自增。
- 4.insert、update、delete操作,使用mybatis-plus进行上述操作,传入的都是实体类的对象,而不是一个数值id
- (1)比如我们要根据id进行删除,就需要创建一个 user对象,对象的id赋值,然后将对象传入userMapper.deleteById(user)方法,完成删除操作。
// 插入测试
@Test
void testInsert(){
User user = new User();
user.setAge(18);
user.setName("张三");
user.setEmail("janson@qq.com");
int insert = userMapper.insert(user);
System.out.println(insert);
}
@Test
void testUpdate(){
User user = new User();
//可以通过条件自动拼接动态sql
user.setId(5L);
user.setAge(18);
user.setName("里斯");
user.setEmail("janson@qq.com");
int i = userMapper.updateById(user);
System.out.println(i);
}
@Test
void testdelete(){
User user = new User();
user.setId(1503215752373608453L);
int i = userMapper.deleteById(user);
System.out.println(i);
}
三、自动填充
-
创建时间,修改时间!一般都是自动化完成的,不希望进行手动操作,
-
阿里巴巴开发手册:所有的数据库表都要包含 gmt_create,gmt_modified,几乎所有的表都要配置,
-
**1.实现方法一:数据库方法 **
不推荐使用:
private Date creatTime;
private Date updateTime;
数据库字段中加入默认值,进行数据库自动设置时间
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP
- 2.实现方式二:代码实现(一般用该方法实现)
实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
(1)注解填充字段 @TableField(… fill = FieldFill.INSERT) 生成器策略部分也可以配置!
//字段填充
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
(2)自定义实现类 MyMetaObjectHandler
填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入
package com.janson.mybatis_plus.handle;
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;
/**
* @Author Janson
* @Date 2022/3/14 13:08
* @Version 1.0
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
//3.0.5 写法如下
//this.setFieldValByName("createTime",new Date(),metaObject);
//3.0.5 不能用,3.3.0以上版本直接这样做,注意需要改的地方
//LocalDateTime.class 修改为 Date.class,LocalDateTime.now() 修改为new Date()
//this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
}
最后
以上就是体贴御姐为你收集整理的MyBatis-plus(day2_主键生成+自动填充)的全部内容,希望文章能够帮你解决MyBatis-plus(day2_主键生成+自动填充)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复