springboot整合mybatis-plus代码自动生成和SQL性能查看
(一)自动生成代码
1.导包
<!-- 生成代码模板 https://mvnrepository.com/artifact/p6spy/p6spy --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency> <!--代码生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency> <!--SQL性能查看--> <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.9.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.4</version> </dependency>
用的是mybatis官网上介绍的新版代码生成器
2.准备工作
1.新建完springboot项目后导入上面的包,然后在boot的主启动类上直接写个普通运行类就行了
2.把要生成代码的数据库表准备好
3.代码生成配置
对照官网把上面罗列的都写出来了,没用上的我都注释掉了,根据自己需求生成,感觉比mybatis的自动生成舒服
package com.dlb; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.fill.Column; import com.baomidou.mybatisplus.generator.fill.Property; //代码生成 public class DlbCode { public static void main(String[] args) { //数据库配置 String url = "jdbc:mysql://xx.xx.xx.22:3306/数据库名?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8"; String root = "数据库账号"; String pwd = "密码"; DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(url,root,pwd) /*.dbQuery(new MySqlQuery())//数据库查询 .schema("mybatis-plus")//数据库schema(部分数据库适用) .typeConvert(new MySqlTypeConvert())// 数据库类型转换器 .keyWordsHandler(new MySqlKeyWordsHandler())//数据库关键字处理器*/ .build(); //全局设置 GlobalConfig globalConfig = new GlobalConfig.Builder() .fileOverride() .outputDir(System.getProperty("user.dir") + "/src/main/java") .author("大萝卜") .fileOverride()//覆盖生成文件,默认为false .disableOpenDir()//禁止打开输出目录,默认为TRUE //.enableKotlin()//生成kotlin代码 .enableSwagger()//开启swagger,默认为false .dateType(DateType.TIME_PACK)//时间策略 .commentDate("yyyy-MM-dd").build(); //包设置 PackageConfig packageConfig = new PackageConfig.Builder() .parent("com") .moduleName("dlb") .entity("pojo") .service("service") .serviceImpl("service.impl") .mapper("mapper") //.mapperXml("mapper.xml") .controller("controller") .other("other") //.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://") .build(); //模板配置 TemplateConfig templateConfig = new TemplateConfig.Builder() // .disable(TemplateType.ENTITY) // .entity("/templates/entity.java") // .service("/templates/service.java") // .serviceImpl("/templates/serviceImpl.java") // .mapper("/templates/mapper.java") // .mapperXml("/templates/mapper.xml") // .controller("/templates/controller.java") .build(); //策略配置 StrategyConfig pojo = new StrategyConfig.Builder() //生成实体模型配置 .entityBuilder() //.superClass(BaseEntity.class)//设置父类 .disableSerialVersionUID()//禁用生成 serialVersionUID 默认值:true //.enableChainModel()//生成的get和set方法是链式调用的 .enableLombok()//开启 lombok 模型 默认值:false .enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀 .enableTableFieldAnnotation()//开启生成实体时生成字段注解 //.enableActiveRecord()//开启 ActiveRecord 模型 .versionColumnName("version")//乐观锁字段名(数据库) .versionPropertyName("version")//乐观锁属性名(实体) .logicDeleteColumnName("deleted")//逻辑删除字段名(数据库) .logicDeletePropertyName("deleteFlag")// 逻辑删除属性名(实体) .naming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略 下划线转驼峰命 .columnNaming(NamingStrategy.underline_to_camel)//数据库表字段映射到实体的命名策略 默认为 null .addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")//添加父类公共字段 .addIgnoreColumns("age")//添加忽略字段 .addTableFills(new Column("create_time", FieldFill.INSERT))//添加表字段填充 .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))//添加表字段填充 .idType(IdType.AUTO)//全局主键类型 //.formatFileName("%sEntity")//格式化文件名称 .build(); StrategyConfig controller = new StrategyConfig.Builder() //controller策略配置 .controllerBuilder() .enableRestStyle()//开启生成@RestController 控制器 默认false .build(); StrategyConfig service = new StrategyConfig.Builder() //service策略配置 .serviceBuilder() // .superServiceClass(BaseService.class) // .superServiceImplClass(BaseServiceImpl.class) .formatServiceFileName("%sService")//格式化 service 接口文件名称 .formatServiceImplFileName("%sServiceImp")//格式化 service 实现类文件名称 .build(); StrategyConfig mapper = new StrategyConfig.Builder() .mapperBuilder() .superClass(BaseMapper.class) .enableMapperAnnotation()//开启 @Mapper 注解 .enableBaseResultMap()//启用 BaseResultMap 生成 默认值:false .enableBaseColumnList()//启用 BaseColumnList 默认值:false //.cache(MyMapperCache.class)//缓存实现类 .formatMapperFileName("%sDao") .formatXmlFileName("%sMapper") .build(); new AutoGenerator(dataSourceConfig)//数据源 .global(globalConfig)//全局 .packageInfo(packageConfig)//包 .template(templateConfig)//模板配置 //策略配置 .strategy(pojo)//实体类 /*.strategy(controller)//控制器 .strategy(service)//service .strategy(mapper)//mapper*/ .execute(); } }
4.运行
点击主方法运行,部分展示如图
(二)SQL性能查看
1.导包
开头导入的包有一个p6psy
2.springboot的配置文件
#链接配置,更改为p6spy,可以查看SQL用时性能分析 spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver spring.datasource.url=jdbc:p6spy:mysql://xx.xx.xx.xx:3306/数据库名?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 #下面注释掉的是不用SQL性能分析的正常写法,有个对比---只需要更改原来的这两行就行了
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #spring.datasource.url=jdbc:mysql://xx.xx.xx.xx:3306/数据库名?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 spring.datasource.username=账号 spring.datasource.password=密码 #指定连接池 #spring.datasource.type= #逻辑删除 mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0 #开启驼峰命名 mybatis-plus.configuration.map-underscore-to-camel-case=true #配置日志 当前是默认的 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.配置spy
在resources下新建spy.properties
driverlist=com.mysql.cj.jdbc.Driver
#logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss
#appender=com.p6spy.engine.spy.appender.StdoutLogger
#SQL 性能分析
#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.查看SQL性能
在测试类中随便调用一个查询,就能在控制台查看SQL的执行时间,执行语句是什么