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