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

use*_*884 3 ibatis mybatis

我在我的内部编写了一个选择查询 mapper.xml

<select id="getCatCount" parameterType="String" resultType="int">
    select count(*) from Categories where status is not null  
    <if test="catTypeId != 0">
    AND cat_type_id = #{catTypeId,jdbcType=INTEGER}
    </if>  
</select>
Run Code Online (Sandbox Code Playgroud)

而在mapper.java方法中

int getCatCount(int catTypeId);
Run Code Online (Sandbox Code Playgroud)

如何在if条件下检查catTypeId.我知道上面的语句是不正确的,但我想把这样的条件放在一起,所以我检查catTypeId是否为零然后只添加AND条件.或者我是否需要传递Category类的整个对象?

jdd*_*lla 6

您不需要传递整个Category类.就像你描述的那样做:

int getCatCount(int catTypeId);
Run Code Online (Sandbox Code Playgroud)

您的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>
Run Code Online (Sandbox Code Playgroud)

请注意,parameterClass您需要指定地图.

现在,我们想要传递两个参数:

int getCatCount(int catTypeId, int mySecondParam);
Run Code Online (Sandbox Code Playgroud)

在映射器中,您应该使用param1param2

看,你需要如何使用"paramX"命名法.但是,假设使用该命名法,您希望使用自定义参数名称作为"catTypeId".为此,在Java代码中,您需要这样做:

int getCatCount( @Param("cat_type_id ") String cat_type_id);
Run Code Online (Sandbox Code Playgroud)

该XML映射器将是一个,我把它有关,但使用cat_type_id代替param1.