我们无论是在工作还是写项目或者是测试,都离不开日志,我们可以通过日志来了解到我们的代码到底哪里出错,哪里需要修改和代码执行的过程和用了什么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

mybatis springboot日志输出log4j2 mybatis-plus 日志_User

 日志使用例子:

mybatis springboot日志输出log4j2 mybatis-plus 日志_ssm_02

 

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);

    }

mybatis springboot日志输出log4j2 mybatis-plus 日志_ssm_03

注意,此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都是帮我们动态配置的。

mybatis springboot日志输出log4j2 mybatis-plus 日志_ssm_04

注意:此操作是承接上一个帖子《MyBatis-Plus》,在其基础上操作的,有什么不清楚的还请看完《MyBatis-Plus》的里面的一些配置和内容。