性能分析插件
開發過程中我們會遇到一些運行較慢的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
//獲取當前用戶的目錄
