mybatis 使用 include,param 解析失败

mybatis use include,param parse failed

提问人:zhili 提问时间:11/13/2023 最后编辑:zhili 更新时间:11/13/2023 访问量:38

问:

我正在使用 mybatis 3.5.6,我想使用 sql 来提取我的data_permission sql,像这样,

    <select id="listByPermission" resultType="com.lvyou.micro.domain.entity.guide.GuideDO">
        select guide.* from group_guide as guide
        where guide.is_deleted = 0
        <include refid="data_permission">
            <property name="tableAlias" value="guide"/>
            <property name="typeId" value="#{permission.typeId}"/>
        </include>
    </select>

    <sql id="data_permission">
                <choose>
                    <when test="${typeId} == 2">
                       <!-- some sql -->
                       ... 
                    </when>
<
                    <otherwise>
                     <!-- other sql -->
                      ... 
                    </otherwise>
                </choose>

    </sql>

参数权限为接口 defind,权限包含参数

List<GuideDO> listByPermission(@Param("guideNoList") List<String> guideNoList,@Param("permission") UserPermissionDTO permission);

in testcase:
 UserPermissionDTO permissionDTO = new UserPermissionDTO();
        permissionDTO.setTypeId(2);
guideMapper.listByPermission(CollUtil.toList("TCLY-DY-0004"), permissionDTO);

我想测试typeId是什么,然后联系不同的sql,但是当我运行我的测试用例时,然后抛出:

org.mybatis.spring.MyBatisSystemException:嵌套异常为 org.apache.ibatis.exceptions.PersistenceException: 查询数据库时出错。原因:java.lang.NumberFormatException:对于输入字符串:“{2=null}” 原因:java.lang.NumberFormatException:对于输入字符串:“{2=null}”

我怎样才能测试我的typeId?非常感谢你!

米巴蒂斯

评论

0赞 ave 11/13/2023
重要的是要了解这是在分析阶段评估的,而不是在运行时评估的。指定为属性值没有意义。你能简化这个例子吗?我认为,不必有那么多变量/条件来重现问题。此外,我们可能需要有关参数的信息(类定义,在运行时设置的值)。<include>#{}
0赞 zhili 11/13/2023
您好,@ave,感谢您的帮助,我编辑我的问题。如果您需要更多信息,我很乐意提供!
0赞 ave 11/13/2023
我认为您只需要替换为 .不过,目前尚不清楚这是从哪里来的。如果在零件中使用了 ,您应该向我们展示它是如何使用的。value="#{permission.typeId}"value="permission.typeId"{2=null}typeId...
0赞 zhili 11/13/2023
你好,@ave,typeId只是在“where test”中使用,但是我无法替换它,其他选择使用的typeId是这样的: <include refid=“data_permission”> <属性名称=“tableAlias” value=“guide”/> <属性名称=“typeId” value=“#{typeId}”/> </include> 这个参数 typeId 也是表单调用者,再次感谢您的帮助,我想要其他SQL可以使用的SQL。
0赞 zhili 11/13/2023
@ave,我理解你说替换值,我测试了一下,现在看起来没问题,非常感谢!

答: 暂无答案