Mybatis 的多值传递
转载:https://blog.csdn.net/youanyyou/article/details/79406486
输入类型为多值时
1、@Param注解传参法
#{}里面的名称对应的是注解 @Param括号里面修饰的名称。
这种方法在参数不多的情况还是比较直观的,推荐使用。
userMapper.xml代码: (如果传入的数据类型不一致,parameterType可以省略不写)
<!-- 登录:根据用户名密码返回user对象 --> <select id="login" parameterType="String" resultType="User"> SELECT * FROM T_USER where loginname = #{username} and loginpass = #{password} </select>
userMapper.java接口打码:
User login (@Param("username")String username,@Param("password")String password) throws Exception;
2、顺序传参法
#{}里面的数字代表你传入参数的顺序。
这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。
userMapper.xml代码: (如果传入的数据类型不一致,parameterType可以省略不写)
<select id="login" parameterType="String" resultType="User"> SELECT * FROM T_USER where loginname = #{0} and loginpass = #{1} </select>
userMapper.java接口打码:
User login(String username,String password) throws Exception;
3、Map传参法
#{}
里面的名称对应的是Map
里面的key名称。
这种方法适合传递多个参数,且参数易变能灵活传递的情况。
public User selectUser(Map<String, Object> params); <select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap"> select * from user where user_name = #{userName} and dept_id = #{deptId} </select>
4、Java Bean传参法
#{}
里面的名称对应的是User
类里面的成员属性。
这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。
public User selectUser(Map<String, Object> params); <select id="selectUser" parameterType="com.test.User" resultMap="UserResultMap"> select * from user where user_name = #{userName} and dept_id = #{deptId} </select>