mybatis parameterType 传入多个参数的使用
一、一个参数(对象)
1.1、只有一个参数一个值时,使用 #{value}
在动态SQL中,如果只有一个参数时,在xml文件中使用 #{ value }
。
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(String name);
}
mapper.xml :
<select id="getUserList" parameterType="java.lang.String" resultType="SysUser">
select t.* from sys_user t where t.name= #{value}
</select>
1.2、Map 封装的一个参数多个值:
这个是最常见的,不多说了。
示例1:
数据对象:
HashMap <String, Object> params = new HashMap<String, Object>();
params.put("id", "1234");
params.put("code ", "ABCD");
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(Map params);
}
mapper.xml :
<select id="getUserList" parameterType="map" resultType="SysUser">
select t.* from sys_user t where id=#{id} and code = #{code}
</select>
示例2:(有比较复杂的参数)
如果参数既要包含 String 类型,又包含 List 类型,使用Map 来封装参数。 其实就是与 1.3
的内容。
将参数放入Map,再取出Map中的List遍历。如下:
// 定义一个 map
Map<String, Object> params = new HashMap<String, Object>();
params.put("status", "0");
// List类型
List<String> ids= new ArrayList<String>();
ids.add("1");
ids.add("2");
params.put("ids", ids);
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(Map params);
}
mapper.xml :
<select id="getUserList" parameterType="map" resultType="SysUser">
select t.*
from sys_user t
WHERE t.status = #{status}
<if test=' ids != null and ids.size() > 0 '>
and t.id not in
<foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</select>
1.3、使用对象封装的一个参数多个值
数据对象:
public class UserQueryVO {
private Integer id;
private String code;
// getter/setter....
}
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(UserQueryVO userQueryVO);
}
mapper.xml :
<select id="getUserList" parameterType="com.xxx.entity.vo.UserQueryVO" resultType="SysUser">
select t.* from sys_user t where id=#{id} code = #{code}
</select>
1.4、List 封装 in:
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(List<String> idsIn);
}
mapper.xml :
<select id="getUserList" resultType="SysUser">
select t.* from sys_user t
where id in
<foreach collection="idsIn" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
foreach 最后的效果是 select 字段... from XXX where id in ('1','2','3','4')
二、使用 @param
指定参数
2.1、一个参数
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(@param("id")String id);
}
mapper.xml :
<select id="getUserList" parameterType="java.lang.String" resultType="SysUser">
select t.* from sys_user t where t.id= #{id}
</select>
mapper.xml 中 #{id}
的 id
,对应的是 @param("id")
中指定的名称 id
,而不是String id
的 id
。
2.1、多个参数(重点)
数据:
// List类型
List<String> ids= new ArrayList<String>();
ids.add("1");
ids.add("2");
params.put("ids", ids);
String code = "1";
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(@Param("idIn")String ids, @Param("codeStr ")String code);
}
多参数时,@Param()
中指定参数的名称,在 mapper.xml 中引用
mapper.xml :
<select id="getUserList" resultType="SysUser">
select t.*
from sys_user t
where id in
<foreach collection="idIn" item="item" open="(" separator="," close=")">
#{item}
</foreach>
and code= #{ codeStr }
</select>
三、多参数,基于参数顺序
Mapper 接口:
public interface UserMapper{
public List<SysUser> getUserList(String id , String code);
}
不需要写 parameterType 参数。
mapper.xml :
<select id="getUserList" resultType="SysUser">
select t.* from sys_user t
where id = #{0} and name = #{1}
</select>
这里不再使用参数名,使用索引,即 #{ index }
。index 索引从 0 开始递增。
摘抄自网络,便于检索查找。
分类:
old
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2022-01-02 echo和Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
2022-01-02 CPU 环、权限和保护
2022-01-02 内存中的程序剖析
2022-01-02 Ubuntu命令行的垃圾箱,回收站
2022-01-02 6个关于dd命令备份Linux系统的例子
2016-01-02 [No000076]用Eclipse编写python(配置PyDev插件)