1. 程式人生 > >mybatis的insert語句獲取自增id的方法(mySQL)

mybatis的insert語句獲取自增id的方法(mySQL)

前提是資料庫表裡已經把id欄位設定成了自增的

javabean的定義是這樣的:

package test;

import java.util.Date;

public class Express {
	private int id;
	private String orderId;
	private Date deliveryDate;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getOrderId() {
		return orderId;
	}
	public void setOrderId(String orderId) {
		this.orderId = orderId;
	}
	public Date getDeliveryDate() {
		return deliveryDate;
	}
	public void setDeliveryDate(Date deliveryDate) {
		this.deliveryDate = deliveryDate;
	}
	
}

DAO層的insert方法是這樣的:

public int add(@Param("entity")Express express);
@Param("entity")是給引數express起的名字,mybatis的mapper.xml會使用這個名字

mybatis的mapper.xml裡的add定義是這樣的:

<!-- 插入記錄 -->
<insert id="add" parameterType="Object" useGeneratedKeys="true" keyProperty="entity.id" keyColumn="id">
	insert into
	express(order_id,delivery_date)
	values(#{entity.orderId},#{entity.deliveryDate})
</insert>

當我們定義了一個express物件,然後呼叫

dao.add(express);

插入資料庫成功後mybatis就會把插入的id賦值給這個express物件,後面就可以用express.getId()來獲取這個id了

注意:

1,mapper.xml裡面的keyProperty必須定義為entity.id而不是id,否則在呼叫dao.add(express)的時候會報錯:

Caused by: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [param1, entity]
	at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:165) ~[mybatis-3.2.7.jar:3.2.7]
	at org.apache.ibatis.reflection.wrapper.MapWrapper.getSetterType(MapWrapper.java:79) ~[mybatis-3.2.7.jar:3.2.7]
	at org.apache.ibatis.reflection.MetaObject.getSetterType(MetaObject.java:91) ~[mybatis-3.2.7.jar:3.2.7]
	at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.getTypeHandlers(Jdbc3KeyGenerator.java:82) ~[mybatis-3.2.7.jar:3.2.7]
	at org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator.processBatch(Jdbc3KeyGenerator.java:61) ~[mybatis-3.2.7.jar:3.2.7]
	... 97 common frames omitted
因為add方法傳入的引數叫做entity,mybatis並不認識entity裡的id欄位。

2,public int add(@Param("entity")Express express);這個方法的int型別返回值指的是insert成功的資料條數,而不是mybatis返回的新增id。也就是說,在上面的例子中,只要insert成功,方法的返回值永遠是1。


相關推薦

mybatis的insert語句獲取id方法mySQL

前提是資料庫表裡已經把id欄位設定成了自增的javabean的定義是這樣的:package test; import java.util.Date; public class Express { private int id; private String order

mybatis的insert插入後獲取id詳解從controller到mapper

需求說明:當執行插入操作的時候,其中資料包含兩個模組,分別存放在兩種資料庫表中,拿表A,表B來說。 表A為基本資訊表,其中插入時候有自增id,也就是每新增一條資料後下一個id都會自動加1。 表B為詳情表,其中有個欄位為A_id與A表中的id是一樣的,也就是他們的關聯欄位。 那麼問

Mybatis下insert語句獲取id

目前專案是一個公司平臺的專案重構,專案原來的設計很多不必要。但是也會用到。之前遇到了這種insert後需要知道自增id。然後根據自增id還要去關聯表插入一條資料。我是很不支援這樣的。但是原有設計如此。而且是第二次遇到,第一次沒有記,這次記下來,目前我只負責訂單系

mysql獲取id最大值四種方法

1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函式 LAST_INSERT_ID 是與table無關的,如果向表a插入資料後,再向表b插入資料,LAST_INSERT_ID會改變。 在多使用者交替插入資料的情況下max(id)顯然不能用

MyBatis 批量插入獲取 id 問題解決

插入 lis foreach myba 如果 .cn bsp collect images 問題: 通過 MyBatis 進行批量插入時,如果我們想獲取插入對象所對應的主鍵 id,做法是直接在 <insert> 標簽中直接加入 useGeneratedKeys

mybatis 在oracle資料庫中插入資料時獲取ID sequence序列

在oracle中sequence就是序號,每次取的時候它會自動增加。sequence與表沒有關係。 Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE許可權。 建立語句如下: CREATE SEQUEN

oracle資料庫在mybatis框架中獲取id

oracle資料庫獲取自增id的方法與mysql不一樣,後者通過設定useGeneratedKeys和keyProperty即可實現。 但是oralce資料庫自增是通過自定義的sequence佇列。所以方法上有所不同。 自增佇列: create or replace t

mybatis查詢語句獲取主鍵

第一種方式: 主鍵回填useGeneratedKeys 代表採用JDBC的Statment物件的getGeneratedKeys方法返回主鍵keyProperty 代表將用哪個POJO的屬性去匹配這個主鍵 <!-- 插入記錄 --><insert id="insert" parameterT

tp5 save()儲存後,獲取ID,獲取關聯表中的某值

用過tp5的小夥伴們都知道用save方法新增資料返回的是寫入的記錄數。 但是專案中常常遇到在儲存成功資料後也要獲取這條資料的主鍵id,以方便存到其他表裡用作關聯需要,下面是程式碼示例: //向user表中儲存一條資料 $data = [ 'username'=>'ceshi',

spring jpa 獲取id

1.為實體類的id註解 @GeneratedValue(strategy=GenerationType.IDENTITY) 指定id的生成策略 @Id @GeneratedValue(strategy = GenerationType.IDENTITY)

Entity Framework新增記錄時獲取ID

與Entity Framework相伴的日子痛並快樂著。今天和大家分享一下一個快樂,兩個痛苦。 先說快樂的吧。Entity Framework在將資料插入資料庫時,如果主鍵欄位是自增標識列,會將該自增值返回給實體物件對應的屬性。 比如下面新增部落格隨筆至資料庫的示例程

關於mybatis插入時如何獲取id

一般mybatis插入的話不像hibernate會返回像mysql或者sql server這些關係資料庫中的自增id,那該怎麼樣才能從插入時返回資料庫中的自增id呢?其實mybatis已經為我們做了這樣一個設定,只需要在寫插入語句定義好返回主鍵id對應傳入的java物件中的

mybatis 在oracle資料庫中插入資料時獲取ID

就是建立一個SEQUENCE,通過它來獲取自增ID ① 在資料庫中操作: CREATE SEQUENCE CONFIG_KEYWORD_GATHER_SEQ;在XXXMapper.xml中程式碼:&l

mybatis 在oracle資料庫中插入資料時獲取ID sequence序列

在oracle中sequence就是序號,每次取的時候它會自動增加。sequence與表沒有關係。 Create Sequence 首先要有CREATE SEQUENCE或者CREATE

jdbc新增以後獲取id

Integer enterInfoId = null;insert into Tbl_Xz_PersonalInformation(name,locationArea,phone,flag) values('"+user.getRealname()+"',"+user.get

.NET 分散式Id元件解決自動分配機器Id、時間回撥問題

目錄 簡介 產生背景 使用方式 原始版 完美版 測試 結尾 簡介 IdHelper是一個.NET(支援.NET45+或.NET Standard2+)生成分散式趨勢自增Id元件,有兩個版本:原始版為基於雪花Id(不瞭解請自行百度)方案,需要手動管理設定WorkerId;完美版在原始版的基礎上使用Zoo

獲取IWebBrowser2指標的方法

在Internet Explorer程式設計中,獲取WebBrowser指標通常是一件很重要的事情,因為有了WebBrowser指標,我們就有了對IE完整的控制權。我們 就可以對IE瀏覽器為所欲為了,想幹什麼都可以。比方說獲取或者設定DOM控制元件的值。呼叫頁面中的Jav

SQL語句常見優化十大案例MySQL

1、慢SQL消耗了70%~90%的資料庫CPU資源; 2、SQL語句獨立於程式設計邏輯,相對於對程式原始碼的優化,對SQL語句的優化在時間成本和風險上的代價都很低; 3、SQL語句可以有不同的寫法; 下面是我總結的一些SQL常見的優化方法,每個案例都簡單易懂,在開發過程

獲取mysql idmysql 下一個id方法

mysql獲取表中自增id的方法: 1. 使用 select MAX(id) from tablename; 獲取的是表中最大的id;順序執行  insert ---> delete 插入的資料----> select MAX(id) from tablenam

MySQL ID獲取方法

 如何獲取 MYSQL中某個表的自增ID欄位的下一個值 ? 方法一:  例如:在zx_ofc.task_order表中task_id是自增欄位。 它的下一個自增欄位可以通過下面的語句獲得 SELECT