mybatis-plus自定义mapper,集成wrapper参数

前言

我之前写动态sql 一直是手撸xml,拼接sql啥的,最近学习了mybatis-plus觉得里边的方法参数Wrapper函数式编程,一直在研究怎么自己写的xml文件能用上wrapper参数然后开始翻找源码,终于发现官方早给了教程,如下。

/**
     * 获取自定义SQL 简化自定义XML复杂情况
     * <p>
     * 使用方法: `select xxx from table` + ${ew.customSqlSegment}
     * <p>
     * 注意事项:
     * 1. 逻辑删除需要自己拼接条件 (之前自定义也同样)
     * 2. 不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦)
     * 3. 用法 ${ew.customSqlSegment} (不需要where标签包裹,切记!)
     * 4. ew是wrapper定义别名,不能使用其他的替换
     */
    public String getCustomSqlSegment() {
          
   
        MergeSegments expression = getExpression();
        if (Objects.nonNull(expression)) {
          
   
            NormalSegmentList normal = expression.getNormal();
            String sqlSegment = getSqlSegment();
            if (StringUtils.isNotBlank(sqlSegment)) {
          
   
                if (normal.isEmpty()) {
          
   
                    return sqlSegment;
                } else {
          
   
                    return Constants.WHERE + StringPool.SPACE + sqlSegment;
                }
            }
        }
        return StringPool.EMPTY;
    }
教程
    自定义mapper.xml文件,手撸sql按照官方要求拼接${ew.customSqlSegment},官方给出的解释:(不需要where标签包裹,切记!)
<select id="selectTableList" resultMap="BaseResultMap">
        select goods_id from table ${ew.customSqlSegment}
</select>
    绑定java接口文件,mapper.java,我们按照官方给的要求写接口:@Param(Constants.WRAPPER)=ew是wrapper定义别名,不能使用其他的替换
List<Table> selectTableList(@Param(Constants.WRAPPER) Wrapper<Table> wrapper);
    直接调用这个接口,就可以了,查询条件会自动拼接
List<Table> goodsList = goodsService.selectTableList(Wrappers.<Table>lambdaQuery()
				.eq(Table::getId, 1610815700807454721)
			);
    查看sql执行日志
select goods_id from table where id=1610815700807454721
经验分享 程序员 微信小程序 职场和发展