11、Mybatis处理传入多个参数

一、

当传入一个参数时,mybatis直接把输入的参数绑定到#{} 中的变量中。但是mybatis如何处理传入多个参数的情况呢?
例如一个库表users,有id、name、age三个字段,现在通过传入id、name两个参数来查询整条记录。对应的接口如下:

public interface UserDao {

    /*接口中出入两个参数,mybatis要处理两个输入参数*/
    public User getUser(int id, String name);

}

那么mybatis如何处理传入多个参数呢?传入多个参数时,多个参数会被封装成一个map,map的键分别对应param1、param2 …… paramN,或者map的键对应0、1 …… N,而键对应的value值才是接口中传入的数据。
例如上面接口传入的是id,name两个变量,假设两个变量对应的值分别为 1和”Tom”,这两个变量会被封装成一个map,即{“param1” : 1; “param2” : “Tom”}或者{“0” : 1; “1” : “Tom”},name在sql的映射文件中处理传入的这两个参数时,不能用下面的形式,否则会报sql语句绑定错误:

    <select id="getUser" resultType="com.lzj.mybaits.bean.User">
        select * from users where id=#{id} and name=#{name}
    </select>

因为传入的map中根本不存在id和name的键,而应该写成:

    <select id="getUser" resultType="com.lzj.mybaits.bean.User">
        select * from users where id=#{0} and name=#{1}
    </select>

或者写成:

    <select id="getUser" resultType="com.lzj.mybaits.bean.User">
        select * from users where id=#{param1} and name=#{param2}
    </select>

注意在写上面的语句中,可以不用parameterType定义输入的类型,因为mybatis会自动映射类型,但是一定要定义返回类型,例如用resultType指定。

二、

当mybatis处理多个传入参数时,用上面的方式不容易分辨,也可以在mybatis中使用命名的键,要用@Param注解来实现,接口应该定义成如下:

public interface UserDao {

    /*@Param注解可以指定映射到mybatis中的键的名字*/
    public User getUser(@Param("id") int id, @Param("name") String name);

}

在mybatis中的映射文件中就可以通过id和name的键来获取输入的参数值了,像下面的形式:

    <select id="getUser" resultType="com.lzj.mybaits.bean.User">
        select * from users where id=#{id} and name=#{name}
    </select>

三、

当传入的参数较多时,建议传入一个POJO或者一个map对象,mybatis处理时可以直接通过#{}获取pojo中属性的值或者获取map中键的值。

四、

当接口中既传入了基本类型,又传入了自定义的对象类型,例如如下形式

public interface UserDao {

    public User getUser(@Param("id") int id, @Param("us") User user);

}

在mybatis处理映射文件时,mybatis会把id和user封装到一个map中,可以通过#{param1},#{param2.id},#{param2.name},#{param2.age}来获取输入的值。 还可以通过#{id},#{us.id},#{us.name},#{us.age}来获取传入的参数值。

五、

如果接口中传入的是Collection类型的(包括List和Set)或者数组类型的,也会被封装成map类型的。
例如如果传入的是Collection类型的(包括List和Set),在mybatis中可以通过collection键来获取输入的值,#{collection},当然如果还是List类型的,还可以通过#{list}来获取。
如果接口传入的是数组类型的,在mybatis中可以通过#{array}来获取输入的参数。
例如接口为

public interface UserDao {

    public User getUser(List<Integer> usersList);

}

在mybatis中获取接口中输入的数据时,可以通过下面的形式:#{list[0]}、#{list[1]}、{list[2]} …… {list[n]}。当然也可以通过@Param注解更改键的默认名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值