Mybatis SQL語句批量操作與多級快取

2021-10-10 07:50:33 字數 3642 閱讀 2205

首先在資料庫中寫出批量插入的sql語句,然後查詢重複的資料,再思考拼接過程。

第一種通過別名實現表的同一,從而合併成一張表 插入資料

<

!--第一種用select dual(空表) 再用集合 union all 合併-->

<

!insert

into dept

select

60 deptno,

'科創部' dname,

'南昌' loc form dual

union

select

70 deptno,

'文藝部' dname,

'宜春' loc form dual

union

select

80 deptno,

'新聞部' dname,

'上饒' loc form dual..

...<

!--第二種方法 常規方法 mysql語法 oracle不適用-->

insert

into

table

(col1, col2)

values

(val11, val12)

,(val21, val22)

,(val31, val32)

;<

!--第三種 begin end-->

begin

insert

into dept values(11

,'aa'

,'cc');

insert

into dept values(12

,'aa'

,'cc');

insert

into dept values(13

,'aa'

,'cc');

end;

"insertsome"

parametertype

="list"

>

insert into dept

collection

="list"

item

="dept"

separator

="union"

>

select # deptno,# dname,# loc from dual

foreach

>

insert

>

"insertsome"

parametertype

="list"

>

insert into dept values

collection

="list"

item

="dept"

separator

=","

>

(#,#,#)

foreach

>

insert

>

"insertsome"

parametertype

="list"

>

begin

collection

="list"

item

="dept"

separator

=";"

>

insert into dept values(#,#,#)

foreach

>

;end;

insert

>

<

!--使用begin end-->

begin

update 表名 set 欄位1

=值1,欄位2

=值2,欄位3

=值3...

.where 欄位n=值n;

update 表名 set 欄位1

=值1,欄位2

=值2,欄位3

=值3...

.where 欄位n=值n;

update 表名 set 欄位1

=值1,欄位2

=值2,欄位3

=值3...

.where 欄位n=值n;

預設開啟. 執行緒級別的快取, sqlsession 的快取;

在乙個 sqlsession 生命週期中有效 sqlsession 關閉, 快取清空;

在同乙個 sqlsession 中, mybatis 會把執行的方法和引數通過演算法生成快取的鍵值, 將鍵值和結果存放在乙個 map 中, 如果後續的鍵值一樣, 則直接從 map中獲取資料;

不同的 sqlsession 之間的快取是相互隔離的;

用乙個 sqlsession, 可以通過配置使得在查詢前清空快取;flushcache=「true」

任何的 update, insert, delete 語句都會清空快取。

理解:同sqlsession 下,在只執行select語句時,會儲存select儲存的資料,通過方法簽名,當該方法再次執行時,會自動使用已儲存的資料。增刪改查會預設清空快取資料。

eviction

="lru"

flushinterval

="100000"

readonly

="true"

size

="1024"

/>

程序級別的快取, sqlsessionfactory 的快取

在乙個sqlsessionfactory生命週期中有效. 可以在多個sqlsession 生命中期中共享.

由於在更新時會重新整理快取, 因此需要注意使用場合:查詢頻率很高, 更新頻率很低時使用, 即經常使用 select, 相對較少使用delete, insert, update。

快取是以 namespace 為單位的,不同 namespace 下的操作互不影響。但重新整理快取是重新整理整個 namespace的快取, 也就是你 update 了乙個, 則整個快取都重新整理了。

最好在 「只有單錶操作」 的表的 namespace 使用快取, 而且對該錶的操作都在這個 namespace 中。 否則可能會出現資料不一致的情況。

理解:同乙個命名空間namespace可以不同sqlsession,也是通過方法簽名獲取。但是多表查詢的時候就很可能出現幻讀。

mybatis Sql語句配置詳解

id sqlsession執行的唯一標識 resultmap 結果集封裝對映,可用於內部物件一對多封裝 resulttype 返回的結果型別,直接就是乙個po物件 resultsets 不知道,求告知?resultsetstype 不知道,求告知?paramtertype sql語句引數型別,可配置...

mybatis sql語句 和 區別聯絡

1.說白了就是,用於引用字元變數,如varchar,string.因為sql語句執行過程中要給string varchar加 來執行。2.用來引用int型等不需要新增單引號的值 3.具體,如 insert into user name values xiaoming 小明的sql語句必須加單引號,因...

mybatis sql語句 和 區別聯絡

1.說白了就是,用於引用字元變數,如varchar,string.因為sql語句執行過程中要給string varchar加 來執行。2.用來引用int型等不需要新增單引號的值 3.具體,如 insert into user name values xiaoming 小明的sql語句必須加單引號,因...