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

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

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值