MyBatis-Plus——性能分析插件和条件查询器Wrapper

MyBatis-Plus——性能分析插件和条件查询器Wrapper,第1张

MyBatis-Plus——性能分析插件和条件查询器Wrapper MyBatis-Plus——性能分析插件和条件查询器Wrapper 1、性能分析插件

MyBatis-Plus提供了执行SQL分析打印功能,该功能完美的输出打印 SQL 及执行时长。

1、配置性能分析插件

    @Bean
    @Profile({"dev","test"})
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        performanceInterceptor.setMaxTime(10);//设置sql执行的最大时间,单位:ms
        performanceInterceptor.setFormat(true);//sql格式化
        return performanceInterceptor;
    }

2、执行sql测试

@Test
void insertTest(){
    User user = new User();
    user.setAge(20);
    user.setName("shenming");
    user.setEmail("[email protected]");
    userMapper.insert(user);
}

查看控制台日志输出:报错,但sql还是执行成功

2、条件查询器Wrapper 2.1、条件构造器的作用

MyBatis-Plus 提供的通用Mapper中,删改查(没有insert)的方法通常会需要我们传入一个条件构造器,用来生成最后执行的SQL语句

比如 userMapper.selectList( Wrapper queryWrapper); 方法,当我们传入null时,默认生成的语句就是select * from xxx,这条语句没有查询条件,排序,子查询,模糊查询并且固定查询所有的字段,如果我们需要一些复杂的查询条件,就可以使用条件构造器来指定我们的SQL需要拼接那些查询条件。

2.2、条件构造器结构

Wrapper : 条件构造抽象类,最顶端父类

AbstractWrapper :QueryWrapper(LambdaQueryWrapper)和UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件。

AbstractLambdaWrapper :Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。

LambdaQueryWrapper :Lambda形式的查询Wrapper。

LambdaUpdateWrapper :Lambda 形式的更新Wrapper。

QueryWrapper :继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取。

UpdateWrapper : 继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取。

2.3、条件构造器的使用

常用词解释:

where WHERe 语句,拼接 + WHERe 条件

and AND 语句,拼接 + AND 字段=值

andNew AND 语句,拼接 + AND (字段=值) (新的括号)

or OR 语句,拼接 + OR 字段=值

orNew OR 语句,拼接 + OR (字段=值)

eq 等于=

allEq 基于 map 内容等于=

ne 不等于<>

gt 大于>

ge 大于等于>=

lt 小于<

le 小于等于<=

like 模糊查询 LIKE

notLike 模糊查询 NOT LIKE

in IN 查询

notIn NOT IN 查询

isNull NULL 值查询

isNotNull IS NOT NULL

groupBy 分组 GROUP BY

having HAVINg 关键词

orderBy 排序 ORDER BY

orderAsc ASC 排序 ORDER BY

orderDesc DESC 排序 ORDER BY

exists EXISTS 条件语句

notExists NOT EXISTS 条件语句

between BETWEEN 条件语句

notBetween NOT BETWEEN 条件语句

addFilter 自由拼接 SQLlast 拼接在最后,例如:last(“LIMIT 1”)

查询姓名不为空,邮箱不为空,年龄大于等于12岁且小于等于20岁,版本号为1的用户

@Test
void testWrapper(){
    QueryWrapper queryWrapper = new QueryWrapper<>();
    queryWrapper.isNotNull("name")
                .isNotNull("email")
                .eq("version",1)
                .ge("age",12)
                .le("age",20);       
    //上面两行等价于:queryWrapper.between("age",12,20);
    userMapper.selectList(queryWrapper).forEach(System.out::println);
}

模糊查询:查询姓名不包含“w”,邮箱以1开头的用户数据

@Test
void test4(){
    QueryWrapper queryWrapper = new QueryWrapper<>();
    queryWrapper.notLike("name","w")
            .likeRight("email","1");
    List objects = userMapper.selectObjs(queryWrapper);
    objects.forEach(System.out::println);
}
 

说明: likeRight表示‘%’加在右侧,即"1%",likeLeft表示‘%’加在左侧,即"%1",like就是两边都加%

排序,根据id进行降序

@Test
void test5() {
    QueryWrapper queryWrapper = new QueryWrapper<>();
    queryWrapper.orderByDesc("id");
    List users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);

更多关于条件构造器的使用,可以查看官方文档https://baomidou.com/pages/10c804/#abstractwrapper,写的非常详细!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5681940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)