Mybatis动态sql之@provider使用

目录

1.简单介绍

2.@SelectProvider

3.@InsertProvider

4.@UpdateProvider

5.@DeleteProvider

6.参数传递问题


1.简单介绍

  • @provider包括@SelectProvider,@InsertProvider,@UpdateProvider,@DeleteProvider

  • 主要有两个参数:

    • type:sql类的Class对象(写动态的sql的类的类名)

    • method:类中该方法名

  • 统一用法(基于注解)
DemoDao中:
​
@对应的注解名(type=类名.class,method="方法名"):通过调用Class上的这个方法来获得sql语句    
public 方法的返回值 方法名(参数类型 参数);  
DemoSqlProvider中
public class 类型 {  
    /** 
     * 查询语句. 
     * @param demo 
     * @return 
     */  
    public String select5(参数类型 参数){  
       return new SQL(){{ 
       SELECT("*");
       FROM("student")
       if(参数.getName() != null){  
           WHERE("name=#{name}");
       }  
       if(参数.getEmail() != null){  
           WHERE("email=#{email}")
       }   
    }}.toString();  
     
}  

2.@SelectProvider

StudentDao中:
​
@SelectProvider(type=StudentSqlProvider.class,method="select5")  
public List<Demo> select5(Student demo);  
StudentemoSqlProvider中:
public cStudent StudentSqlProvider {  
​
    /** 
     * 查询语句. 
     * @param demo 
     * @return 
     */  
    public String Studentct5(Student demo){  
       public String select5(参数类型 参数){  
       return new SQL(){{ 
       SELECT("*");
       FROM("student")
       if(参数.getName() != null){  
           WHERE("name=#{name}");
       }  
       if(参数.getEmail() != null){  
           WHERE("email=#{email}")
       }   
    }}.toString();  
}  

3.@InsertProvider

@InsertProvider(type=StudentSqlProvider.class,method="save3")  
public void save3(Student demo);  
​
/** 
     * 查询语句.使用SQL 
     * @param demo 
     * @return 
     */  
    public String save3(final Student demo){  
       return new SQL(){{  
           INSERT_INTO("sutdent");  
           //多个写法.  
           INTO_COLUMNS("name","email");  
           INTO_VALUES("#{name}","#{email}");  
            
           //条件写法.  
//         if(demo.getName() != null){  
//            VALUES("name","#{name}");  
//         }  
//         if(demo.getEmail() != null){  
//            VALUES("email","#{email}");  
//         }  
            
       }}.toString();  
    }  

4.@UpdateProvider

/** 
     * @param demo 
     * @return 
     */  
    public String update2(final Student demo){  
       return new SQL(){{  
           UPDATE("sutdent");  
           //条件写法.  
           if(demo.getName() != null){  
              SET("name=#{name}");  
           }  
           if(demo.getEmail() != null){  
              SET("email=#{email}");  
           }  
           WHERE("id=#{id}");  
       }}.toString();  
    }  
    
@UpdateProvider(type=StudentSqlProvider.class,method="update2")  
public int update2(Student demo);  

5.@DeleteProvider

 /** 
     * @param id 
     * @return 
     */  
    public String delete2(@param("id") long id){  
       return new SQL(){{  
           DELETE_FROM("sutdent");  
           WHERE("id=#{id}");  
       }}.toString();  
    }  
    
@UpdateProvider(type=StudentSqlProvider.class,method="delete2")  
public int delete2(int id);  

6.参数传递问题

  • 对于只有一个参数的情况(不加param),可以直接使用,参见前面的部分。但是,如果在dao方法中,对参数使用了@Param注解的话,那么相应selectUser方法必须接受Map<String, Object>做为参数

  • 在超过一个参数的情况下,@SelectProvide方法必须接受Map<String, Object>做为参数,如果参数使用了@Param注解,那么参数在Map中以@Param的值为key

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值