3、XML配置文件(筆記)

  • cache – 該命名空間的緩存配置。
  • cache-ref – 引用其它命名空間的緩存配置。
  • resultMap – 描述如何從數據庫結果集中加載對象,是最複雜也是最強大的元素。
  • sql – 可被其它語句引用的可重用語句塊。
  • insert – 映射插入語句。
  • update – 映射更新語句。
  • delete – 映射刪除語句。
  • select – 映射查詢語句。

一、select - 映射查詢語句算法

<select
id="selectPerson"
parameterType="int"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false" #將其設置爲 true 後,只要語句被調用,都會致使本地緩存和二級緩存被清空,默認值:false。
useCache="true" #將其設置爲 true 後,將會致使本條語句的結果被二級緩存緩存起來,默認值:對 select 元素爲 true。
timeout="10" #這個設置是在拋出異常以前,驅動程序等待數據庫返回請求結果的秒數。默認值爲未設置(unset)(依賴數據庫驅動)。
fetchSize="256" #這是一個給驅動的建議值,嘗試讓驅動程序每次批量返回的結果行數等於這個設置值。 默認值爲未設置(unset)(依賴驅動)
statementType="PREPARED" #可選 STATEMENT,PREPARED 或 CALLABLE。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,默認值:PREPARED。
resultSetType="FORWARD_ONLY"> #FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等價於 unset) 中的一個,默認值爲 unset (依賴數據庫驅動)。sql

二、insert、update、delete數據庫

<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty="" #(僅適用於 insert 和 update)指定可以惟一識別對象的屬性,MyBatis 會使用 getGeneratedKeys 的返回值或 insert 語句的 selectKey 子元素設置它的值,默認值:未設置(unset)。若是生成列不止一個,能夠用逗號分隔多個屬性名稱。
keyColumn="" #(僅適用於 insert 和 update)設置生成鍵值在表中的列名,在某些數據庫(像 PostgreSQL)中,當主鍵列不是表中的第一列的時候,是必須設置的。若是生成列不止一個,能夠用逗號分隔多個屬性名稱。
useGeneratedKeys="" #(僅適用於 insert 和 update)這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵(好比:像 MySQL 和 SQL Server 這樣的關係型數據庫管理系統的自動遞增字段),默認值:false。
timeout="20">緩存

<update
id="updateAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20">安全

<delete
id="deleteAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20">dom

例:fetch

<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

三、selectKey
<insert id="insertAuthor">
<selectKey keyProperty="id" resultType="int" order="BEFORE">線程

select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1

</selectKey>
insert into Authorcode

(id, username, password, email,bio, favourite_section)

values對象

(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})

</insert>

keyProperty : selectKey 語句結果應該被設置到的目標屬性。若是生成列不止一個,能夠用逗號分隔多個屬性名稱。
keyColumn 返回結果集中生成列屬性的列名。若是生成列不止一個,能夠用逗號分隔多個屬性名稱。
order 能夠設置爲 BEFORE 或 AFTER。若是設置爲 BEFORE,那麼它首先會生成主鍵,設置 keyProperty 再執行插入語句。若是設置爲 AFTER,那麼先執行插入語句,而後是 selectKey 中的語句 - 這和 Oracle 數據庫的行爲類似,在插入語句內部可能有嵌入索引調用。

四、緩存

<cache/> 開啓二級緩存
基本上就是這樣。這個簡單語句的效果以下:

映射語句文件中的全部 select 語句的結果將會被緩存。
映射語句文件中的全部 insert、update 和 delete 語句會刷新緩存。
緩存會使用最近最少使用算法(LRU, Least Recently Used)算法來清除不須要的緩存。
緩存不會定時進行刷新(也就是說,沒有刷新間隔)。
緩存會保存列表或對象(不管查詢方法返回哪一種)的 1024 個引用。
緩存會被視爲讀/寫緩存,這意味着獲取到的對象並非共享的,能夠安全地被調用者修改,而不干擾其餘調用者或線程所作的潛在修改。

<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
#建立了一個 FIFO 緩存,每隔 60 秒刷新,最多能夠存儲結果對象或列表的 512 個引用,並且返回的對象被認爲是隻讀的,所以對它們進行修改可能會在不一樣線程中的調用者產生衝突。

<select ... flushCache="false" useCache="true"/>useCache 排除緩存

相關文章
相關標籤/搜索