mybatis-plus的性能分析、条件构造器与代码生成器
1、性能分析
1. 配置开发环境
在配置文件中配置开发环境
### 设置开发环境
spring.profiles.active=dev
2. 配置类加入一个Bean对象
/*
* SQL执行效率插件
* */
@Bean
@Profile({
"dev","test"}) //设置 dev test 环境开启,保证我们的效率
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(100); //ms 设置sql执行的最大时间,如果超过了则不执行
performanceInterceptor.setFormat(true); //是否格式化代码
return performanceInterceptor;
}
3. 测试
@Test
void contextLoads() {
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
结果:
如果超出最大的时间,它就不执行
2、条件构造器
测试1
@Test
void contextLoads() {
// 查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于18
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.isNotNull("name")
.isNotNull("email")
.ge("age",18);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果:
测试二
@Test
public void test1(){
// 查询age 20 - 25之间
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.between("age",20,25);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果:
测试三
@Test
public void test2(){
// 查询name为Tom的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.eq("name","Tom");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果:
测试四
@Test
public void test3(){
// 查询name为中不包含y的和email中首字符为t的
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 左和右表示 %在左边还是在右边,用于匹配首字符和尾字符
queryWrapper
.notLike("name","y")
.likeRight("email","t");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果:
测试五
@Test
public void test4(){
// 子查询
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// id在子查询中查出来
queryWrapper
.inSql("id","select id from user where id < 3");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
结果:
3、代码生成器
1. 添加依赖
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- mybatis_plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!-- Velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
2. 编写文件生成的类
package com.hzxy.mybatisplus;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
// 代码自动生成器
public class YbgCode {
public static void main(String[] args) {
// 需要构建一个代码自动生成器对象
AutoGenerator mpg = new AutoGenerator();
// 配置策略
// 1、全局配置
GlobalConfig globalConfig = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
globalConfig.setOutputDir(projectPath+"/src/main/java");
globalConfig.setAuthor("Ye");
globalConfig.setOpen(false);
globalConfig.setFileOverride(false); // 是否覆盖
globalConfig.setServiceName("%sService"); // 去Service的I前缀
globalConfig.setIdType(IdType.ID_WORKER);
globalConfig.setDateType(DateType.ONLY_DATE);
globalConfig.setSwagger2(true);
mpg.setGlobalConfig(globalConfig);
// 2、设置数据源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("520China");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 3、包的配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("blog");
pc.setParent("com.hzxy.mybatisplus");
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 4、策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("user"); //设置要映射的表名
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
strategyConfig.setEntityLombokModel(true); // 自动Lombok
strategyConfig.setLogicDeleteFieldName("deleted");
// 自动填充配置
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
TableFill updateTime = new TableFill("update_time",FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(createTime);
tableFills.add(updateTime);
strategyConfig.setTableFillList(tableFills);
// 乐观锁
strategyConfig.setVersionFieldName("version");
strategyConfig.setRestControllerStyle(true);
strategyConfig.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategyConfig);
mpg.execute();
}
}
运行后