知识总结:
- @InsertProvider @UpdateProvider @DeleteProvider
@SelectProvider - 由于注解无法拼接动态sql,所以要将拼接的过程交给别人,所以用的时候用@SelectProvider(value=拼接sql的类名.class)
value可以省略, - 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();
}
}