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

发布于 2024-11-23 16:40:25 字数 439 浏览 3 评论 0原文

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

我对 @SelectProvider/@InsertProvider/etc 的用法有点困惑。不要认为网上有很多资源可以指导我完成这个任务。

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

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

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

任何人都可以提供包括代码在内的具体答案/解决方案吗?

提前致谢!

I am trying to avoid having an additional xml to define the mapper in mybatis3. Annotation fits right in.

I am a bit confused by the usage of @SelectProvider/@InsertProvider/etc. Don't think there are many resources online guiding me through this.

Basically, I will like to find the annotation version of alternative for in mybatis3.

For example, I have a xml mapper and I wanna convert it to use annotation

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

Could anyone provide a concrete answer/solution including the code?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

公布 2024-11-30 16:40:25

另一种解决方案是:

在 @annotation 的开头添加

@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像上面一样

An alternative solution for you could be:

Add <script> at the beginning of your @annotation

@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>")

In additional, we compile .groovy to .class in our projects, thus, we can write SQL in @annotation like above

吃→可爱长大的 2024-11-30 16:40:25
  1. 在您的映射器界面中:

    @SelectProvider(type=MyClass.class, method="myMethod")
    公共对象 selectById(int id);
    
  2. 在 MyClass 中:

    public static String myMethod() {
        return "select * from MyTable where id=#{id}"; 
    }
    
  1. in your mapper interface:

    @SelectProvider(type=MyClass.class, method="myMethod")
    public Object selectById(int id);
    
  2. in MyClass:

    public static String myMethod() {
        return "select * from MyTable where id=#{id}"; 
    }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文