如何在带有注释的MyBatis中使用动态SQL查询(如何使用selectProvider)?

时间:2011-07-13 21:04:08

标签: orm annotations mapping mybatis

我试图避免使用额外的xml来定义mybatis3中的映射器。注释适合于。

我对@ SelectProvider / @ InsertProvider /等的使用感到有些困惑。不要以为网上有很多资源可以指导我。

基本上,我想在mybatis3中找到替代的注释版本。

例如,我有一个xml映射器,我想将其转换为使用注释

<select ...>
  <where>
    <if cause.....>
    </if>
    <if cause......>
    </if>
  </where>
</select>

有人能提供包含代码的具体答案/解决方案吗?

提前致谢!

2 个答案:

答案 0 :(得分:21)

替代解决方案可能是:

在@annotation

的开头添加<script>
@Update("<script>
  update Author
    <set>
      <if test="username != null">username=#{username},</if>
      <if test="password != null">password=#{password},</if>
      <if test="email != null">email=#{email},</if>
      <if test="bio != null">bio=#{bio}</if>
    </set>
  where id=#{id}
</script>")

另外,我们在项目中将.groovy编译为.class,因此,我们可以在@annotation中编写SQL,如上所述

答案 1 :(得分:7)

    映射器界面中的
  1. @SelectProvider(type=MyClass.class, method="myMethod")
    public Object selectById(int id);
    
  2. MyClass中的
  3. public static String myMethod() {
        return "select * from MyTable where id=#{id}"; 
    }