MyBatis-Plus 使用 Wrapper 自定义SQL

本文介绍了MyBatis-Plus版本要求,展示了如何使用注解和XML配置进行自定义SQL操作,特别是Wrapper的高级用法。通过Wrapper可以构建复杂的查询条件,包括子查询和多条件组合。示例代码详细解释了如何通过@Select注解和XML映射文件实现动态SQL,以及如何处理多个Wrapper的情况。
摘要由CSDN通过智能技术生成
MyBatis-Plus 版本要求

需要mybatis-plus版本 >= 3.0.7

用注解
@Select("select * from some_entity ${ew.customSqlSegment}")
List<SomeEntity> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

以下用法无效,即不能传入多个Wrapper:

@Select("select * from some_entity ${ew.customSqlSegment}")
List<SomeEntity> getAll(@Param(Constants.WRAPPER) Wrapper wrapper, @Param("ew2") Wrapper wrapper2,);
用XML
List<SomeEntity> getAll(@Param(Constants.WRAPPER) Wrapper ew);

<select id="getAll" resultType="com.xxx.yyy.SomeEntity">
	SELECT * FROM some_entity ${ew.customSqlSegment}
</select>
高级用法
<select id="search" resultType="com.xxx.yyy.InnerCaseSearchResVo">
    SELECT *
    FROM inner_case AS parent
    WHERE
        <!-- 下面是子传导到父的 -->
        parent.inner_case_code IN (
            SELECT DISTINCT parent_inner_code
            FROM inner_case AS child
            WHERE
                child.parent_inner_code IS NOT NULL
                <!-- 下面是页面查询条件 -->
                AND ${ew.expression.sqlSegment}
        )
        OR
        <!-- 下面是父命中的 -->
        (
            parent.parent_inner_code IS NULL
            <!-- 下面是页面查询条件 -->
            AND ${ew.expression.sqlSegment}
        )
</select>

注意对比:

# 打印的SQL中,带where字样
${ew.customSqlSegment}
# 打印的SQL中,不带where字样
${ew.expression.sqlSegment}
资料
  • https://mybatis.plus/guide/wrapper.html#%E4%BD%BF%E7%94%A8-wrapper-%E8%87%AA%E5%AE%9A%E4%B9%89sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值