1. 程式人生 > >mybatis 註解方式批量插入

mybatis 註解方式批量插入

原文地址:http://blog.csdn.net/isea533/article/details/21237175

foreach一共有三種類型,分別為List,[](array),Map三種。

foreach的第一篇用來將List和陣列(array)。

下面表格是我總結的各個屬性的用途和注意點。

foreach屬性

屬性 描述
item 迴圈體中的具體物件。支援屬性的點路徑訪問,如item.age,item.info.details。
具體說明:在list和陣列中是其中的物件,在map中是value。
該引數為必選。
collection 要做foreach的物件,作為入參時,List<?>物件預設用list代替作為鍵,陣列物件有array代替作為鍵,Map物件沒有預設的鍵

當然在作為入參時可以使用@Param("keyName")來設定鍵,設定keyName後,list,array將會失效。 除了入參這種情況外,還有一種作為引數物件的某個欄位的時候。舉個例子:
如果User有屬性List ids。入參是User物件,那麼這個collection = "ids"
如果User有屬性Ids ids;其中Ids是個物件,Ids有個屬性List id;入參是User物件,那麼collection = "ids.id"
上面只是舉例,具體collection等於什麼,就看你想對那個元素做迴圈。
該引數為必選。
separator 元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用“,“隔開,避免手動輸入逗號導致sql錯誤,如in(1,2,)這樣。該引數可選。
open foreach程式碼的開始符號,一般是(和close=")"合用。常用在in(),values()時。該引數可選。
close foreach程式碼的關閉符號,一般是)和open="("合用。常用在in(),values()時。該引數可選。
index 在list和陣列中,index是元素的序號,在map中,index是元素的key,該引數可選。

下面是測試

