springboot整合mybatisplus条件构造器(七)---使用 Wrapper 自定义SQL

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

之前几篇中其实一直都在使用MP的条件构造器的,并且官方文档对它介绍的很详细了,不过之前也提到,平时用的时候一般都是将查询条件封装到一个对象中,所以就没怎么用,不过还是没忍住试了使用Wrapper自定义SQl的使用方式,顺便也记下来吧,我试了下使用它分页查询单表和多表,它这个${ew.customSqlSegment}不用我们再自己写where条件了还是挺方便的。

先看下单表分页查询,UserMapper中添加测试方法:

@Select("select * from t_user ${ew.customSqlSegment}")
Page selectByWrapper(Page page, @Param(Constants.WRAPPER) Wrapper wrapper);

CurdTest测试类中增加测试方法:

    @Test
    public void gWrapper(){
        LambdaQueryWrapper wrapper = new QueryWrapper().lambda()
                .ge(User::getAge,10).like(User::getUserName,"zhang");
        Page page = new Page(1,3);
        Page userPage = userMapper.selectByWrapper(page, wrapper);
        System.out.println(userPage.getPages() + "---" + userPage.getRecords());
    }

执行结果:

再试一下多表查询,多表查询就不能使用像上面单表一样的lambda表达式形式的写法了,只能使用QueryWrapper或者UpdateWrapper,也就是说设置查询条件的时候只能是表字段,官网也有说,

springboot整合mybatisplus条件构造器(七)---使用 Wrapper 自定义SQL_第1张图片

UserMapper类中增加测试方法:

Page selectByWrappers(Page page, @Param(Constants.WRAPPER) Wrapper wrapper);

UserMapper.xml中:

    
        
        
        
        
            
            
            
        
    

    
        select u.*,od.* from t_user u left join t_orders od on u.user_id = od.user_id
    

    

测试类中新增测试方法:

    @Test
    public void gWrapper(){
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("u.user_id",1);
        wrapper.ne("od.number","100000");
        Page page = new Page(1,3);
        Page userPage = userMapper.selectByWrappers(page, wrapper);
        System.out.println(userPage.getPages() + "---" + userPage.getRecords());
    }

执行结果:

springboot整合mybatisplus条件构造器(七)---使用 Wrapper 自定义SQL_第2张图片

多表查询的时候构造查询条件的时候居然要使用数据库字段才可以,有点不太好用了,关于KtQueryWrapper是够可以使用对象属性以后再补充,暂时先到这里,之后还是以对象的形式传递查询条件。

你可能感兴趣的:(springboot整合mybatisplus条件构造器(七)---使用 Wrapper 自定义SQL)