java - Mybatis spring改造参数

标签 java mybatis

我想知道在使用 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/

相关文章:

java - 使用分而治之的反转计数

java - 在 firebase (JAVA) 中插入字符串变量作为键(子)

mysql - 使用 NOT IN 和 UNION 语句构建 MyBatis 查询

java 和 mybatis - 误解一对多关系 - 仅注释

java - 如何在应用程序运行时保持对象的哈希码一致?

java - 我希望按下 JButton 后出现 JLabel

java - 当我们使用 Rest 模板在内部点击 API 时,如何在 Spring Boot 中获取 API 的 HTTP 状态

java - Eclipse导入jar包,启动Tomcat还是找不到class

java - 在mybatis中映射结果集(两个整数)?

mysql - 用于获取用户信息的 Spring Social Facebook 应用程序设置