mybatis parameterType 多个参数

文章目录

    • 一、单个参数:
      • 1.1、只有一个参数时,使用 `#{value}`
      • 1.2、一个或多个参数时,使用 `@Param` 注解(推荐)
    • 二、多个参数:
      • 2.1、`@Param` 注解(推荐)
      • 2.2、基于参数顺序
    • 三、使用对象封装多参数
    • 四、Map 封装多参数:
    • 五、List 封装 in:
    • 六、复杂参数使用Map

一、单个参数:

1.1、只有一个参数时,使用 #{value}

在动态SQL中,如果只有一个参数时,在xml文件中使用 #{value}

public interface UserMapper{
	public List<XXBean> getXXBeanList(String name);  
}
<select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">
  select t.* from tableName t where t.name= #{value}
select>  

1.2、一个或多个参数时,使用 @Param 注解(推荐)

public interface UserMapper{
	public List<XXBean> getXXBeanList(@param("id")String id);
}
<select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">
  select t.* from tableName t where t.id= #{id}
</select>

其中方法名和id一致,#{} 中的参数名与方法中的参数名一致, 这里采用的是@Param这个参数,实际上@Param这个最后会被Mabatis封装为map类型的。

select 查询的字段列表 必须和bean中的属性名一致, 如果不一致的可以使用 别名 来补充。

二、多个参数:

2.1、@Param 注解(推荐)

public interface UserMapper{
	public List<XXXBean> getXXXBeanList(@Param("id")String id , @Param("code")String code); 
}

多参数时,@Param 指定参数的名称。

xml 映射文件:

<select id="getXXXBeanList" resultType="XXBean">
  select t.* from tableName where id = #{id} and name = #{code}
select>

2.2、基于参数顺序

public interface UserMapper{
	public List<XXXBean> getXXXBeanList(String xxId, String xxCode);
}

不需要写 parameterType 参数。

<select id="getXXXBeanList" resultType="XXBean">
  select t.* from tableName where id = #{0} and name = #{1}
select>

由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始

三、使用对象封装多参数

public class UserQueryVO {
	private Integer id;
	private String code;
	
	// getter/setter....
}
public interface UserMapper{
	public List<XXBean> getXXBeanList(UserQueryVO userQueryVO); 
}
<select id="getXXBeanList" parameterType="com.xxx.entity.vo.UserQueryVO" resultType="XXBean">
  select 字段... from XXX where id=#{id} code = #{code}
select>

四、Map 封装多参数:

这个是最常见的,不多说了。

HashMap <String, Object> params = new HashMap<String, Object>();
params.put("id", "1234");
params.put("code ", "0904KIEOWO");
public interface UserMapper{
	public List<XXBean>  getXXBeanList(HashMap  params);
}
<select id="getXXBeanList" parameterType="map" resultType="XXBean">
  select 列名 from XX  where  id=#{id}  and  code = #{code}
select>

其中,hashmap是mybatis自己配置好的,直接使用就行。map中key的名字是那个就在 #{} 使用那个,map如何封装就不用了我说了吧。

五、List 封装 in:

public interface UserMapper{
	public List<XXXBean> getXXXBeanList(List<String> list);
}
<select id="getXXXBeanList" resultType="XXBean">
  select 字段... from XXX where id in
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
    #{item}  
  foreach>  
select>

foreach 最后的效果是 select 字段... from XXX where id in ('1','2','3','4')

六、复杂参数使用Map

SqlSession.selectList() 只能传递一个参数,但实际所需参数既要包含 String 类型,又要包含 List 类型。

将参数放入Map,再取出Map中的List遍历。如下:

// 定义一个 map
Map<String, Object> params = new HashMap<String, Object>();

// String类型
mparamsp2.put("siteTag", "0");

// List类型
List<String> idList = new ArrayList<String>();
idList.add("1");
idList.add("2");
params.put("idList", idList); 
public List<SysWeb> getSysInfo(Map<String, Object> params) {
  return getSqlSession().selectList("getSysInfo", params);
}
<select id="getSysInfo" parameterType="java.util.Map" resultType="SysWeb">
 select t.sysSiteId, t.siteName, t1.mzNum as siteTagNum, t1.mzName as siteTag, t.url, t.iconPath
  from TD_WEB_SYSSITE t
  left join TD_MZ_MZDY t1 on t1.mzNum = t.siteTag and t1.mzType = 10
  
  WHERE t.siteTag = #{siteTag }   
  
  and t.sysSiteId not in 
  <foreach collection="idList" item="item" index="index" open="(" close=")" separator=",">
     #{item}
  foreach>

select>

你可能感兴趣的:(#,mybatis)