首页 > 其他分享 >mybatis

mybatis

时间:2023-02-20 21:45:25浏览次数:42  
标签:String para get public mybatis SelectProvider id

mybatis 3 增加注解@SelectProvider

mybatis 3中增加了使用注解来配置Mapper的新特性,其中@Provider的使用方式较为复杂。@provide主要分为四种:
@InsertProvider
@DeleteProvider
@UpdateProvider
// @SelectProvide指定一个Class及其方法,并且通过调用Class上的这个方法来获得sql语句
// @SelectProvider是声明在方法上的,这个方法定义在Mapper对应的的interface上
// type:指定获取sql语句的指定类 
// method:sql语句方法
@SelectProvider(type=xxx.class,method="xxx")

例1 参数带@Param或者多参

// 当mapper中传入的参数是使用@param 注解修饰,在xxxProvider类中必须使用Map对象接收参数
// 在超过一个参数的情况下,@SelectProvide方法必须接受Map<String, Object>做为参数。
@SelectProvider(type=BaseUserProvider.class,method="selectUserById")
public BaseUser selectById(@Param(value="id")Integer id);

// 可以直接使用 return "select * from base_user where id ="+para.get("id")
public String selectUserById(Map<String, Object> para){
    return new SQL(){{
        SELECT("*");
        FROM("base_user");
        WHERE("id="+para.get("id"));
    }}.toString();
}
// 多个参数加入if判断
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 (";

例2 空参或者一个参数不加@Param

// 接口
public interface UserMapper 
{
    @SelectProvider(type = SqlProvider.class, method = "selectUser")
    @ResultMap("userMap")
    public User getUser(long userId);
}
// 类
public class SqlProvider 
{
    public String selectUser(long userId) 
    {
      return "select * from user where userId=" + userId;
    }
}

参考优秀博客:
http://www.mybatis.cn/archives/709.html
https://blog.csdn.net/qq_36872046/article/details/80291939

标签:String,para,get,public,mybatis,SelectProvider,id
From: https://www.cnblogs.com/wuzimeimei/p/17139033.html

相关文章