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

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

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

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

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

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

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

执行结果:

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

UserMapper类中增加测试方法:

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

UserMapper.xml中:

    <resultMap id="userOrderResultMap" type="com.example.springbootmp.dto.user.UserOrdersDto">
        <id property="userId" column="user_id" />
        <result property="userName" column="user_name" />
        <result property="age" column="age" />
        <collection property="orders" column="user_id" ofType="com.example.springbootmp.domain.Order">
            <id property="orderId" column="order_id" />
            <result property="userId" column="user_id" />
            <result property="number" column="number" />
        </collection>
    </resultMap>

    <sql id="user_orders">
        select u.*,od.* from t_user u left join t_orders od on u.user_id = od.user_id
    </sql>

    <select id="selectByWrappers" resultMap="userOrderResultMap" >
        <include refid="user_orders"></include>
        ${ew.customSqlSegment}
    </select>

测试类中新增测试方法:

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

执行结果:

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatisplus 自定义sql 使用条件构造器可以在自定义 SQL 语句中使用 Mybatisplus 的条件构造器,方便快捷地构造查询条件使用步骤: 1. 在 Mapper 接口中定义自定义 SQL 语句的方法,方法返回值为 List 或者其他需要返回的结果类型。 2. 在自定义 SQL 语句中使用 ${} 占位符来引用条件构造器生成的 SQL 片段。 3. 在方法参数中使用 @Param 注解来指定条件构造器生成的 SQL 片段的参数名称和类型,同时在自定义 SQL 语句中使用 #{参数名} 占位符来引用参数。 4. 在方法中使用 QueryWrapper 类来构造查询条件,然后将 QueryWrapper 对象作为参数传递给自定义 SQL 语句方法即可。 示例代码如下: ``` @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user ${ew.customSqlSegment}") List<User> selectByCustomSql(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper); } ``` 其中,${ew.customSqlSegment} 是 Mybatisplus 条件构造器生成的 SQL 片段,@Param(Constants.WRAPPER) 指定了 wrapper 参数的名称和类型。 调用示例: ``` QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("age", 18).like("name", "张"); List<User> userList = userMapper.selectByCustomSql(wrapper); ``` 以上代码中,使用 QueryWrapper 构造了查询条件,然后将 QueryWrapper 对象作为参数传递给 selectByCustomSql 方法,该方法会根据传入的 QueryWrapper 对象生成自定义 SQL 语句,并返回符合条件的用户列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值