Spring Cloud集成新版MyBaties-Plus(二)

        本篇文章基于狂神的教程,地址如下:

【狂神说Java】MyBatisPlus最新完整教程通俗易懂_哔哩哔哩_bilibili笔记资料交流都在我们的平台:www.kuangstudy.com秦疆老师Java进阶系列课程之MyBatisPlus带你走进偷懒的大门;深入浅出的讲解了MyBatisPlus使用的全流程以及实战教学!狂神说Java系列,努力打造通俗易懂的教程QQ交流群 : 664386224https://www.bilibili.com/video/BV17E411N7KN?p=16

我们在文章:

Spring Cloud集成新版MyBaties-Plus_PigeonEssence的博客-CSDN博客

完成了基础的CRUD,我们继续研究更为简单的其他组件。

目录

性能分析:

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

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

        1.driver-class-name 换成p6spy的 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.再执行一次查找方法:

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

条件构造器:

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

具体方法参照官网文档:

条件构造器 | MyBatis-Plushttps://baomidou.com/pages/10c804/#alleq

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

 我们可以看到:

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

查询结果:

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会增加单标构建与操作的便捷度。

代码生成器

3.5.1 及其以上版本使用了新的代码生成器,官方文档如下:

代码生成器(新) | MyBatis-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已经注释

 表结构如下:

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.创建代码生成器

代码生成器的配置可以对照官方文档:

代码生成器配置新 | MyBatis-Plus

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.执行代码生成器

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PigeonEssence

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值