List<User> list = new ArrayList<User>();
......
dao.saveWithKey("com.test.mapper.TestMapper.addUsers", list);
Mapper中:
<insert id="addUsers" parameterType="java.util.List">
insert into test_user(name, age) values
<foreach collection="list" item="item" separator=",">
(#{item.name}, #{item.age})
</foreach>
</insert>
2、基础对象集合(单字段),作为条件:
service中的代码:
List<String> ids = Arrays.asList(param.split(","));
return dao.getList("com.test.mapper.TestMapper.getUsers", ids);
Mapper中:
<select id="getUsers" parameterType="java.util.List" resultType="java.util.Map">
select * from test_table where is_deleted = 0
<if test="list != null">
and id in
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
3、list(单字段)作为其中一个参数,例如查询条件有3个:beginTime, endTime, list,其中list是一个List<String>
service中代码:
List<String> names= getUserNames();
Map<String, Object> params = new HashMap<String, Object>();
params.put("beginTime", beginTime);
params.put("endTime", endTime);
params.put("names", names);
dao.getList("com.test.mapper.TestMapper.getUsers", params);
Mapper中代码:
<select id="getUsers" resultType="java.util.HashMap">
select * from test_user
<where>
<if test="list != null">
and name IN
<foreach collection="list" item = "item" separator="," open="(" close=")">
#{item}
</foreach>
<if test="beginTime!=null and beginTime != ''">
and create_time <![CDATA[ >=]]>#{beginTime}
<if test="endTime !=null and endTime != ''">
and create_time <![CDATA[ <=]]>#{endTime}
</where>
</select>
<foreach>中各个属性的含义:
collection:指定要遍历的集合:
List类型的参数会特殊处理封装在map中,map的key就叫list ;
item:将当前遍历出的元素赋值给指定的变量 ;
separator:每个元素之间的分隔符 ;
open:遍历出所有结果拼接一个开始的字符 ;
close:遍历出所有结果拼接一个结束的字符 ;
index:索引。遍历list的时候是index就是索引,item就是当前值 ;
遍历map的时候index表示的就是map的key,item就是map的值;
使用场景
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。
动态标签
if标签通常用那个胡where语句,update语句,insert语句中,通过判断参数值来决定是否使用某个查询条件,判断是否更新某一个字段或插入某个字段
foreach 也就是遍历迭代,在SQL中通常用在 in 这个关键词的后面
foreach元素的属性主要有item,index,collection,open,separator,close。
分别代表:
item表示集合中每一个元素进行迭代时的别名,
index用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束
代码片段:
<selectid="select...
MyBatis提供foreach语句实现In查询。foreach语法如下:collection:该属性的对应方法的参数类型可以是List、数组、Map。如果方法的参数类型不属于前三种,则必须和方法参数@Param指定的元素名一致。item: 表示迭代过程中每个元素的别名。可以随便起名,但是必须跟元素中的#{}里面的名称一致。index:表示迭代过程中每次迭代到的位置(下标)open:前缀close:后缀separator:分隔符,表示迭代时每个元素之间以什么分隔。
Mybatis之foreach用法----List、Array、Map三种类型遍历在mybatis的xml文件中构建动态sql语句时,经常会用到标签遍历查询条件。特此记录下不同情况下书写方式!-------仅供大家参考------1. foreach元素的属性collection: 需做foreach(遍历)的对象,作为入参时,list、array对象时,collection属性值分别默认用"li...
我们学习了如何使用 Mybatisif、where、trim等动态语句来处理一些简单的查询操作。对于一些 SQL 语句中含有 in 条件,需要迭代条件集合来生成的情况,可以使用 foreach 来实现 SQL 条件的迭代
Mybatis foreach 标签用于循环语句,它很好的支持了数据和 List、set 接口的集合,并对此提供遍历的功能。语法格式如下。
• <foreach item="item" index="index" collection="list|array|map key..
mybatis if test判断 list不为空及foreach的用法,
<if test="orderIdList != null and orderIdList.size() != 0">
and order_id in
<foreach item='order_id' collection='orderIdList' open='(' separator=',' close=')' >
#{order_id}
</foreach>
mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
1、statement中直接定义使用动态SQL:
在statement中利用if 和 where 条件组合达到我们的需求,通过一个例子来说明:
原SQL语句:<select id="findUserByUserQuveryVo" parameterType ="UserQueryVo" result
if 标签
if标签中有一个test属性,test属性值是一个符合OGNL要求的判断表达式,表达式的结果可以使true或者false, 除此之外所有的非0值都为true
(1)、数字类型
1.1 例如: 如果参数为数字类型的时候没有特俗需求的情况只需要判断是否为null即可。
<if test="id != null"></if>
1.2 例如:如果有特俗需求,例如判断是否大于某个数的时候才行。只需要加上对应的条件判断即可。
<if test='id != null an
foreach 属性介绍foreach 用于迭代传入过来的参数。它的属性介绍分别是collection:表示传入过来的参数的数据类型。该参数为必选。要做 foreach 的对象,作为入参时,List 对象默认用 list 代替作为键,数组对象有 array 代替作为键,Map 对象没有默认的键。当然在作为入参时可以使用 @Param(“keyName”) 来设置键,设置 keyName 后,lis...
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名.
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.
open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.
close表示以什么结束.foreach : 用的地方为:保存
在使用mybatis过程中,<foreach>标签算是比较常用的,最近在项目中遇到这样一个问题,使用<foreach>标签循环拼接SQL语句时,报了一个错误:
nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘__frch_name_0’ in ‘class com.stand.modules.address.