100.【MybaisPlus】(四)

简介: 100.【MybaisPlus】

(四)、性能分析、条件查询、自动生成器

1.性能分析插件

我们在平时的开发中,会遇到一些慢sql。测试!

MybatisPlus也提供性能分析插件,如果超过这个时间就停止运行!

  1. 导入插件
// 性能分析插件
    @Bean
    @Profile({"dev","test"})  //设置dev test 环境开启,保证我们的效率
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        // 在工作中,不允许用户等待
        performanceInterceptor.setMaxTime(1000);   //设置sql执行的最大时间,如果超过了则不执行
        performanceInterceptor.setFormat(true);  // 是否格式化代码
        return performanceInterceptor;
    }

然后再我们的配置环境为dev或者test环境。

#设置开发环境
spring.profiles.active=dev
  1. 测试使用
@Test
    void contextLoads() {
        // 参数: 参数是一个wrapper,条件构造器。我们不添加条件就是查询全部信息
        List<user> users = userMapper.selectList(null);
        //  语法堂便利信息
       users.forEach(System.out::println);;
    }

如果在执行的时间里: 那么将会查出来结果,否则不会查出结果。

2.条件查询器Weapper

十分重要: Wrapper.

我们写一些复杂的sql就可以使用它来替代!

(1).不为空,大于且等于
@Test
    void contextLoads(){
        // 查询name不为空的,并且邮箱不为空的用户,年龄大于12
        QueryWrapper<user> wrapper = new QueryWrapper<>();
        // 链式编程
        wrapper
                .isNotNull("name")   //名字不为空
                .isNotNull("email")  //邮箱不为空
                .ge("age",12);  //g是大于,e是等于
        userMapper.selectList(wrapper).forEach(System.out::println); //遍历
    }

(2).仅相等 且 唯一
@Test
    void test2(){
        // 查询到指定的名字
        QueryWrapper<user> wrapper = new QueryWrapper<>();
        wrapper.eq("name","吉士先生");  // eq 就是说equal();
        System.out.println(userMapper.selectOne(wrapper));  // 查询一个数据,出现多个结果使用List 或者 Map会出错
    }

(3). 区间 和 查询的数目
@Test
    void test3(){
        //查询年龄在20-30岁之间的用户
        QueryWrapper<user> wrapper = new QueryWrapper<>();
        wrapper.between("age","0","30"); //查询某一个字段的区间
        System.out.println(userMapper.selectCount(wrapper)); // 查询结果数
    }

(4).不包含某个值 且 以某个开头
@Test
    void test4(){
        // 查询名字中不包含 吉 且 邮箱以 t 开头的
        QueryWrapper<user> wrapper = new QueryWrapper<>();
        wrapper
                .notLike("name","吉") //查询名字中不包含 吉 的数据  %吉%
                .likeRight("email","t"); // 查询开头是 t 的数据  也就是 t%
        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
        maps.forEach(System.out::println);
    }

(5).IN 查询
@Test
    void test5(){
        // id 在子查询中查出来  IN查询
        QueryWrapper<user> wrapper = new QueryWrapper<>();
        wrapper.inSql("id","select id from user where id<15");  // IN 查询
        List<Object> objects = userMapper.selectObjs(wrapper);
        objects.forEach(System.out::println);
    }

(6).排序
@Test
    void test6(){
        //通过id进行排序 
        QueryWrapper<user> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("id");  // 降序 DESC 升序 ASC
        userMapper.selectList(wrapper).forEach(System.out::println);
    }

3.代码自动生成

dao、pojo、service、controller都给我自己去编写完成!

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、

Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

只需要改实体类名字 和包名 还有 数据库配置即可

我们在测试类上创建一个类,然后引入一下内容

