mybatis之parameterType传递多个参数
当在查询的时候需要传入多个参数的时候该怎么办呢:
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,基本数据类型:
//java代码 @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对象
//java代码: @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
//java 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>
无为而治
分类:
mybatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术