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