我们无论是在工作还是写项目或者是测试,都离不开日志,我们可以通过日志来了解到我们的代码到底哪里出错,哪里需要修改和代码执行的过程和用了什么SQL命令等各种信息。我们在运用日志的过程中也就相当于执行了简单的Debug。那么,下面我就讲一下MyBatis-Plus的日志是如何配置的。
首先建一个application.yml于resources文件夹中,输入日志的配置即可完成日志的配置操作。然后引用在类上引用@Slf4j注解,通过log.info("")调用即可。正常运行就显示出日志信息了
application.yml
#mybatis-plus配置及其日志输出
mybatis-plus:
configuration:
# 日志
# log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
# mapper-locations: ["classpath*/mapper/*.xml"]
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
logic-delete-field: flag
#驼峰下划线转换
column-underline: true
日志使用例子:
CRUD扩展
CRUD就是业务的描述,即就是基本的增删改查。
insert插入操作
还是在测试类MybatisPlusApplicationTests 中测试。
//测试插入
@Test
public void testInsert(){
User user = new User();
user.setName("狂神说java");
user.setAge(3);
user.setEmail("1111111.qq.com");
//帮我们自动生成id
int result = userMapper.insert(user);
//受影响行数
System.out.println(result);
//发现,id会自动回填
System.out.println(user);
}
注意,此id为之全局且唯一的id,数据库插入的id默认值为:全局的唯一id。
主键生成策略
默认@TableId(type = IdType.ASSIGN_ID)全局唯一id,ID_WORKER已经过时了。
雪花算法:
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)。可以保证几乎钱全球唯一 。
主键自增@TableId(type = IdType.AUTO)
我们需要配置主键自增:
1、实体类该id字段上添加@TableId(type = IdType.AUTO)。
2、数据库字段上也一定为之自增,若二者有一个没有,则没有效果。
其余的源码解释
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.baomidou.mybatisplus.annotation;
public enum IdType {
AUTO(0), //数据库id自增
NONE(1), //未设置主键
INPUT(2), //手动输入,若使用此法,则需要自己手动配置id user.setId(6L)[因为id为之Long]
ASSIGN_ID(3), //默认的全局唯一id
ASSIGN_UUID(4); //全局唯一id
private final int key;
private IdType(int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
}
User实体类:
package com.system.bootMyplus.bean;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
/**
* 对应数据库中的主键(uuid、自增id、雪花算法、redis、zookeeper)
*/
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
插入测试:
//测试插入
@Test
public void testInsert(){
User user = new User();
user.setName("狂神说java");
user.setAge(4);
user.setEmail("1111111.qq.com");
//帮我们自动生成id
int result = userMapper.insert(user);
//受影响行数
System.out.println(result);
//发现,id会自动回填
System.out.println(user);
}
更新操作
//测试更新
@Test
public void testUpdate(){
User user = new User();
//必须加上L,若否则报错
user.setId(1466667984578691073L);
user.setAge(5);
user.setName("狂神");
int i = userMapper.updateById(user);
System.out.println(i);
}
根据条件自动执行动态SQL,以后不用手动写动态SQL了。所有的SQL都是帮我们动态配置的。