【mybatis】mapper.xml中foreach的用法,含批量查询、插入、修改、删除方法的使用

一、xml文件中foreach的主要属性
foreach元素的属性主要有 collection,item,index,separator,open,close。
collection: 表示集合,数据源
item :表示集合中的每一个元素
index :用于表示在迭代过程中,每次迭代到的位置
separator :表示在迭代时数据以什么符号作为分隔符
open :表示该语句以什么开始
close :表示以什么结束

二、foreach批量查询数据
1、当查询的参数只有一个时

例如:findByIds(List ids)
a.如果参数类型为List,在使用时,collection的属性需指定为list
b.如果参数类型为数组,则在使用时,collection属性需指定为array

 

2、当查询的参数是一个对象时

例如:findByIds(List userList)

 

三、foreach批量插入数据
实现foreach批量插入数据有两种方法,一种是只发送一条 SQL,插入的多条数据之间通过”,” 分隔开,另一种方式是每插入一条数据就发送一条 SQL 语句,多个 SQL 语句之间用“;”分割。

1.一条 SQL 批量插入数据
对应的Mapper接口代码如下:

/** 返回值为 Integer 类型 */
Integer addStudentByList(@Param("list") List list);
1
2
对应的SQL 映射文件如下:


    INSERT INTO Student(username, age, password) VALUES 
   
        (#{ item.username}, #{ item.age}, #{ item.password})
   



2.执行多条 SQL 批量插入数据
对应的Mapper接口代码和一条 SQL 批量插入数据相同
对应的SQL 映射文件在一条 SQL 批量插入数据的基础上修改如下:


   
   
        INSERT INTO Student(username, age, password) VALUES
        (#{ item.username}, #{ item.age}, #{ item.password})
   



三、foreach批量更新数据
实现foreach批量插入数据有两种种方法,第一种是一条sql语句来批量更新数据,第二种是批量更新的sql。

一条 SQL 批量更新数据
一条sql语句来批量更新所有数据,下面直接看一下在mybatis中通常是怎么写的(去掉mybatis语法就是原生的sql语句了,所有就没单独说sql是怎么写的)
对应的SQL 映射文件如下:


    update Student set  username=
   
        when #{ item.id} then #{ item.username}
   

    where id in
   
        #{ item.id,jdbcType=BIGINT}
   


<------------------------------------分隔符-------------------------------->
   
   
        update Student
       
            username=${ item.username}
       

        where id = ${ item.id}
   
     


四、foreach批量删除数据
所对应的SQL映射文件如下:


       DELETE FROM WHERE id in
       
           #{ item}
       

   


对应的Mapper接口代码如下:

public void deleteAssetstype(List ids);

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