1. mysql中插入List集合
在mysql数据库中,使用的是foreach标签。 foreach元素的属性主要有 collection,item,index,open,separator,close。
item
,这个是迭代的每一个元素的代表,迭代的时候要用上它,不然很容易被忽略,从而报错。
collection
标签是集合的代表。如果传入的值是List集合,那么collection的值是list。如果传入的是数组,那么collection的值是array。如果在接口上定义了传递进来的参数,那么collection的值就是那么定义好的参数,比如下面的tags,不推荐使用。
int insertArticleTag(@Param("tags")List<Tag> tags);
index
表示迭代的位置。
open
表示从什么地方开始,
close
表示什么地方结束
separator
表示在每次进行迭代之间以什么符号作为分隔符。MySQL中通常是",",Oracle中有时写union。
插入实例。INSERT INTO t_tag(name,articleId) VALUES('good','22') , ('nice','22'),('perfect','22')
<insert keyProperty="id" useGeneratedKeys="true" parameterType="">
INSERT INTO t_tag(name,articleId)
VALUES
<foreach collection="list" item="tag" separator="," index="index">
(#{},#{})
</foreach>
</insert>
注意:这里需要使用,我第一次写的时候,忘记了加上item中定义的临时属性,导致出错。
查询实例:
<select resultType="">
SELECT * from t_article
WHERE id in
<foreach collection="list" item="articleId" open="(" close=")" separator=",">
#{articleId}
</foreach>
</select>
分隔符分割每个<foreach>
标签的标签体 WHERE id in ( item1 , item2 ,item3 )
删除实例与插入实例大同小异。比如 delete from t_tag where id in (58,59)
2. Oracle中批量插入List集合
RelationMapping中有两个字段,分别是 currentId , mappingId 。当前的ID 映射多个 映射ID
Boolean InsertUserToRole(@Param("list") final List<RelationMapping> list);
<!--批量操作list集合 -->
<insert >
insert into table
(User_ID,ROLE_ID)
(
<foreach collection="list" close="" separator="union all" item="item" >
select #{},#{} from dual
</foreach>
)
</insert>
在Oracle的版本中,有几点需要注意的:
中没有VALUES; 看上述的配置文件,确实没有像mysql中的values
2.<foreach>标签中的(selece ..... from dual); 值非要从dual中,明明是自己指定的,或许是oracle的形式主义
3.<foreach>标签中的separator的属性为"UNION ALL",将查询合并结果集。 mysql中用逗号隔开
方法名:
Boolean questionnaireMappingReceiveGroup(@Param("list")
List<QuestionnaireMappingGroupEntity> mappingGroupEntities);
Oracle如何提交带主键的例子:ID从序列中获取
<insert parameterType="">
INSERT INTO T_QMR_QUESTIONNAIRE_GROUP
(ID,QUESTIONNAIRE_ID, RECEIVER_GROUP_ID, CREATE_DATE, CREATE_USER_ID, UPDATE_DATE,UPDATE_USER_ID)
SELECT SEQ_T_QMR.NEXTVAL ID, A.*
FROM(
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT
#{} QUESTIONNAIRE_ID,
#{} RECEIVER_GROUP_ID,
sysdate CREATE_DATE,
'1' CREATE_USER_ID,
sysdate UPDATE_DATE,
'1' UPDATE_USER_ID
FROM dual
</foreach>
)A
</insert>
3. 使用Mybatis在Oracle数据库中批量更新
在Oracle数据库中批量更新。需要传递一个List集合,然户进行循环执行SQL语句
如果操作成功,返回值为 Integer 类型的 -1
语法如下:
<update parameterType="List">
<foreach item="item" collection="list" index="index" open="begin" close=";end;" separator=";">
UPDATE T_TABLE SET
A= #{},
B= #{},
C= #{},
D= sysdate
where ID = #{}
</foreach>
</update>