package com.jsxs;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
// 代码自动生成
public class JsxsCode {
    public static void main(String[] args) {
        // 需要构建一个代码自动生成器 对象
        AutoGenerator mpg = new AutoGenerator();
        // 配置策略
    // 1. 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath+"/src/main/java");  // 输出目录
        gc.setAuthor("吉士先生");  //作者
        gc.setOpen(false); //是否弹出文件夹在桌面 -否
        gc.setFileOverride(false);  //是否覆盖原来生成的
        gc.setServiceName("%sService");  //去Service的I前缀 正则表达式
        gc.setIdType(IdType.ID_WORKER);  //主键生成策略
        gc.setDateType(DateType.ONLY_DATE);  //日期类型
        gc.setSwagger2(true); //设置swagger
        // 2.丢到容器中
        mpg.setGlobalConfig(gc);
    //3.设置数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUsername("root");
        dsc.setPassword("121788");
        dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?userUnicode=true&characterEncoding=utf-8");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setDbType(DbType.MYSQL); //数据库类型
        mpg.setDataSource(dsc);
    //4.包的配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("blog");  //模块名字
        pc.setParent("com.jsxs");  //代码放在这里
        pc.setEntity("entity");  //实体类的包名
        pc.setMapper("mapper"); // 名字
        pc.setService("service"); //名字
        pc.setController("controller"); //名字
        mpg.setPackageInfo(pc);
    // 5.策略配置->插件
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("user");  //********映射的表名*********
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);  //自动Lombok
        // 逻辑删除
        strategy.setLogicDeleteFieldName("deleted");
        // 自动填充配置
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);  //插入
        TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE); //修改
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmtCreate); tableFills.add(gmtModified);  //添加到策略
        strategy.setTableFillList(tableFills);
        // 乐观锁
        strategy.setVersionFieldName("version");
        strategy.setRestControllerStyle(true);
        strategy.setControllerMappingHyphenStyle(true);
        mpg.setStrategy(strategy);
        mpg.execute();;
    }
}

需要导入俩依赖:MyBatis-Plus 从 3.0.3之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:

<!--        自动生成代码依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>

相关文章
|
16天前
|
人工智能 关系型数据库 分布式数据库
手把手搭本地 RAG!用阿里云 PolarDB、Lindorm+Ollama,数据隐私全自己把控
教你用阿里云PolarDB和Lindorm存向量,Ollama跑本地大模型,LangChain串联流程,打造数据不出私网的离线智能问答系统,安全、省钱、可私有化部署,新手也能快速上手!
137 0
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。
656 17
|
9月前
|
Ubuntu Linux 网络安全
Linux磁盘挂接教程
Linux磁盘挂接教程
167 14
|
11月前
|
负载均衡 监控 网络协议
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
448 15
ly~
|
12月前
|
人工智能 搜索推荐 自动驾驶
人工智能的应用
人工智能在多个领域广泛应用,包括:医疗领域的疾病诊断、药物研发和医疗机器人;交通领域的自动驾驶和智能交通管理;金融领域的风险评估、金融诈骗检测和投资决策;教育领域的个性化学习和智能辅导;工业领域的质量检测和生产流程优化;家居领域的智能家居系统,如智能音箱和智能灯具等,极大提升了各行业的效率与服务质量。
ly~
769 1
|
机器学习/深度学习 自动驾驶 算法
基于深度学习的图像识别技术在自动驾驶领域的应用
【5月更文挑战第30天】 随着人工智能技术的飞速发展,特别是深度学习在图像处理和识别方面的突破,自动驾驶汽车逐渐成为可能。本文旨在探讨基于深度学习的图像识别技术如何赋能自动驾驶系统,提高其准确性与可靠性。文中首先介绍了深度学习在图像识别中的关键算法,随后分析了这些技术在复杂交通环境中的具体应用,以及它们在提升自动驾驶安全性方面的潜在价值。最后,文章讨论了目前该领域所面临的挑战和未来的发展方向。
|
SQL 存储 安全
网络安全与信息安全:从漏洞到防护的全方位解析
【9月更文挑战第20天】在数字化时代,网络安全和信息安全的重要性日益凸显。本文将深入探讨网络安全的多个方面,包括常见的安全漏洞、加密技术的应用以及提升个人安全意识的方法。我们将通过实例分析,揭示网络攻击者如何利用安全漏洞进行入侵,同时展示如何使用加密技术保护数据安全。此外,我们还将讨论如何通过教育和实践提高大众的安全意识,以减少安全威胁的发生。文章旨在为读者提供一套全面的网络安全知识体系,帮助他们在日益复杂的网络环境中保护自己的信息资产。
|
机器学习/深度学习 编解码 算法
ASF-YOLO开源 | YOLOv5范式永不言败,SSFF融合+TPE编码+CPAM注意力,再战精度巅峰!
ASF-YOLO开源 | YOLOv5范式永不言败,SSFF融合+TPE编码+CPAM注意力,再战精度巅峰!
778 0
|
Java API 开发者
Java网络编程基础与Socket通信实战
Java网络编程基础与Socket通信实战
116 15
|
机器学习/深度学习 存储 人工智能
【玩转 GPU】英伟达GPU架构演变
【玩转 GPU】英伟达GPU架构演变
895 0
【玩转 GPU】英伟达GPU架构演变