优秀的编程知识分享平台

网站首页 > 技术文章 正文

MyBatis动态SQL语句@Provider(mybatis动态SQL语句insert)

nanyue 2024-07-31 12:02:33 技术文章 7 ℃

Mybatis的动态SQL,用到的场景并不多,毕竟在xml文件中定义sql语句的方式,已经可以满足绝大部分的开发需求。

@Provider系列的注解有四个:

· @SelectProvider,被定义用来提供查询方法的SQL;

· @UpdateProvider,被定义用来提供更新方法的SQL;

· @DeleteProvider,被定义用来提供删除方法的SQL;

· @InsertProvider,被定义用来提供保存方法的SQL;

例子

public interface UserMapper {
  @InsertProvider(type = SqlProvider.class, method = "insert")
  void insert(User user);
  public static class SqlProvider {
    // 对应@InsertProvider注解里的method,返回对应sql
    public static String insert() {
      return "INSERT INTO users (id, name) VALUES(#{id}, #{name})";
    }
  }
}

Provider里方法的参数,可以和Mapper参数一致,也可以比Mapper少。引用Mapper的参数,主要是为了进行逻辑分支判定。

在Mapper对应的方法上,根据具体类型,选择注解。如果是更新语句,就使用@UpdateProvider,参数提供了具体的类和方法,供后续执行反射方法。

如果既有Provider,又有xml方法映射,Mybatis在启动时就会报错。

nested exception is java.lang.IllegalArgumentException: Mapped Statements collection already contains value for SqlProvider

最近发表
标签列表