性能分析插件
开发过程中我们会遇到一些运行较慢的SQL,我们需要进行测试,或者使用druid进行操作。
在mybatis-plus中也提供了这样的插件,如果超过就停止运行!
1.导入插件
/**
* SQL执行效率插件
*/
@Bean
@Profile({"dev","test"})//设置dev test环境开启,保证我们的效率
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(1);//ms毫秒 设置sql执行的最大时间,如果超过了则不执行
performanceInterceptor.setFormat(true);//是否开启格式化(开启)
return performanceInterceptor;
}
得在springboot中配置环境dev 或者 test环境。
#开发环境 spring.profiles.active=dev
2.测试使用
//测试通过id查询用户
@Test
public void selectById(){
SysUser sysUser = userMapper.selectById(1303211966619484161L);
System.out.println(sysUser);
}

注意:该方法3.0x已经被移除,官方不再推荐使用!
条件构造器
Wrapper:十分重要
我们写的一些复杂的SQL我们可以使用它来代替!
条件构造器官网地址:https://baomidou.com/guide/wrapper.html#abstractwrapper
测试使用:
@SpringBootTest
public class WrapperApplication {
@Autowired
private UserMapper userMapper;
//查询name不为空的用户,并且邮箱不为空且年龄大于等于12的用户
@Test
public void contextLoads(){
QueryWrapper<SysUser> wrapper=new QueryWrapper<SysUser>();
wrapper.isNotNull("username")
.isNotNull("email")
.ge("age", 18);
List<SysUser> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
//查询名字叫XXX的一个人
@Test
public void contextLoads2(){
QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
wrapper.eq("username", "手残");
SysUser sysUser = userMapper.selectOne(wrapper);
System.out.println("username = " + sysUser);
}
//查询年龄在21到30之间的用户
@Test
public void contextLoads3_1(){
QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
wrapper.between("age", 21, 30);
List<SysUser> user = userMapper.selectList(wrapper);//查询一个数据有结果数据时我们可以使用List 或者 Map
user.forEach(System.out::println);
}
//查询年龄在21到30之间的用户数
@Test
public void contextLoads3_2(){
QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
wrapper.between("age", 21, 30);//区间
Integer count = userMapper.selectCount(wrapper);//查询结果数
System.out.println("count = " + count);
}
//查询名字不含j的而且email以t开头的
@Test
public void contextLoads4(){
QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
wrapper.notLike("username", "j")
.likeRight("email", "t");
List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
maps.forEach(System.out::println);
}
//id在子查询查出来
@Test
public void contextLoads5(){
QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
wrapper.inSql("user_id", "select user_id from sys_user where user_id < 3");
List<Object> objects = userMapper.selectObjs(wrapper);
objects.forEach(System.out::println);
}
//查询name不为空的用户、并且邮箱不为空、且年龄大于等于16的用户,并按age升序排序
@Test
public void contextLoads6(){
QueryWrapper<SysUser> wrapper=new QueryWrapper<SysUser>();
wrapper.isNotNull("username")
.isNotNull("email")
.ge("age", 12)
.orderByAsc("age");
List<SysUser> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
}
代码生成器
1.导入依赖
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.0.5</version>
</dependency>
<!--Swagger依赖开始-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!--Swagger依赖结束-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
注意:mybatis-plus-generator 版本必须和 mybatis-plus-boot-starter 一致为 3.0.5,不然逻辑删除插件和SQL执行效率插件的@Bean就会出现异常!!!
2.在测试文件test中新建一个文件TestApplication添加代码自动生成器
//代码自动生成器
public class TestApplication {
public static void main(String[] args) {
//需要构建一个代码自动生成器对象
AutoGenerator autoGenerator = new AutoGenerator();
//配置策略
//全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath=System.getProperty("user.dir");//获取当前系统的目录 “user.dir”用户目录
gc.setOutputDir(projectPath+"/src/main/java");//生成到哪个路径
gc.setAuthor("ljj");//作者名
gc.setOpen(false);//是否打开资源管理器
gc.setFileOverride(false);//是否覆盖
gc.setServiceName("%sService");//去Service的I前缀
gc.setIdType(IdType.AUTO);//设置主键增长策略
gc.setDateType(DateType.ONLY_DATE);//设置日期格式
gc.setSwagger2(true);//开启swagger
autoGenerator.setGlobalConfig(gc);
//2.设置数据源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/carddb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10\n");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setDbType(DbType.MYSQL);
autoGenerator.setDataSource(dsc);
//3.设置包的位置
PackageConfig pc = new PackageConfig();
pc.setModuleName("test");
pc.setParent("com.ljj");
pc.setEntity("pojo");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
autoGenerator.setPackageInfo(pc);
//4.策略配置
StrategyConfig strategy = new StrategyConfig();
//strategy.setInclude("sys_user");//设置要映射的表名 注释掉就是生成全部
strategy.setNaming(NamingStrategy.underline_to_camel);//设置驼峰命名映射
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//设置驼峰命名映射
strategy.setEntityLombokModel(true);//设置lombok支持
strategy.setLogicDeleteFieldName("deleted");
//自动填充配置
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);//create_time增加填充
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);//update_time增加或修改填充
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(createTime);
tableFills.add(updateTime);
strategy.setTableFillList(tableFills);
//乐观锁
strategy.setVersionFieldName("version");
//设置Controller层驼峰命名
strategy.setRestControllerStyle(true);
//设置url驼峰命名
// strategy.setControllerMappingHyphenStyle(true);//localhost:8080/hello_id_2
autoGenerator.setStrategy(strategy);
autoGenerator.execute();//执行
}
}
3.测试使用

素材来源地址:狂神说 https://www.bilibili.com/video/BV17E411N7KN?p=2
//获取当前用户的目录
