Mybatis @SelectProvider注解

原:这里

作用

实习项目中MyBatis中用到了@selectProvider,功能就是用来单独写一个class类与方法,用来提供一些xml或者注解中不好写的sql。其实就是用用自定义的provider类构造SQL语句

用法

1
2
type 属性用于指定获取sql语句的指定类
method 属性用于指定类中要执行获取sql语句的方法

单个参数

mapper

1
2
@SelectProvider(type=BaseUserProvider.class,method="selectUserById")
public BaseUser selectById(@Param(value="id")Integer id);

注意
当mapper中传入的参数是使用@param注解修饰,在xxxProvider类中必须使用Map对象接收参数。

BaseUserProvider类中

1
2
3
4
5
6
7
public String selectUserById(Map<String, Object> para){
return new SQL(){{
SELECT("*");
FROM("base_user");
WHERE("id="+para.get("id"));
}}.toString();
}

此时:以上代码是借助org.apache.ibatis.jdbc.SQL类 使用固定的SELECT FROM WHERE 格式,也可以直接使用return “select * from base_user where id =” + para.get(“id”); 来实现sql拼接。

多个参数

1
2
3
4
5
6
7
8
9
10
public String selectUserById(Map<String, Object> para){
return new SQL(){{
SELECT("*");
FROM("base_user");
WHERE("id="+para.get("id"));
if(StringUtils.isNotBlank((String)para.get("username"))){
WHERE("username="+para.get("username"));
}
}}.toString();
}

注意
此时的sql写法在拼接sql中不需要在使用 and 进行连接 ,在where 方法中已拼入where 源码如下:

private static final String AND = ") \nAND (";
private static final String OR = ") \nOR (";

:转载文章请注明出处,谢谢~