在使用 MyBatis 時,最長打交道的就是 XML映射文件
,
使用 MyBatis 的 select、insert、update、delete 實現數據庫的增刪改查。 html
可是用的時間多了,發現相同的查詢,卻又不少中使用方法,屬性的配置也是有多種方式,每次都會去抉擇該使用哪種比較好?無奈耽誤了開發時間。 java
這裏主要總結的就是一套最經常使用,也是本人覺的最合理的MyBatis用法,記住這裏的,就能夠應付平常所需了,今後告別選擇恐懼症。sql
記住其中的常見屬性就能夠,例如,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二者只能存在一個 >
是否是清爽多了。mybatis
<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 含義:app
// 若是沒有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,推薦你們看這個教程:http://www.mybatis.org/mybati...學習