Ibatis 如何在mybatis动态查询创建中传递参数并检查它
我在mapper.xml中编写了一个select查询 从状态不为空的类别中选择count* 和cat_type_id={catTypeId,jdbcType=INTEGER} 在mapper.java中,方法是 int getCatCountint catTypeId;Ibatis 如何在mybatis动态查询创建中传递参数并检查它,ibatis,mybatis,Ibatis,Mybatis,我在mapper.xml中编写了一个select查询 从状态不为空的类别中选择count* 和cat_type_id={catTypeId,jdbcType=INTEGER} 在mapper.java中,方法是 int getCatCountint catTypeId; 如何在if条件下检查catTypeId。我知道上面的陈述是不正确的,但我想把这样的条件,所以我检查如果catTypeId不为零,然后只添加和条件。或者我需要传递整个Category类对象吗?您不需要传递整个Category类。按
如何在if条件下检查catTypeId。我知道上面的陈述是不正确的,但我想把这样的条件,所以我检查如果catTypeId不为零,然后只添加和条件。或者我需要传递整个Category类对象吗?您不需要传递整个Category类。按照你描述的那样做:
int getCatCount(int catTypeId);
您的mapper.xml应该如下所示:
<select id="getCatCount" parameterClass="map" resultType="int">
select count(*) from Categories where status is not null
<if test="param1 != 0">
AND cat_type_id = #{param1,jdbcType=INTEGER}
</if>
</select>
在映射器中,应使用param1和param2
请参阅如何使用paramX命名法。但是我们假设,您希望使用定制的参数名作为catTypeId,而不是使用该命名法。为此,在Java代码中,您需要执行以下操作:
int getCatCount( @Param("cat_type_id ") String cat_type_id);
XML映射器就是我提到的,但是使用cat_type_id代替param1。非常感谢Jddsantaella再一次提供了非常好的解释。这确实帮助我理解了一个新的api要求:它是XML中指定的参数名,而不是代码中的@Param注释吗?参数是否可以从父查询继承到子查询。假设我有一个resultMap,它有自己的主查询。最重要的是,我在这个resultMap中有一个集合,它有自己的select语句。我可以从mapper中的子SQL语句访问传递到父调用中的@Paramcat_type_id吗?我的初步测试表明这是不可能的。请注意,parameterClass=map解决方案仅适用于ibatis,而不适用于mybatis
int getCatCount( @Param("cat_type_id ") String cat_type_id);