动态SQL在注解中的方式

知识总结:

  1. @InsertProvider @UpdateProvider @DeleteProvider
    @SelectProvider
  2. 由于注解无法拼接动态sql,所以要将拼接的过程交给别人,所以用的时候用@SelectProvider(value=拼接sql的类名.class)
    value可以省略,
  3. EmpDynameic拼接sql语句的类,如果拼接sql的方法不是默认provideSql名字,则@SelectProvider(Type=类名.class,method=“方法名”),如果拼接sql的方法是默认的provideSql名字,则用:@SelectProvider(value=拼接sql的类名.class)

代码如下

接口中

package dao;

import domain.Emp;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface IEmp {
    //支持动态SQL的方式,根据给定的job和deptno动态查询
    /* 由于注解无法拼接动态sql,所以要将拼接的过程交给别人
    *  用的时候用@SelectProvider(value=拼接sql的类名.class) value可以省略,
    * EmpDynameic拼接sql语句的类,如果拼接sql的方法不是默认的provideSql名字,则
    * @SelectProvider(Type=类名.class,method="方法名"),如果拼接sql的方法是默认的provideSql名字
    * 则用:@SelectProvider(value=拼接sql的类名.class)
    * */
    @SelectProvider(value=EmpDynameic.class)
    public List<Emp> selectEmpByJobAndDeptno(@Param("job") String job, @Param("deptno") int deptno);

    //根据给定的empno查询多个人,empno不一定有几个,如多选
    @SelectProvider(type=EmpDynameic.class,method="getDynamicSql")
    public List<Emp> selectEmpByEmpno(@Param("empnos") Integer...empnos);
}

负责为接口拼接Sql语句的类中

package dao;

import org.apache.ibatis.annotations.Param;

public class EmpDynameic {
    //负责为注解拼接sql语句
    public String provideSql(@Param("job") String job, @Param("deptno") Integer deptno){
        StringBuffer sb=new StringBuffer();
        sb.append("select * from emp where 1=1");
        if(job!=null&&"".equals(job)){
            sb.append(" and job=#{job}");
        }
        if(deptno!=null){
            sb.append(" and deptno=#{deptno}");
        }
        return sb.toString();
    }

    //负责拼接多选的sql语句,参数可以为数组,集合 empnos
   public String  getDynamicSql(@Param("empnos") Integer...empnes){
        StringBuffer sb=new StringBuffer();
        sb.append("select * from emp where empno in");
        sb.append("(");//相当与open="(" close=")"
       for(int i=0;i<empnes.length;i++){
           sb.append(empnes[i]);
           sb.append(",");//相当与separator=","
       }
       sb.delete(sb.length()-1,sb.length());//将多余的,删掉
       sb.append(")");//相当与close=")"
       return  sb.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值