MyBatis-Plus快速入門(四)性能分析插件、條件構造器、代碼生成器


性能分析插件

開發過程中我們會遇到一些運行較慢的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

//獲取當前用戶的目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM