mybatis返回主鍵ID(自增和非自增)的兩種方式


一.mapper映射文件

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.mapper.TableNameMapper">
    <!-- 插入數據並返回自增ID
        有自增ID功能數據庫可以采用useGeneratedKeys="true"開啟判斷是否是自增ID
         keyProperty="id"  指定插入數據后自增ID返回時賦值給實體類的那個屬性(這里是id屬性)
     -->
    <insert id="insertData"  parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="id">
        insert into tableName values(null,#{name})
    </insert>
    <!-- 
        非自增主鍵
        像Oracle數據庫采用序列來作為自增主鍵,通過 selectKey子來獲取主鍵值
        MySQL同樣適用(只是order屬性處為after, 因為mysql自增完ID后才返回ID值)
     -->
     <insert id="insertDataAgain">
         <!-- 
             selectKey中resultType屬性指定期望主鍵的返回的數據類型,
             keyProperty屬性指定實體類對象接收該主鍵的字段名
             order屬性指定執行查詢主鍵值SQL語句是在插入語句執行之前還是之后(可取值:after和before)
          -->
          <!-- oracle -->
         <selectKey resultType="integer" keyProperty="id" order="BEFORE">
             SELECT LAST_INSERT_ID()
         </selectKey>
         <!--
         <selectKey resultType="integer" keyProperty="id" order="AFTER">
             SELECT id from tableName order by id desc limit 1
         </selectKey>
         -->
        insert into tableName values(null,#{name})
    </insert>
</mapper>

注: ORACLE返回主鍵最好是在插入SQL執行之前執行,也就是order屬性值設置為before

二.mapper接口

public interface TableNameMapper {
    //插入數據
    public Integer insertData(Map<String, Object> map);
    //插入數據
    public Integer insertDataAgain(Map<String, Object> map);
}

 

三.如何取到ID

    當數據添加成功之后,你打印接口中傳入的map,會發現里面多了一個id屬性,且值和數據庫自增的id是一模一樣的,這就是ID返回的實現


免責聲明!

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



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