目录

性能分析:

1.引入依赖

2.切换数据源

3.增加spy.properties 配置:

4.再执行一次查找方法:

条件构造器:

1.条件构造器查询实例1:

2.条件构造器查询实例2:

3.条件构造器查询实例3:

4.条件构造器查询实例4:

5.条件构造器查询实例5:

6.条件构造器查询实例6:

代码生成器

1.引入依赖

2.创表

3.创建代码生成器

4.执行代码生成器


性能分析:

        在新版本的mybaties plus中移除了老版本的性能分析插件,官方的意思就是让我们使用Druid等工具进行性能分析。当然,在官方文档中给我们引入了一个新组件p6spy,用于执行sql分析打印。

该插件有性能损耗,不建议生产环境使用

1.引入依赖

<!--sql性能分析插件-->
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.9.1</version>
        </dependency>

2.切换数据源

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:p6spy:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncodeing=utf-8&serverTimezone=GMT%2B8
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver

切换数据源两个注意的点:

com.p6spy.engine.spy.P6SpyDriver

        2.url在中间加上 p6spy:

其他的和以前的配置一样,没有变化

3.增加spy.properties 配置:

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

这样,就配置好了我们的性能分析插件

4.再执行一次查找方法:

springcloud提升mybatis日志等级 springcloud整合mybatisplus_sql

 在红色字体内,可以看到具体的运行时间等参数。

条件构造器:

        Wrapper,在我的理解中,wapper就是一个构造器方法,帮助我们简单地去实现一些简单的sql。不用自己去写sql,而是用过方法调用传参实现,具体的使用我们可以当方法传参来理解。

1.条件构造器查询实例1:

@Test
    public void contextLoads(){
        //new一个Wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //Wrapper的用法就主要是调用其中的方法,我们查询name和email不为空,并且年龄大于21的用户
        wrapper.isNotNull("name").isNotNull("email").ge("age",21);
        //查询封装
        List<User> users = userMapper.selectList(wrapper);
        //遍历输出
        users.forEach(System.out::println);
    }

 我们可以看到:

springcloud提升mybatis日志等级 springcloud整合mybatisplus_代码生成器_02

  sql语句在执行的时候,(name IS NOT NULL AND email IS NOT NULL AND age >= ?)自动拼接上去了。这就是Wrapper的执行方式。

查询结果:

springcloud提升mybatis日志等级 springcloud整合mybatisplus_构造器_03

2.条件构造器查询实例2:

@Test
    public void selectByName(){
        //new一个Wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //Wrapper的用法就主要是调用其中的方法,我们查询一个name为Tom的用户
        wrapper.eq("name","Tom");
        //查询封装,查询一个
        User user = userMapper.selectOne(wrapper);
        //遍历输出
        System.out.println(user);
    }

3.条件构造器查询实例3:

@Test
    public void selectAllCount(){
        //new一个Wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //Wrapper的用法就主要是调用其中的方法,我们查询一个年龄在20-30岁之间的用户
        wrapper.between("age",20,30);
        //查询封装,查询结果数
        Long total = userMapper.selectCount(wrapper);
        //遍历输出
        System.out.println(total);
    }

4.条件构造器查询实例4:

@Test
    public void selectMaps(){
        //new一个Wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //Wrapper的用法就主要是调用其中的方法,我们查询一个名字不包含e的用户
        //左和右表示百分号在左边还是右边
        wrapper.notLike("name","e").likeLeft("email","t");
        //查询封装,查询结果数
        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
        //遍历输出
        maps.forEach(System.out::println);
    }

5.条件构造器查询实例5:

@Test
    public void selectLeft(){
        //new一个Wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //id在子查询中查出来
        wrapper.inSql("id","select id from user where id<3");
        //查询封装,查询结果数
        List<Object> objects = userMapper.selectObjs(wrapper);
        //遍历输出
        objects.forEach(System.out::println);
    }

6.条件构造器查询实例6:

@Test
    public void selectOrder(){
        //new一个Wrapper
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //id在子查询中查出来
        wrapper.orderByAsc("id");
        //查询封装,查询结果
        List<User> users = userMapper.selectList(wrapper);
        //遍历输出
        users.forEach(System.out::println);
    }

以上就是条件构造器的具体用法,mybaties plus会增加单标构建与操作的便捷度。


1.引入依赖

<!--代码生成器插件-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        
        <!-- 生成代码模板工具-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>

2.创表

在mysql中创建表 article ,所有的字段将会由代码生成器创建CRUD已经注释

springcloud提升mybatis日志等级 springcloud整合mybatisplus_构造器_04

 表结构如下:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for article
-- ----------------------------
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `isTop` int(1) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '是否置顶',
  `banner` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '封面图',
  `isHot` int(1) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '是否热门',
  `pubTime` datetime(0) NULL DEFAULT NULL COMMENT '发布时间',
  `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题',
  `summary` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '简介',
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '内容',
  `viewsCount` int(255) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '浏览量',
  `commentsCount` int(0) NULL DEFAULT NULL COMMENT '评论量',
  `crateTime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `updateTime` datetime(0) NULL DEFAULT NULL COMMENT '上传时间',
  `version` int(255) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '版本号',
  `deleted` int(1) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '逻辑删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

上表可以是你设计好的任意表,表结构设计很重要,需要的字段都应该有

3.创建代码生成器

package space.pigeonessence;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;

import java.util.Collections;

/**
 * @author Zeyu Wan
 * @version 1.0.0
 * @ClassName AutoGenerator.java
 * @Description Auto Code Generator
 * @createTime 2021年12月17日 16:31:00
 */
public class MyAutoGenerator {
    public static void main(String[] args) {

        FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&serverTimezone=GMT%2B8", "root", "123456")//设置数据源
                /*全局配置*/
                .globalConfig(builder -> {
                    builder.author("ZeyuWan") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("F:\\blog-background-parent\\mybaties-tese\\src\\main\\java") // 指定输出目录
                            //.disableOpenDir()//关闭开启目录
                            .dateType(DateType.ONLY_DATE)//只有日期
                            ;
                })
                /*包的配置*/
                .packageConfig(builder -> {
                    builder.parent("space.pigeonessence") // 设置父包名
                            .moduleName("blog") // 设置父包模块名
                            .mapper("mapper")
                            .service("service")
                            .controller("controller")
                            .entity("entity")
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,"F:\\blog-background-parent\\mybaties-tese\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径
                })

                .strategyConfig(builder -> {
                    builder.addInclude("article") // 设置需要生成的表名(你新创建的表)
                            .addTablePrefix("t_", "c_"); // 设置过滤表前缀

                })

                //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();

    }
}

4.执行代码生成器

springcloud提升mybatis日志等级 springcloud整合mybatisplus_构造器_05

 执行成功以后可以看到mybaites plus已经帮我们创建好了一些基本的类

springcloud提升mybatis日志等级 springcloud整合mybatisplus_sql_06