不要指定
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>
使用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>
您的另一个选择是,您还可以使用 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>