Mybatis传递多个参数

时间:2021-09-01 21:26:37


目前本人在学习Mybatis,记录一下相关知识。


   MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。在该mapper.xml中有select,update,insert,delete常用的数据库操作。你可以设置传人参数类型(parameterType),和输出结果类型(resultType,resultMap)。

问题来了,之前用Hibernate的时候,基本上你想传多少个参数,直接dao层接收多少个参数就行,直接传。MyBatis接收单个参数时很好办,直接将parameterType设为你要传的参数类型就可以。但是如何传多个参数呢?

有两种方法(目前知道两种,初学者,求轻喷):

1,通过javabean传入多个参数:

我的mapper.xml是这样的:

<!-- sql片段 -->
<sql id="sql_where_dymatic">
<if test="username!=null">
AND username=#{username}
</if>
<if test="address!=null">
AND address=#{address}
</if>
</sql>
<!-- sql综合查询 -->
<select id="findDynamic" resultType="User" parameterType="User">
SELECT * FROM user
<where>
<include refid="sql_where_dymatic"></include>
</where>
</select>
dao层是这样:

public List<User> findDynamic(User user);
只要在控制层new一个user,接着set相应属性值就行了。

2,通过map传入:

同理mapper.xml

<!-- sql片段 -->
<sql id="sql_where_dymatic">
<if test="username!=null">
AND username=#{username}
</if>
<if test="address!=null">
AND address=#{address}
</if>
</sql>
<!-- sql综合查询 -->
<select id="findDynamic" resultType="User" parameterType="map">
SELECT * FROM user
<where>
<include refid="sql_where_dymatic"></include>
</where>
</select>

接着dao层:

public List<User> findDynamic(Map paramMap);


最后在控制层将你要传递的参数以键值对的形式放入paramMap中:

@Test
public void testFindDynamic()throws Exception{

SqlSession session=getSession();
UserMapper userMapper=session.getMapper(UserMapper.class);
Map<String,String> paramMap=new HashMap<String, String>();
paramMap.put("username", "lensssss");
paramMap.put("address", "taizhouchina");
List<User> userList=userMapper.findDynamic(paramMap);
session.close();
}