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
- droptable users if exists;
- createtable users (
- id int,
- namevarchar(20)
- );
-
insertinto users (id,
- insertinto users (id, name) values(2, 'User2');
- insertinto users (id, name) values(3, 'User3');
- insertinto users (id, name) values(4, 'User4');
- insertinto users (id, name) values(5, 'User5');
- insertinto users (id, name) values(6, 'User6');
Mapper.xml
- <selectid="countByUserList"resultType="_int"parameterType="list">
- select count(*) from users
- <where>
- id in
- <foreachitem="item"collection="list"separator=","open="("close=")"index="">
- #{item.id, jdbcType=NUMERIC}
- </foreach>
- </where>
- </select>
測試程式碼:
- @Test
- publicvoid shouldHandleComplexNullItem() {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- try {
- Mapper mapper = sqlSession.getMapper(Mapper.class);
- User user1 = new User();
- user1.setId(2);
- user1.setName("User2");
- List<User> users = new ArrayList<User>();
- users.add(user1);
- users.add(null);
- int count = mapper.countByUserList(users);
- Assert.assertEquals(1, count);
- } finally {
- sqlSession.close();
- }
- }
測試日誌:
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