002649:mybatis插入返回id或對象


一、背景描述

  1、在有些場景中,需要根據之前插入的返回值如id(甚至是對象)來設置后續插入,如第一次參入的是父表,后續的是子表的情況。   
  2、如訴訟案件中,存在案件實體表(案件相關人信息,包括原告/被告的代理)entity以及表示代理人和原處理人關系的表relation,后者中要持有實體中代理的id和被代理人的id(parentId)
 因為一個案件常包括很多實體,所以為了方便,實體插入后需要返回帶id的實體對象,然后遍歷構造代理關系記錄。

二、技術分析

  1、mybatis單挑記錄插入返回id(在入參的id屬性中,直接返回的依然是影響的行數)

    a、mybatis展示   

1 <insert id="insertSelective" keyProperty="id" parameterType="DO"  useGeneratedKeys="true">
2 insert into fuji_base_entity(ID,*****)
3 values(#{id,jdbcType=INTEGER},****)
4 </insert>

    b、keyProperty:獲取數據庫生成的id放到哪個屬性中

    c、useGeneratedKeys:是否使用JDBC的getGenereatedKeys方法獲取主鍵並賦值到keyProperty設置的領域模型屬性中

  PS:

    數據庫不支持自增的情況(如oracle)

      a、mybatis展示 

<insert id="add" parameterType="EStudent">
  <selectKey keyProperty="id" resultType="_long" order="BEFORE">
    select CAST(RANDOM * 100000 as INTEGER) a FROM SYSTEM.SYSDUMMY1
  </selectKey>
  insert into TStudent(id, name, age) values(#{id}, #{name}, #{age})
</insert
      b、order必須是BEFORE,表示在insert執行前處理       
      c、keyProperty表示獲取的主鍵存放的屬性值   
      d、selectKey一般在oracle中表示獲取序列值
  2、mybatis批量記錄插入返回id
    a、mybatis展示 
<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>

 

    b、依然的userGeneratedKeys和keyProperty
    c、入參必須是list,返回是也是回寫list中對象的id字段
    d、升級Mybatis版本到3.3.1

  3、mybatis批量記錄插入返回包含id的的對象

  1、同上2
  2、循環處理上1  

三、其他方法返回

  1、insert操作

    a、默認返回的是插入的記錄數

  2、update操作

    a、底層執行中update操作分兩步:查詢匹配的記錄 和 更新這些結論。    
    b、默認情況下,mybatis的update方法返回的結果是匹配上的記錄數,針對同一條sql被執行了兩邊的情況下影響數為零情況無法判斷。
    
    c、此時,若想update返回的值為受影響的記錄數據就需要在聲明數據鏈接是添加設置,如:jdbc:mysql://localhost:3306/ssm?useAffectedRows=true
  3、delete操作
    a、刪除的記錄數


免責聲明!

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



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