mybatis传入多个参数的方法

使用mybatis在CRUD的时候经常会需要传入参数,在语法上,mybatis只允许传入一个参数,但是通过一些技巧,我们就可以传入多个参数。

采用在接口中加入@Param()注释为参数设置别名的方式

public interface StudentMapper {
    public Integer addStudent(@Param("sId") Integer studentId, @Param("sName")String studentName, @Param("sAge")Integer studentAge);
}
  <insert id="addStudent">
        insert into student(studentId,studentName,studentAge) values (#{sId},#{sName},#{sAge})
  </insert>

当你需要传入的参数不仅有基本类型数据,还有对象时,可以使用下面的方式

public interface StudentMapper {
/**
这里Course是一个类,封装了Course这个对象,有courseId,courseName两个属性
*/
    public Integer addStudent(@Param("sCourse") Course course,@Param("sId") Integer studentId, @Param("sName")String studentName, @Param("sAge")Integer studentAge);
}
  <insert id="addStudent">
        insert into student(studentId,studentName,studentAge,studentCourseId,studentCourseName) values (#{sId},#{sName},#{sAge},#{sCourse.courseId},#{sCourse.courseName})
  </insert>


向sql传递数组或List,mybatis使用foreach解析

foreach元素的属性主要有item,index,collection,open,separator,close。

item:集合中元素迭代时的别名,该参数为必选。

index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选

open:foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选

separator:元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。

close: foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。

collection:

   foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

    1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

    2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

    3. 如果使用Map封装了,collection的属性值为对应的Key

List<User> selectByUserIdList(@Param("userIds")String[] userIds);

因为要查看userId在userIds这个范围内,因此需要使用in关键字。那么数组是怎么在mybatis文件中使用的呢?

<select id="selectByRoleIdList" resultMap="user" >
SELECT * FROM user
    <if test="userIds!= null">
        where user_id in(
            <foreach collection="userIds" item="userId" index="index" separator="," >  
                #{userId,jdbcType=INTEGER} 
            </foreach>
        )   
    </if>

在mybatis的mapper配置文件中,可以利用<foreach>标签实现sql条件的循环,可完成类似批量的sql

mybatis接受的参数分为:(1)基本类型(2)对象(3)List(4)数组(5)Map

无论传哪种参数给mybatis,他都会将参数放在一个Map中:

如果传入基本类型:变量名作为key,变量值作为value 此时生成的map只有一个元素。

如果传入对象: 对象的属性名作为key,属性值作为value

如果传入List: “list”作为key,这个List是value (这类参数可以迭代,利用<foreach>标签实现循环)

如果传入数组: “array”作为key,数组作为value(同上)

如果传入Map: 键值不变。


评论 (0)
说点什么吧... (取消回复)