配置日志
使用mybatisplus后,所有的sql都是不可见的,开发时需要查看,所以需要配置日志
在配置文件application中配置
#配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
测试结果
CRUD扩展
insert
@Test
void testInsert(){
User user = new User();
user.setName("gui");
user.setAge(23);
user.setEmail("987654321@qq.com");
int result = userMapper.insert(user);
System.out.println(result);
System.out.println(user);
}
数据库插入的id默认值为:全局的唯一id
主键策略
默认ID_WORKER 全局唯一id
分布式系统唯一id生成
雪花算法:
SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。
主键自增
我们需要配置主键自增:
实体类字段上 @TableId(type = IdType.AUTO)
数据库字段一定是自增的
ID主键设置源码解释
public enum IdType {
AUTO(0),//ID自增
NONE(1),//未设置主键
INPUT(2),//手动输入
ID_WORKER(3),//默认全局唯一id
UUID(4),//全局唯一id uuid
ID_WORKER_STR(5);//ID_WORKER字符串表示法
}
update
@Test
void testupdate(){
User user = new User();
user.setId(5L);
user.setName("gui");
user.setAge(23);
int i = userMapper.updateById(user);
System.out.println(i);
}
多次测试后发现,所有的sql都会自动动态配置。
自动填充
创建时间,修改时间!这些个操作一遍都是自动化完成的,不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create、gmt_modified都要配置,且需要自动化!
方式一:数据库级别
在表中新增字段 create_time、update_time
方式二:代码级别
删除数据库默认值,更新操作
在实体类字段属性上添加注解
// 字段添加填充内容
@TableField(fill = FieldFill.INSERT)
private Date create_time;
@TableField(fill = FieldFill.UPDATE)
private Date update_time;
编写处理器来处理这个注解!
@Slf4j//日志
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ...");
this.setFieldValByName("create_time",new Date(),metaObject);
this.setFieldValByName("update_time",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ...");
this.setFieldValByName("update_time",new Date(),metaObject);
}
}