1. 程式人生 > 其它 >select,insert,update,delete使用

select,insert,update,delete使用

select

<select id="selectPerson" parameterType="int<!--引數型別-->" resultType="hashmap<!--返回值類-->">
  SELECT * FROM PERSON WHERE ID = #{id}<!--接收引數的放式-->
</select>

{id}這種放式相當於式預處理。

<select
  id="selectPerson"
  parameterType="int"
  parameterMap="deprecated"
  resultType="hashmap"
  resultMap="personResultMap"
  flushCache="false"
  useCache="true"
  timeout="10"
  fetchSize="256"
  statementType="PREPARED"
  resultSetType="FORWARD_ONLY">
屬性 描述
id 在名稱空間中唯一的識別符號,可以被用來引用這條語句。
parameterType 將會傳入這條語句的引數的類全限定名或別名。這個屬性是可選的,因為 MyBatis 可以通過型別處理器(TypeHandler)推斷出具體傳入語句的引數,預設值為未設定(unset)。
parameterMap 用於引用外部 parameterMap 的屬性,目前已被廢棄。請使用行內參數對映和 parameterType 屬性。
resultType 期望從這條語句中返回結果的類全限定名或別名。 注意,如果返回的是集合,那應該設定為集合包含的型別,而不是集合本身的型別。 resultType 和 resultMap 之間只能同時使用一個。
resultMap 對外部 resultMap 的命名引用。結果對映是 MyBatis 最強大的特性,如果你對其理解透徹,許多複雜的對映問題都能迎刃而解。 resultType 和 resultMap 之間只能同時使用一個。
flushCache 將其設定為 true 後,只要語句被呼叫,都會導致本地快取和二級快取被清空,預設值:false。
useCache 將其設定為 true 後,將會導致本條語句的結果被二級快取快取起來,預設值:對 select 元素為 true。
timeout 這個設定是在丟擲異常之前,驅動程式等待資料庫返回請求結果的秒數。預設值為未設定(unset)(依賴資料庫驅動)。
fetchSize 這是一個給驅動的建議值,嘗試讓驅動程式每次批量返回的結果行數等於這個設定值。 預設值為未設定(unset)(依賴驅動)。
statementType 可選 STATEMENT,PREPARED 或 CALLABLE。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,預設值:PREPARED。
resultSetType FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等價於 unset) 中的一個,預設值為 unset (依賴資料庫驅動)。
databaseId 如果配置了資料庫廠商標識(databaseIdProvider),MyBatis 會載入所有不帶 databaseId 或匹配當前 databaseId 的語句;如果帶和不帶的語句都有,則不帶的會被忽略。
resultOrdered 這個設定僅針對巢狀結果 select 語句:如果為 true,將會假設包含了巢狀結果集或是分組,當返回一個主結果行時,就不會產生對前面結果集的引用。 這就使得在獲取巢狀結果集的時候不至於記憶體不夠用。預設值:false
resultSets 這個設定僅適用於多結果集的情況。它將列出語句執行後返回的結果集並賦予每個結果集一個名稱,多個名稱之間以逗號分隔。

insert, update 和 delete

資料變更語句 insert,update 和 delete 的實現非常接近:

<insert
  id="insertAuthor"
  parameterType="domain.blog.Author"
  flushCache="true"
  statementType="PREPARED"
  keyProperty=""
  keyColumn=""
  useGeneratedKeys=""
  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">
屬性 描述
id 在名稱空間中唯一的識別符號,可以被用來引用這條語句。
parameterType 將會傳入這條語句的引數的類全限定名或別名。這個屬性是可選的,因為 MyBatis 可以通過型別處理器(TypeHandler)推斷出具體傳入語句的引數,預設值為未設定(unset)。
parameterMap 用於引用外部 parameterMap 的屬性,目前已被廢棄。請使用行內參數對映和 parameterType 屬性。
flushCache 將其設定為 true 後,只要語句被呼叫,都會導致本地快取和二級快取被清空,預設值:(對 insert、update 和 delete 語句)true。
timeout 這個設定是在丟擲異常之前,驅動程式等待資料庫返回請求結果的秒數。預設值為未設定(unset)(依賴資料庫驅動)。
statementType 可選 STATEMENT,PREPARED 或 CALLABLE。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,預設值:PREPARED。
useGeneratedKeys (僅適用於 insert 和 update)這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由資料庫內部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關係型資料庫管理系統的自動遞增欄位),預設值:false。
keyProperty (僅適用於 insert 和 update)指定能夠唯一識別物件的屬性,MyBatis 會使用 getGeneratedKeys 的返回值或 insert 語句的 selectKey 子元素設定它的值,預設值:未設定(unset)。如果生成列不止一個,可以用逗號分隔多個屬性名稱。
keyColumn (僅適用於 insert 和 update)設定生成鍵值在表中的列名,在某些資料庫(像 PostgreSQL)中,當主鍵列不是表中的第一列的時候,是必須設定的。如果生成列不止一個,可以用逗號分隔多個屬性名稱。
databaseId 如果配置了資料庫廠商標識(databaseIdProvider),MyBatis 會載入所有不帶 databaseId 或匹配當前 databaseId 的語句;如果帶和不帶的語句都有,則不帶的會被忽略。

下面是 insert,update 和 delete 語句的示例:

<insert id="insertAuthor">
  insert into Author (id,username,password,email,bio)
  values (#{id},#{username},#{password},#{email},#{bio})
</insert>

<update id="updateAuthor">
  update Author set
    username = #{username},
    password = #{password},
    email = #{email},
    bio = #{bio}
  where id = #{id}
</update>

<delete id="deleteAuthor">
  delete from Author where id = #{id}
</delete>