美文网首页
MyBatis基于注解开发(动态SQL)

MyBatis基于注解开发(动态SQL)

作者: _FireFly_ | 来源:发表于2020-11-12 10:30 被阅读0次

    Emp

    package domain;
    
    import java.sql.Date;
    
    public class Emp {
    
        //自有属性
        private Integer empno;
        private String ename;
        private String job;
        private Integer mgr;
        private Date hiredate;
        private Float sal;
        private Float comm;
        //为了通过员工 查询员工对应的部门信息 关联属性
        private Dept dept;//(deptno dname loc)
    
    
        public Emp() {
        }
    
        public Emp(Integer empno, String ename, String job, Integer mgr, Date hiredate, Float sal, Float comm, Dept dept) {
            this.empno = empno;
            this.ename = ename;
            this.job = job;
            this.mgr = mgr;
            this.hiredate = hiredate;
            this.sal = sal;
            this.comm = comm;
            this.dept = dept;
        }
    
        @Override
        public String toString() {
            return "Emp{" +
                    "empno=" + empno +
                    ", ename='" + ename + '\'' +
                    ", job='" + job + '\'' +
                    ", mgr=" + mgr +
                    ", hiredate=" + hiredate +
                    ", sal=" + sal +
                    ", comm=" + comm +
                    ", dept=" + dept +
                    '}';
        }
    
        public Integer getEmpno() {
            return empno;
        }
    
        public void setEmpno(Integer empno) {
            this.empno = empno;
        }
    
        public String getEname() {
            return ename;
        }
    
        public void setEname(String ename) {
            this.ename = ename;
        }
    
        public String getJob() {
            return job;
        }
    
        public void setJob(String job) {
            this.job = job;
        }
    
        public Integer getMgr() {
            return mgr;
        }
    
        public void setMgr(Integer mgr) {
            this.mgr = mgr;
        }
    
        public Date getHiredate() {
            return hiredate;
        }
    
        public void setHiredate(Date hiredate) {
            this.hiredate = hiredate;
        }
    
        public Float getSal() {
            return sal;
        }
    
        public void setSal(Float sal) {
            this.sal = sal;
        }
    
        public Float getComm() {
            return comm;
        }
    
        public void setComm(Float comm) {
            this.comm = comm;
        }
    
        public Dept getDept() {
            return dept;
        }
    
        public void setDept(Dept dept) {
            this.dept = dept;
        }
    }
    

    EmpDynamic

    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();
        }
    
    }
    

    EmpDao

    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);
    
    }
    
    

    相关文章

      网友评论

          本文标题:MyBatis基于注解开发(动态SQL)

          本文链接:https://www.haomeiwen.com/subject/ubdqbktx.html