MybatisPlus性能分析与条件构造器wrapper

 性能分析插件p6spy

在平时的使用中会遇到一些比较慢的sql

作用:性能分析拦截器,用于输出每条 SQL 语句及其执行时间

p6spy原理

p6spy将应用的数据源给劫持了,应用操作数据库其实在调用p6spy的数据源,p6spy劫持到需要执行的sql或者hql之类的语句之后,他自己去调用一个realDatasource,再去操作数据库

pom.xml导入p6spy坐标

<!--  性能分析插件      -->
        <dependency>
            <groupId>p6spy</groupId>
            <artifactId>p6spy</artifactId>
            <version>3.9.0</version>
        </dependency>

application.yaml配置文件中

#配置相关信息
spring:
  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
#
    url:  jdbc:p6spy:mysql://localhost:3306/mybatisplus?useSSL=false&serverTimezone=GMT%2B8
#    url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC
    username: root
    password: 123456

在resource新建spy.properties

driverlist=com.mysql.cj.jdbc.Driver

logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat

databaseDialectDateFormat=yyyy-MM-dd HH:mm:ss

appender=com.p6spy.engine.spy.appender.StdoutLogger

测试代码

  //  测试批量查询!
     @Test
     public void testSelectByBatchId(){
     List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
     users.forEach(System.out::println);
    }

运行结果

条件查询器wrapper

官网查看mp条件构造器

 isNotNull匹配不为空的

@SpringBootTest
public class TestWrapper {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void test1(){
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        //查询name字段不为空,且年龄大于等于15的
        //wrapper返回的还是对象,所以可以直接.操作
        wrapper.isNotNull("name").ge("age", 15);
        userMapper.selectList(wrapper);
    }
}

运行结果,条件构造器的本质就是省sql语句的编写,可以用来做些判断

 eq匹配相等

 @Test
    public void test2(){
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        //查询name为kongchao的
        wrapper.eq("name", "kongchao");
    userMapper.selectOne(wrapper);
    }

 between查询区间

  @Test
    public void test3(){
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        //查询年龄在10-18岁的(闭区间)
        wrapper.between("age", 10, 18);
        userMapper.selectList(wrapper);
    }

like模糊匹配

    @Test
    public void test4(){
        QueryWrapper<User> wrapper=new QueryWrapper<>();
        //名字中不含o,邮箱是以t开头 (t%)
        wrapper.notLike("name", "o").likeRight("email", "t");
        userMapper.selectList(wrapper);
    }

 insql子查询

    @Test
    public void test5(){
        QueryWrapper<User> wrapper=new QueryWrapper<>();
       wrapper.inSql("id", "select id from user where age>=20");

        userMapper.selectList(wrapper);
    }

 orderByDesc排序

    @Test
    public void test6(){
        //id降序排序
        QueryWrapper<User> wrapper=new QueryWrapper<>();
       wrapper.orderByDesc("id");

        userMapper.selectList(wrapper);
    }

猜你喜欢

转载自blog.csdn.net/weixin_60719453/article/details/127934578
今日推荐