package dynamic;
import org.apache.ibatis.annotations.Param;
public class EmpDynamic {
//类名随意写
//方法名 类中只有一个方法 如果使用默认方法名 以后注解找的时候可以省略
// provideSql(使用默认的 找寻时可以省略)
//方法名 自己随意写的也可以 找寻的时候需要告知具体哪个方法
//一个普通方法 目的自己动态拼接SQL
// 参数? job deptno
// 返回值? SQL
public String provideSql(@Param("job")String job,@Param("deptno")Integer deptno){
StringBuilder sb = new StringBuilder();
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
// 返回值String
public String getDynamicSQL(@Param("empnos")Integer...empnos){
StringBuilder sb = new StringBuilder();
sb.append("select * from emp where empno in ");
sb.append("(");//open="("
for(int i=0;i<empnos.length;i++){
sb.append(empnos[i]);
sb.append(",");// separator=","
}
sb.delete(sb.length()-1,sb.length());//多余的,删掉
sb.append(")");//close=")"
return sb.toString();
}
}
package dao;
import domain.Dept;
import domain.Emp;
import dynamic.EmpDynamic;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;
import java.util.List;
public interface EmpDao {
// //设计一个方法 根据员工empno编号 查询员工信息+所属部门信息
// @Results(
// id="selectEmp",
// value={
// @Result(property="empno",column="empno",id=true),
// @Result(property="ename",column="ename"),
// @Result(property="job",column="job"),
// @Result(property="mgr",column="mgr"),
// @Result(property="hiredate",column="hiredate"),
// @Result(property="sal",column="sal"),
// @Result(property="comm",column="comm"),
// @Result(property="dept",javaType=Dept.class,column="deptno",one=@One(select="selectDept",fetchType=FetchType.LAZY))
// })
// @Select("select * from emp where empno = #{empno}")
// public Emp selectOne(Integer empno);
//
// //辅助方法
// @Select("select * from dept where deptno = #{deptno}")
// public Dept selectDept(Integer deptno);
//====================================================
//查询所有的emp信息+每个emp对应的dept对象
// @Select("select * from emp")
// @ResultMap("selectEmp")
// public List<Emp> selectAll();
//====================================================
//支持动态SQL的方法 代理处理
//根据给定的job和deptno查询好多人 job和deptno不一定有没有
// @Select("动态---找别人拼接完成拿回来")
// @SelectProvider(EmpDynamic.class)
// public List<Emp> selectEmpsByJobAndDeptno(@Param("job")String job,@Param("deptno")Integer deptno);
//根据给定的empno查询好多人 empno不一定有几个
@SelectProvider(type=EmpDynamic.class,method="getDynamicSQL")
public List<Emp> selectEmpsByEmpno(@Param("empnos")Integer... empnos);
}