我想知道在使用 mybatis 和 spring 集成时转换方法参数的最佳方法是什么。转变的原因可能有多种,例如: mybatis 无法将 java.util.Set 作为参数输入处理。
具体来说,假设我有一个 DAO 接口(interface)方法:
List<Foo> getFooForUniqueIds(Set<Long> ids);
相应的 XML 为:
<select id="getFooForUniqueIds" parameterType="java.util.Set" resultMap="foo">
SELECT f.*
FROM foo f
WHERE f.id IN <foreach collection="list" item="item" separator="," close=")" open="(">
#{item}
</foreach>
</select>
我需要一种方法来改变 Set<Long> ids
进入List<Long> ids
mybatis XML 片段可以解释。我知道我们可以提供一个直接处理 SqlSessionFactory 的具体类,但我喜欢 Spring 集成提供的抽象,我不用担心诸如获取 session 和关闭 session 之类的无趣的事情。
有人可能还会认为 DAO 应该是愚蠢的,并且转变可能应该发生在服务层。然而,这种情况下的转换是因为映射器框架的细微差别,而服务层做一些事情来抵消它似乎是不正确的。
欢迎提出建议并提前致谢!
最佳答案
这里的具体示例可以通过 @Param 提供参数名称(而不是假设它是“列表”)并在 XML 中使用该参数名称来解决。
List<Foo> getFooForUniqueIds(@Param("set") Set<Long> ids);
XML 为
<select id="getFooForUniqueIds" parameterType="java.util.Set" resultMap="foo">
SELECT f.*
FROM foo f
WHERE f.id IN <foreach collection="set" item="item" separator="," close=")" open="(">
#{item}
</foreach>
</select>
引用: https://groups.google.com/forum/?fromgroups=#!topic/mybatis-user/BGjvVw1xx_c
关于java - Mybatis spring改造参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811925/