Mybatis传递多个参数的4种方式
方法1:顺序传参法
1.不使用@param注解传递多个参数的情况
注: 使用jdk1.7得到的是: [1, 0, param1, param2]
使用1.8得到的则是: [arg1, arg0, param1, param2]
#{}里面的数字代表你传入参数的顺序。
这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。
举个栗子:
Dao层
User getUserById(Integer id,String name);
对应的XML编写
jdk1.7
<select id="getUserById" resultType="com.mie.entity.User">
SELECT *FROM user u WHERE u.id = #{0} AND u.name = #{1};
</select>
jdk1.8之后
<select id="getUserById" resultType="com.mie.entity.User">
SELECT *FROM user u WHERE u.id = #{param1} AND u.name = #{param2};
</select>
/**
* @Description: mybatis普通传多参
* @param
* @return void
*/
@Test
void getUserById() {
User user = userMapper.getUserById(1,"张三");
System.out.println(user);
}
//User(id=1, name=张三, password=1233)
方法2:@Param注解传参法
User getUserById(@Param("userId") Integer id,@Param("userName") String name);
<select id="getUserById" resultType="com.mie.entity.User">
SELECT *FROM user u WHERE u.id = #{userId} AND u.name = #{userName};
</select>
#{}里面的名称对应的是注解@Param括号里面修饰的名称。
这种方法在参数不多的情况还是比较直观的,推荐使用。
/**
* @Description: mybatis@Param()传多参
* @param
* @return void
*/
@Test
void getUserByIdParam() {
User user = userMapper.getUserByIdParam(1,"张三");
System.out.println(user);
}
//User(id=1, name=张三, password=1233)
方法3:Map传参法
//Map<key,value>传参
User getUserByIdMap(Map<String,String> params);
<select id="getUserByIdMap" resultType="com.mie.entity.User">
SELECT *FROM user u WHERE u.id = #{userId} AND u.name = #{userName}
</select>
#{}里面的名称对应的是Map里面的key名称。
这种方法适合传递多个参数,且参数易变能灵活传递的情况。
/**
* @Description: mybatis Map()传多参
* @param
* @return void
*/
@Test
void getUserByIdMap() {
Map<String, String> map = new HashMap<>();
map.put("userId","1");
map.put("userName","张三");
User user = userMapper.getUserByIdMap(map);
System.out.println(user);
}
//User(id=1, name=张三, password=1233)
注意: map.put(“userId”,“1”);里的key值要和xml中的#{参数值}保持一致,否则会查出user为null
方法4:Java Bean传参法
//JavaBean传参
User getUserByIdJavaBean(User user);
<select id="getUserByIdJavaBean" resultType="com.mie.entity.User">
SELECT *FROM user u WHERE u.id = #{id} AND u.name = #{name}
</select>
#{}里面的名称对应的是User类里面的成员属性。
这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。感觉和Map传参方式有异曲同工之处。
/**
* @Description: mybatis JavaBean传多参
* @param
* @return void
*/
@Test
void getUserByIdJavaBean() {
User user = new User();
user.setId(1);
user.setName("张三");
User user = userMapper.getUserByIdJavaBean(user);
System.out.println(user);
}
User(id=1, name=张三, password=1233)
版权声明:本文为weixin_45101989原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。