MyBatis的常見屬性總結select、insert、update、delete

一、前言

在使用 MyBatis 時,最長打交道的就是 XML映射文件 ,
使用 MyBatis 的 select、insert、update、delete 實現數據庫的增刪改查。

但是用的時間多了,發現相同的查詢,卻又很多中使用方法,屬性的配置也是有多種方式,每次都會去抉擇該使用哪一種比較好?無奈耽誤了開發時間。

這裏主要總結的就是一套最常用,也是本人覺的最合理的MyBatis用法,記住這裏的,就可以應付日常所需了,從此告別選擇恐懼症。

二、常見的屬性規律

記住其中的常見屬性就可以,例如,select 元素有很多屬性:

<select
  id="selectUser" //與 UserMapper.java 接口對應的方法
  parameterType="int" //傳入的參數格式
  resultType="hashmap" //返回的數據類型,當返回多個參數的時候,建議使用 resultMap
  resultMap="userResultMap" //返回的數據類型,相當於對 resultType="hashmap" 的封裝。resultType、resultMap兩者只能存在一個
  parameterMap="deprecated" //已經廢棄,現在使用 resultType 和 resultType
  flushCache="false" //是否清空緩存,默認爲false
  useCache="true" //是否二級緩存,默認值:對 select 元素爲 true。
  timeout="10000" //等待數據庫返回請求結果的秒數
  fetchSize="256" 
  statementType="PREPARED" // STATEMENT,PREPARED 或 CALLABLE 的一個。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,默認值:PREPARED。
  ...>

但是我們一般只需要配置其中幾個就可以了,其它的很少使用:

<select
  id="selectUser"
  resultType="hashmap" //返回的數據類型,當返回多個參數的時候,建議使用 resultMap
  resultMap="userResultMap" //返回的數據類型,相當於對 resultType="hashmap" 的封裝。resultType、resultMap兩者只能存在一個
  >

是不是清爽多了。

三、常用屬性(記住這裏就可以啦)

<typeAlias type="com.test.model.User" alias="User"/> //類型別名,之後就不用寫包名了

// resultMap 可以封裝很多個屬性,在返回數據多的情況下,可以避免使用 resultType="hashmap" 返回不易識別的Map對象,而可以直接返回封裝的對象,如 User
<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id" />
  <result property="username" column="user_name"/>
  <result property="password" column="hashed_password"/>
</resultMap> 

//sql語句的封裝,之後可以使用 <include refid="Base_Column_List" /> 來插入相關 sql 語句
<sql id="Base_Column_List" >
    id, phone, email, nickname, password, avatar, create_time, last_login_time, status
</sql>

<select
  id="selectUser"
  resultType="hashmap"        //返回的數據類型。當返回多個參數的時候,建議使用 resultMap
  resultMap="userResultMap" //返回的數據類型。相當於對 resultType="hashmap" 的封裝。resultType、resultMap兩者只能存在一個
  >

<insert
  id="insertUser"
  parameterType="com.test.model.User"

  useGeneratedKeys="true" //(僅對 insert 和 update 有用)這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關係數據庫管理系統的自動遞增字段),默認值:false。
  keyProperty="id"      //(僅對 insert 和 update 有用)唯一標記一個屬性,MyBatis 會通過 getGeneratedKeys 的返回值或者通過 insert 語句的 selectKey 子元素設置它的鍵值,默認:unset。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
  >

<update
  id="updateUser">

<delete
  id="deleteUser">

MyBatis 中 useGeneratedKeys 和 keyProperty 含義:

// 如果沒有useGeneratedKeys="true"和keyProperty="id",下面 insert 之後的 user.getId() 是無法獲取 id 值的
public void insert(User user) {  
    int count = userMapper.insert(user); 
    System.out.println("共插入" + count + "條記錄!"  + "\n剛剛插入記錄的主鍵自增長值爲:" + user.getId()); 
}

四、屬性大全

<select
  id="selectUser" //與 PersonMapper.java 接口對應的方法
  parameterType="int" //傳入的參數格式
  resultType="hashmap" //返回的數據類型,當返回多個參數的時候,建議使用 resultMap
  resultMap="userResultMap" //返回的數據類型,相當於對 resultType="hashmap" 的封裝。resultType、resultMap兩者只能存在一個
  parameterMap="deprecated" //已經廢棄,現在使用 resultType 和 resultType
  flushCache="false" //是否清空緩存,默認爲false
  useCache="true" //是否二級緩存,默認值:對 select 元素爲 true。
  timeout="10000" //等待數據庫返回請求結果的秒數
  fetchSize="256" 
  statementType="PREPARED" // STATEMENT,PREPARED 或 CALLABLE 的一個。這會讓 MyBatis 分別使用 Statement,PreparedStatement 或 CallableStatement,默認值:PREPARED。
  ...>

<insert
  id="insertUser"
  parameterType="com.test.model.User"
  flushCache="true"
  statementType="PREPARED"
  timeout="20"
  keyProperty=""      //(僅對 insert 和 update 有用)唯一標記一個屬性,MyBatis 會通過 getGeneratedKeys 的返回值或者通過 insert 語句的 selectKey 子元素設置它的鍵值,默認:unset。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
  useGeneratedKeys="" //(僅對 insert 和 update 有用)這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關係數據庫管理系統的自動遞增字段),默認值:false。
  keyColumn="" //(僅對 insert 和 update 有用)通過生成的鍵值設置表中的列名,這個設置僅在某些數據庫(像 PostgreSQL)是必須的,當主鍵列不是表中的第一列的時候需要設置。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
  >

<update
  id="updateUser"
  parameterType="com.test.model.User"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

<delete
  id="deleteUser"
  parameterType="com.test.model.User"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

五、MyBatis教程推薦

想詳細的學習MyBatis,推薦大家看這個教程:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Parameters

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章