如何传递多个参数并使用它们?

问题描述 投票:0回答:3
spring mybatis ibatis
3个回答
56
投票

不要指定

parameterType
,但在映射器中的参数上使用
@Param
注释:

@Mapper
public interface MyMapper {

    void update(@Param("a") A a, @Param("b") B b);

    ...
}

然后在映射中引用它们:

<update id="update" > 
   UPDATE SOME WHERE x=#{a.x} AND y=#{b.y}
</update>

8
投票

使用parameterType=“map”和@Param注释。

接口中声明的方法:

void mapCategoryAndPage(@Param("categoryLocalId") Long categoryLocalId, @Param("pageLocalId") Long localId);

@Param注解的值不要求必须等于参数名称

<insert id="mapCategoryAndPage" parameterType="map">
    INSERT INTO
        category_page_mapping (
            page_local_id,
            category_local_id)
    VALUES
        (#{pageLocalId},
         #{categoryLocalId});
</insert>

0
投票

您的另一个选择是,您还可以使用 DTO 携带多个参数供映射器使用,这实际上还不错,尤其是当 1 个 sql 有很多参数时。
这样,您就不需要担心参数名称,因为它们将被映射为与 DTO 中的字段名称相同。

示例:

@Mapper
public interface DummyItemMapper {
    void addDummyItem(DummyItemDto dummyItemDto);
}
<mapper namespace="xxx.mapper.DummyItemMapper">
   
   <insert id="addDummyItem">
       insert into dummy_item (dummy_item_id, dummy_item_name)
       values (#{dummyItemId}, #{dummyItemName})          
   </insert>
   
</mapper>
© www.soinside.com 2019 - 2024. All rights reserved.