Mybatis的使用中的一些不太注意的技巧


以下就總結一下Mybatis的使用中的一些不太注意的技巧,算是Mybatis的總結筆

1、插入時主鍵返回

     我們向數據庫插入一條記錄是,使用Mybatis的<insert>是無法返回插入的主鍵的,而我們需要這個剛插入的主鍵,可以如下返回

         自增主鍵:使用last_insert_id()查詢剛插入的key的id,該方法需要和insert配合使用,是插入之后獲取。

         result返回的是插入成功條數,而主鍵id返回到CourseInfo的id屬性中

        

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <insert id="insert" parameterType="org.andy.shop.model.CourseInfo" >  
  2.     insert into course_info (id, cname, caddress)  
  3.     values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})  
  4.     
  5.      <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">  
  6.        select last_insert_id()  
  7.      </selectKey>  
  8.   </insert>  


或者如下的寫法更簡單:

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <insert id="insert" parameterType="org.andy.shop.model.CourseInfo" useGeneratedKeys="true" keyProperty="id">  
  2.     insert into course_info (id, cname, caddress  
  3.       )  
  4.     values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR}  
  5.       )  
  6.   </insert>  


       非自增主鍵:但我們的ID為uuid字符類型的32為長度時,我們使用mysql的uuid()查詢主鍵,是在查詢之后在插入。

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <insert id="insert" parameterType="org.andy.shop.model.CourseInfo" >  
  2.     <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">  
  3.       select uuid()  
  4.     </selectKey>  
  5.     insert into course_info (id, cname, caddress)  
  6.     values (#{id,jdbcType=VARCHAR}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})  
  7.   </insert>  
 

    使用oracle數據庫時:使用 序列名.nextval()函數獲取。


2、別名的使用

      一般定義別名,在Mapper配置的可以使用別名,定義單個別名如下

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <configuration>  
  2. <typeAliases>  
  3.  <typeAlias type="org.andy.shop.model.CourseUserInfo" alias="CourseUserInfo"/>  
  4. </typeAliases>  
  5. </configuration>  

      自動定義別名:Mybatis 將自動掃描包名下的po,別名就是類名(大寫小寫都可以)
[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <typeAliases>  
  2.   <package name="org.andy.shop.model"/>  
  3. </typeAliases>  


3、動態sql使用

      一般我們會涉及多個動態查詢條件,一般我們是通過 where 1 = 1,這樣可以處理where后面對應全空的情況,我們可以使用<where>標簽,該標簽可以自動處理。

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1.        <where>  
  2.   <if test="name != nulll">  
  3.      and name like concat('%',trim(#{name,jdbcType=VARCHAR}),'%')   
  4.   </if>  
  5. </where>  


4、sql片段

     我們可以將常用的重復的sql定義sql片段

    定義如下:

    

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <sql id="Base_Column_List" >  
  2.     id, name, url, priority, logo, img  
  3.   </sql>  

   引用該片段如下:

  

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <include refid="Base_Column_List" />  

5、關聯查詢

一對一關聯查詢

       

        一對多關聯查詢


6、延遲加載

       延遲加載:先從單表查詢,在需要時從關聯表查詢,可以大大的提高數據庫性能,單表查詢的性能要快於多表聯合查詢的速度。

而Mybatis的associate、collection就支持延遲加載功能。

    

    開啟延遲加載:

      需要在Mybatis的核心配置文件中配置configuration開啟setting兩個配置

      

     設置lazyLoadingEnabled為true, aggressiveLazyLoading為false


未完待續。

      

       mybatis文檔地址:http://www.mybatis.org/mybatis-3/zh/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM