mybatis 关于 传入参数为集合list和map的写法

1、mybatis 中foreach的用法

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束。

使用 foreach 时特别要注意这个属性,不同的条件下这个值是不一样的

(1)、当传入的参数为list的时候,collection属性值为list

(2)、当传入的参数为array,collection的属性值为array

例如,当传入的参数为
list的时候

<select
id="selectUserByUserIdList" parameterType="java.util.List" resultMap="BaseResultMap">

select * from user_user_t  where

<if test="list!= null">

user_id in

<foreach item="item" index="index" collection="list"  open="("

separator="," close=")">

#{item}

</foreach>

</if>

</select>

当传入的参数为array的时候

<select
id="selectUserByUserIdList" parameterType="java.util.List" resultMap="BaseResultMap">

select * from user_user_t  where

<if test="list!= null">

user_id in

<foreach item="item" index="index" collection="array"
 open="("

separator="," close=")">

#{item}

</foreach>

</if>

</select>

2、当传入的参数为map的时候

比如 Map<String,
Object> map=new HashMap<>();

map.put("userName",

name);

map.put("userPhoto",
photo);

那么在mybatis中怎样写呢

<select
id="selectUserByParams"       parameterType="Map" resultMap="BaseResultMap">

select * from user_user_t  where  user_name=#{

userName ,jdbcType=VARCHAR} and user_photo=#{userPhoto,jdbcType=VARCHAR}

</select>

3、当传入的参数为map,并且map的key为list,那么在mybatis中又该怎么写呢

例如: List<String> label=new ArrayList<>;

label.add("ky");         label.add("gt")

Map<String,
Object> map=new HashMap<>();

map.put("labelList", label);

<select
id="selectProCustomerInqueryByParams" parameterType="Map" resultMap="BaseResultMap">

select * from pro_customer_inquery_t where

<if test="labelList!=null and

labelList.size() != 0">

(

<foreach collection="labelList" item="value"  index="index">

<if test="(index+1)==labelList.size()">

content=#{value,jdbcType=VARCHAR}) and

</if>

<if test="(index+1)!=labelList.size()">

content=#{value,jdbcType=VARCHAR} or

</if>

</foreach>

</if>

is_delect=1 and is_done=1 and customer_user_id=#{userId,jdbcType=INTEGER}  group by user_id

</select>

特别要注意用红色标注的地方,这里使用了动态的sql。加括号是为了让这个字段合并为一个条件。如果不加括号查出来的结果就会不一样,不信可以试一下。写的不好的地方请谅解!

时间: 2024-10-17 23:25:46

mybatis 关于 传入参数为集合list和map的写法的相关文章

MyBatis传入参数为集合 list 数组 map写法

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性

MyBatis传入参数为集合、数组SQL写法

参考:http://blog.csdn.net/small____fish/article/details/8029030 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach标签的属性主要有item,index,collection,open,separator,close. item 表示集合中每一个元素进行迭代时的别名,随便起的变量名: index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用: open 表示该语句以什么开始,常用"

MyBatis之传入参数——parameterType(转)

鸣谢:http://blog.csdn.net/liaoxiaohua1981/article/details/6862764 -------------------------------------------------------------------- 在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和JAVA复杂数据类型 基本数据类型:包

MyBatis之传入参数

在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和Java复杂数据类型 基本数据类型:包含int,String,Date等.基本数据类型作为传参,只能传入一个.通过#{参数名} 即可获取传入的值 复杂数据类型:包含JAVA实体类.Map.通过#{属性名}或#{map的KeyName}即可获取传入的值 基本数据类型参数示例: 根据班级ID查询教师列表 x

mybatis的传入参数#和$的区别

我个人一直是用#,没有用过$,网上以下是网上搜集的不完全资料. 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by

MyBatis之传入参数parameterType

在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和Java复杂数据类型 基本数据类型:包含int,String,Date等.基本数据类型作为传参,只能传入一个.通过#{参数名} 即可获取传入的值 复杂数据类型:包含JAVA实体类.Map.通过#{属性名}或#{map的KeyName}即可获取传入的值 基本数据类型参数示例: 根据班级ID查询教师列表 x

【转载】MyBatis之传入参数

原文地址:http://blog.csdn.net/liaoxiaohua1981/article/details/6862764 在MyBatis的select.insert.update.delete这些元素中都提到了parameterType这个属性.MyBatis现在可以使用的parameterType有基本数据类型和JAVA复杂数据类型 基本数据类型:包含int,String,Date等.基本数据类型作为传参,只能传入一个.通过#{参数名} 即可获取传入的值 复杂数据类型:包含JAVA

mybatis中传入参数的几种方式

第一种: Dao层的方法 Public User selectUser(String name,String password); 对应的Mapper.xm <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_password=#{1} </select> 第二种: 该方法采用M

mybatis传入参数类型parameterType和输出结果类型resultType详解

前言 Mybatis的Mapper文件中的select.insert.update.delete元素中都有一个parameterType和resultType属性,parameterType属性用于对应的mapper接口方法接受的参数类型,resultType用于指定sql输出的结果类型. resultType:指定sql输出结果类型,总共就两种: 1. 基本数据类型. 2. pojo类类型.mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象.如果有多条数据,则