SQL

  1. droptable users if exists;  
  2. createtable users (  
  3.   id int,  
  4.   namevarchar(20)  
  5. );  
  6. insertinto users (id, 
    namevalues(1, 'User1');  
  7. insertinto users (id, namevalues(2, 'User2');  
  8. insertinto users (id, namevalues(3, 'User3');  
  9. insertinto users (id, namevalues(4, 'User4');  
  10. insertinto users (id, namevalues(5, 'User5');  
  11. insertinto users (id, namevalues(6, 'User6');  
User類



Mapper.xml

  1. <selectid="countByUserList"resultType="_int"parameterType="list">
  2. select count(*) from users  
  3.   <where>
  4.     id in  
  5.     <foreachitem="item"collection="list"separator=","open="("close=")"index="">
  6.       #{item.id, jdbcType=NUMERIC}  
  7.     </foreach>
  8.   </where>
  9. </select>

測試程式碼:
  1. @Test
  2. publicvoid shouldHandleComplexNullItem() {  
  3. SqlSession sqlSession = sqlSessionFactory.openSession();  
  4. try {  
  5.   Mapper mapper = sqlSession.getMapper(Mapper.class);  
  6.   User user1 = new User();  
  7.   user1.setId(2);  
  8.   user1.setName("User2");  
  9.   List<User> users = new ArrayList<User>();  
  10.   users.add(user1);  
  11.   users.add(null);  
  12.   int count = mapper.countByUserList(users);  
  13.   Assert.assertEquals(1, count);  
  14. finally {  
  15.   sqlSession.close();  
  16. }  
  17. }  

測試日誌:

DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [[email protected]]
DEBUG [main] - Closing JDBC Connection [[email protected]]
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Setting autocommit to false on JDBC Connection [[email protected]]
DEBUG [main] - ==>  Preparing: select count(*) from users WHERE id in ( ? , ? ) 
DEBUG [main] - ==> Parameters: 2(Integer), null
DEBUG [main] - <==      Total: 1
DEBUG [main] - Resetting autocommit to true on JDBC Connection [[email protected]]
DEBUG [main] - Closing JDBC Connection [[email protected]]

上面這個例子是List的,但是和陣列的情況基本一樣,所以不針對陣列進行測試了。可以看到這個例子的內容是很簡單的,實際上List,array,map也可以互相巢狀,可以用多個foreach去執行,如果想看這樣一個例子,可以移步這裡:

上面這個問題就遇到了list,map一起用的問題,3樓是問題的答案,可以參考一看。

由於map的key,value比較特殊,所以下次再說。

相關推薦

mybatis 註解方式批量插入

原文地址:http://blog.csdn.net/isea533/article/details/21237175 foreach一共有三種類型,分別為List,[](array),Map三種。 foreach的第一篇用來將List和陣列(array)。 下面表格是我

mybatis 註解方式批量插入,更新資料

轉載自:https://www.cnblogs.com/dakewang/p/8268744.html   一,當向資料表中插入一條資料時,一般先檢查該資料是否已經存在,如果存在更新,不存在則新增  使用關鍵字  ON DUPLICATE KEY UP

mybatis oracle兩種方式批量插入資料

<insert id="addBatch" parameterType="java.util.List">       BEGIN      &

mybatis 註解方式插入,主鍵生成

@Mapper public interface UserMapper {     @Insert("insert into tbl_user (name, age) values (#{name}, #{age})")     @Options(useGen

mybatis三種批量插入方式對比

準備:  1.表結構 CREATE TABLE `t_user` (  `id` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '主鍵',  `name` varchar(50) CHARACTER SET utf8 DEFAULT NULL CO

mybatis三種批量插入方式

普通for迴圈插入 public void testInsertBatch2() throws Exception { User user; SqlSession sqlSession = sqlSessionTemplate.getSqlSe

mybatis 當需要批量插入並更新主鍵相同的資料時的處理方法

該方法 如果表中沒有沒有主鍵對應的資料就新增一條 如果有的話就更新該條資料 <insert id="insertBatch"> REPLACE into representatives_and_principal_personnel (id,examine_and_a

sprint-boot 整合mybatis+註解方式+配置檔案方式

註解方式  application.yml spring: datasource: # 資料來源基本配置 username: root password: root driver-class-name: com.mysql.jdbc.Dr

MyBatis註解方式之@Update/@Delete

@Update 1. RoleMapper介面增加介面方法 2. 單元測試 @Delete 1. RoleMapper介面增加介面方法 2. 單元測試 @Update 1. RoleMapper介面增加介面方法     /**      *       *       * @

MyBatis 三種批量插入操作對比

每當使用 ORM 框架進行資料庫操作的時候,就會遇到批量插入操作,如果不對批量插入操作深入瞭解的話就會出現各種各樣的問題,比如操作異常,效能低下,繫結變數超過限制,甚至出現數據庫宕機等各種問題。 本 Chat 主要貢獻內容如下: MyBatis 三種執行器介紹; MyBatis 三種批

mybatis——註解方式執行DDL語句(create,drop,alter)

如果想執行DDL,則需要使用@Update註解。 例子: @Update("ALTER SYSTEM SWITCH LOGFILE") public void GenerateArchiveLog();

mybatis單條和批量插入返回插入成功後的主鍵id

有些時候我們在新增記錄成功後希望能直接獲取到該記錄的主鍵id值,而不需要再執行一次查詢操作。在使用mybatis作為ORM元件時,可以很方便地達到這個目的。鑑於mybatis目前已經支援xml配置和註解2種方式,所以分別給予詳細介紹。使用xml配置方式1.xml配置:<!-- 插入資料:返回記錄的id值

Mybatis 實現Mysql批量插入資料,判斷資料是否存在

常見插入資料的SQL insert into 插入資料庫時會檢查主鍵是否存在,存在會報錯 replace into 替換資料庫記錄,需要表中有主鍵或者unique索引,如果資料庫已存在的資料,會先刪除該資料然後新增。不存在的資料效果和insert into

Oracle使用Mybatis實現List批量插入資料(轉載)

專案中會遇到這樣的情況,查詢出多條記錄(一個List物件集合),一次性要插入多條資料到資料庫中,下面就拿Data類來看看兩種插入方法: 方法一:   Mybatis本身只支援逐條插入,比較笨的方法,就是遍歷一個List,迴圈中逐條插入,比如下面這段程式碼 [java] view plain co

關於Mybatis註解方式SQL的返回結果判斷

舊系統改造,改造後的由過去的dao-service這種結構改成了直接repository裡的介面interface來直接註解(對應SQL-mapping的id)的方式進行對資料的操作。 問題來了,之前用的是batis我們有一個SqlMapClientDao來實

mybatis註解方式呼叫儲存過程

1.建立儲存過程: CREATE DEFINER=`root`@`%` PROCEDURE `p_dmk_fsyx`(v_month VARCHAR(6),v_type VARCHAR(2),OUT result INT(2)) BEGIN IF @v_type=1 THE

mybatis原始碼學習--spring+mybatis註解方式為什麼mybatis的dao介面不需要實現類

          相信大家在剛開始學習mybatis註解方式,或者spring+mybatis註解方式的時候,一定會有一個疑問,為什麼mybatis的dao介面只需要一個介面,不需要實現類,就可以正常使用,筆者最開始的時候也會有這種疑問,當時在網上查了很多資料,也問過公

MyBatis foreach語句批量插入資料

本例技術:Spring+SpringMVC+MyBatis+Oracle 問題描述:需要將程式裡的一個集合儲存到資料庫裡,集合的型別對應資料庫的一個實體,若在程式裡遍歷集合再一條條儲存到資料庫表中有

10、MyBatis-註解方式整合SSM

連接 cto 部分 共享數據 configure 類名 ext bject auto Spring、Spring MVC、MyBatis 整合 一、依賴 <?xml version="1.0" encoding="UTF-8"?> <projec

mybatis入門篇(二):Mybatis註解方式的基本用法

batis case left 返回 import Coding print pack hid @Select 1、mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCT