Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibatis 如何在mybatis动态查询创建中传递参数并检查它_Ibatis_Mybatis - Fatal编程技术网

Ibatis 如何在mybatis动态查询创建中传递参数并检查它

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类。按

我在mapper.xml中编写了一个select查询

从状态不为空的类别中选择count* 和cat_type_id={catTypeId,jdbcType=INTEGER} 在mapper.java中,方法是

int getCatCountint catTypeId;
如何在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);