轉自:wangchuanfu 的 《mybatis之parameterType傳遞多個參數》
原址:https://www.cnblogs.com/wangchuanfu/p/5877169.html
當在查詢的時候需要傳入多個參數的時候該怎麼辦呢:
1,封裝成一個Model對象,底層HashMap還是一個
User user=new User();
user.setUserName("zhangsan");
user.setPassword("123456");
queryUserByuserNameAndPass(user);//爲返回值類型爲User
<select id="queryUserByuserNameAndPass" resultType="User" parameterType="com.j1.User" >
select * from user u where u.user_name=#{userName} and u.pass_word=#{passWord}
</select>
2,使用HashMap封裝
//使用HashMap定義:
HashMap <String,Object> map=new HashMap<String,Object>();
map.put("userName","zhangsan");
map.put("password","123456");
queryUserByuserNameAndPass(map);//爲返回值類型爲User
//sql 如下:
<select id="queryUserByuserNameAndPass" resultType="User" parameterType="Map" >
select * from user u where u.user_name=#{userName} and u.pass_word=#{passWord}
</select>
3,使用註解,@param
queryUserByuserNameAndPass(@param(''userName")String userName,@param("password")String password)
<select id="queryUserByuserNameAndPass" resultType="User">
select * from user u where u.user_name=#{userName} and u.pass_word=#{passWord}//
</select>
queryUserByuserNameAndPass(String userName,String PassWord); //返回值類型爲Usre
//sql
<select id="queryUserByuserNameAndPass" resultType="User">
select * from user u where u.user_name=#{userName} and u.pass_word=#{passWord}//會報錯的
</select>
改爲如下:
<select id="queryUserByuserNameAndPass" resultType="User">
select * from user u where u.user_name=#{0} and u.pass_word=#{1}//運行成功但是,可讀性不高
</select>
//parameterType 參數類型可以是基本數據類型(int,String,long),可以是Model對象,也可以是Map;
1,基本數據類型:
@Override
public void deleteUserById(Long id) {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
sqlSession.delete("cn.itcast.mybatis.user.deleteUserById", id);
}
//sql
<delete id="deleteUserById" parameterType="java.lang.Long">
DELETE FROM tb_user WHERE id = #{id}
</delete>
2,Model對象
@Override
public void saveUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
sqlSession.insert("cn.itcast.mybatis.user.saveUser", user);
}
@Override
public void updateUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession(true);
sqlSession.update("cn.itcast.mybatis.user.updateUser", user);
}
//sql
<update id="updateUser" parameterType="cn.itcast.mybatis.pojo.User">
UPDATE tb_user
SET
password = #{password},
name = #{name},
age = #{age},
sex = #{sex},
birthday = #{birthday},
updated = NOW()
WHERE
id = #{id};
</update>
3.map
HashMap <String,Object> map=new HashMap<String,Object>();
map.put("userName","zhangsan");
map.put("password","123456");
queryUserByuserNameAndPass(map);//爲返回值類型爲User
//sql 如下:
<select id="queryUserByuserNameAndPass" resultType="User">
select * from user u where u.user_name=#{userName} and u.pass_word=#{passWord}//
</select>