mybatis plus wrapper条件构造器使用经验技巧分享

748 阅读2分钟

摘要

刚开始接触mybatis plus wrapper条件构造器的时候,我觉得这个东西最多只是做一下基础的增删查改,无法支持比较复杂的查询或者更新什么的,随着逐步的深入,我改变了我的看法,这个东西是真的非常香,基本不是非常复杂场景用它都会比较方便,这种“偷懒”的事情我个人觉得非常香,总之我就是不想写xml文件,哈哈! 下面分享一下我的使用经验,主要是一些个人觉得不容易理解得点,后面有机会也会做一些补充,有不对的地方还望各位大佬斧正

基础用法

想要使用wrapper条件构造器其实很简单,这里跳过项目引入mybatis plus 的方法,如果有朋友想要了解网上一堆,推荐谷歌一下。 假如我们的数据库表里面有sys_a、sys_b两张表

CREATE TABLE `sys_a`
(
    `id`             BIGINT UNSIGNED     NOT NULL DEFAULT 0 COMMENT 'ID',
    `title`          VARCHAR(255)        NOT NULL DEFAULT '' COMMENT '标题',
    `code`           VARCHAR(150)        NOT NULL DEFAULT '' COMMENT '编号',
    CONSTRAINT `pk_sys_a_id` PRIMARY KEY (`id`)
) COMMENT = 'A表';

CREATE TABLE `sys_b`
(
    `id`             BIGINT UNSIGNED     NOT NULL DEFAULT 0 COMMENT 'ID',
    `title`          VARCHAR(255)        NOT NULL DEFAULT '' COMMENT '标题',
    `code`           VARCHAR(150)        NOT NULL DEFAULT '' COMMENT '编号',
    CONSTRAINT `pk_sys_b_id` PRIMARY KEY (`id`)
) COMMENT = 'B表';

正常情况下我们可以这样子使用查询

QueryWrapper<A> wrapper = new QueryWrapper<>(); 
wrapper.eq("id", 1); 
List<A> list = this.mapper.selectList(wrapper);

exists用法

1.使用exists方法的时候我们难免想要使用表的别名,但是直接用QueryWrapper来new出的条件对象并没有办法赋予表的别名,除非你把整个SQL语句写完,可以这样的话就违背了我们不想写SQL使用mybatis-plus的初衷,这个时候怎么办呢?
假如我们的数据库表里面有A、B两张表如上
然后我们执行以下的SQL语句

SELECT * FROM A WHERE 
EXISTS(SELECT 1 FROM B WHERE A.ID = B.AID)

结果我们发现上面的SQL语句是能够正常运行的,也就是说不指定别名的时候表的别名就是表的本身,好家伙把我们使用exists方法的难点一下子就解决了
2.然后我们就可以这样去使用它了

QueryWrapper<A> wrapper = new QueryWrapper<>();
wrapper.exists("SELECT 1 FROM B WHERE A.ID = B.AID");
List<A> list = this.mapper.selectList(wrapper);