在mybatis的学习中,会发现经常需要传参,这里以上一节写的实体类为基础,当我们要添加一个员工时,需要添加员工的基本信息,以及所属部门,按照以前的方法,在实体类中,添加部门id属性,然后通过有参构造的方法传递对象,读取对象的部门id就可以了,但是现在使用mybatis时,因为是一对多的关系,因此实体类中设置的属性是Dept属性的,没有did,因此没有办法通过有参构造的方法来传递参数,这时就要想办法将部门的id传递过去。因此需要给之前的实体类的有参构造进行修改,

mybatis传参_实体类

这样就员工的对象就可以使用有参构造来创建对象,那么添加员工的信息的dao层以及mapper文件如下:

mybatis传参_实体类_02

mybatis传参_参数类型_03


这是就会出现问题,分析原因:因为dao层在传参时,如果参数是实体的话,就可以直接在mapper中设置参数类型来解析,但是如果不是实体的话,就没办法解析了,因此当参数不是实体时,需要 用注解。

具体如下:

mybatis传参_传递参数_04

mybatis传参_传递参数_05

当使用@param注解传参时,insert标签可以不写参数类型型属性,因为参数有多个属性,所以是通过注解来区分的,当参数为对象时,调用对象的属性为 参数.属性,通过.来调用,就像本例中的emp.ename

在这里要说明,在mapper文件中使用#{}传递参数,当传递多个参数时, dao层@param()内的值就是在mapper文件中#{}变量的名字,通过@param()注解来传递参数。单个参数可以不需要设置注解,需要指定参数调用的名字就需要设置

在mybatis中传参分为参数传递(需要加注解),实体传参,map传参。