MyBatis框架-接口代理下的参数问题

使用MyBatis框架时,传递参数的种类不同,使用的方式也有所差异,单参数,多参数,对象作为参数做一个总结,例子以老生长谈的emp表为例
1.单参数-基础数据类型
查出部门编号为20的记录

EmpMapper.java

    /**
     * 根据部门编号查询记录
     * @param deptno 部门编号
     * @return list<emp>集合
     */
    public List<Emp> findBydeptno(int deptno);

EmpMapper.xml

    <!--
        parameterType是可以不写,但是写需要与接口参数的类型相同
    -->
    <select id="findBydeptno" resultType="emp">
        select * from emp where deptno = #{deptno}
    </select>

测试类

    @Test
    public void Test05(){
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        List<Emp> emps = mapper.findBydeptno(20);
        emps.forEach(System.out::println);
    }

2.多参数-基础数据类型
当传入两个基础数据类型

    /**
     * 通过部门编号deptno和奖金sal的值筛选记录
     * @param deptno 部门编号
     * @param sal 奖金
     * @return list<emp>
     *     方式一直接传入
     *     public List<Emp> findByDeptnoAndSal(int deptno, double sal);
     *     方式二为传入的参数添加注释
     *     public List<Emp> findByDeptnoAndSal(@Param("deptno") int deptno, @Param("sal") double sal);
     */
    public List<Emp> findByDeptnoAndSal(@Param("deptno") int deptno, @Param("sal") double sal);

EmpMapper.xml

	<!--
        方式一:1.通过arg来传参,arg0代表第一个参数,arg1代表第二个参数。注意在这里parameterType是不可以写的,毕竟只能写一个类型
               2.通过param来传参,param1代表第一个参数,param2代表第二个参数。
        方式二:因为已经对参数进行了注释,可以直接使用注释的字符串填写到#{}中
        注:&lt;的原型是<,具有其他意义所以使用html中的语法代替,也可以使用CDATA语法
    -->
    <select id="findByDeptnoAndSal" resultType="emp">
        <!--select * from emp where deptno = #{arg0} and sal &lt; #{arg1}-->
        <!--select * from emp where deptno = #{param1} and sal &lt; #{param2}-->
        select * from emp where deptno = #{deptno} and sal &lt; #{sal}
    </select>

测试类:

    @Test
    public void Test02(){
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        List<Emp> emps = mapper.findByDeptnoAndSal(20, 3000.0);
        emps.forEach(System.out::println);
    }

3.多参数-通过map类型传参
将需要传递的参数放入map中传递
EmpMapper.java

    /**
     * 将部门编号和奖金放入一个map中进行传递
     *
     * @param map map类型的参数
     * @return list集合
     */
    public List<Emp> findByMap(Map<String,Object> map);

EmpMapper.xml

    <!--
        parameterType 全路径本应写成java.util.Map 但mybatis做了别名,可以使用小写map进行填写
    -->
    <select id="findByMap" resultType="emp" parameterType="map">
        select * from emp where deptno = #{deptno} and sal &lt; #{sal}
    </select>

测试代码:

    @Test
    public void Test03(){
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("deptno",20);
        map.put("sal",3000.0);
        List<Emp> emps = mapper.findByMap(map);
        emps.forEach(System.out::println);
    }

4.多参数-通过实体类传递参数
创建一个emp对象,通过emp对象传递

EmpMapper.java

 /**
     * 将部门编号和奖金放入一个emp对象中传递
     * @param emp 对象
     * @return
     */
    public List<Emp> findByEmp(Emp emp);

EmpMapper.xml

	<!--
		Emp类在核心配置文件中有配置typeAlises,parameterType可以使用类名的小写类名就可
		参数名称会根据emp的属性自动解析
	-->
    <select id="findByEmp" parameterType="emp" resultType="emp">
        select * from emp where deptno = #{dept.deptno} and sal &lt; #{sal}
    </select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值