Mybatis参数传递

来源:互联网 发布:开源cms 编辑:程序博客网 时间:2024/05/16 15:37

在Mybatis的Mapper文件中的select、insert、update、delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型。可以接受的参数类型有基本类型和复杂类型。

1.当传入的参数是一种,可以不用指定parameterType。如下的parameterType可有可无。

<select id="SelectByIsbn"  resultType="int" parameterType="java.lang.String">

select price from book where isbn = #{isbn}

</select>

2.当传入的参数是一个类型,比如这里的User类

public class User {
private int id;
private String userName;
    private int userAge;
    private String userAddress;

.........

}

这个时候就需要使用parameterType="me.focus.batis.model.User"

<select id="selectUserByName"  parameterType="me.focus.batis.model.User" resultMap="userresultmap">
select * from users where userName=#{userName}
</select>

3.当传入的参数为多个,并且这些参数的类型为多种,这个时候就可以传入map类型,直接通过#{keyname}就可以引用到键对应的值。使用@param注释的多个参数值也会组装成一个map数据结构,和直接传递map进来没有区别。

例如:我要通过用户名更新账户,需要传入用户名和账户余额

<update id="updateAccountByUsername" parameterType="map">
update account set balance=#{balance} where username=#{username}
</update>

这样只需要在Mapper接口函数的每个参数中加入@Param("UserKey")就可以了。

public void updateAccountByUsername(@Param("username")String username, @Param("balance")int balance);

当然也可以用另外一种比较麻烦的办法,就是在新建一个参数类型,将这些需要的参数封装起来,然后直接这个新的数据类型就可以了。

例如:这里是自己新建了一种数据类型LimitMap  

public List<User> selectBylimit(LimitMap lm); 

xml中查询配置:offset和limit参数是不同类型

<select id="selectBylimit" resultType="me.focus.batis.model.User" parameterType="me.focus.batis.model.LimitMap" >  
        SELECT *  
        FROM users ORDER BY id LIMIT #{offset},#{limit}
   </select>

4.集合类型:

在传递一个List或Array类型的对象作为参数,MyBatis会自动的将List或Array对象包装到一个Map对象中,List类型对象会使用list作为键名,而Array对象会用array作为键名。

集合类型通常用于构造IN条件,sql映射文件中使用foreach元素来遍历List或Array元素。

<insert id="insert" parameterType="java.util.List" >
insert users(id,userName,userAge,userAddress) 
values  
<foreach collection="list" item="item" separator=",">
(#{item.id},#{item.userName},#{item.userAge},#{item.userAddress})
</foreach>
</insert>

Mapper接口:public void insert(List<User> users);

返回结果为集合同理,加上resultType就可以了。


在这个世界上我只确定一件事。那就是人确定的事情越少越好。 —— 毛姆 

0 0