(一)第一種方式 當你把數據庫表設置爲自增Id時,這種新增不需要在輸入id值。如何返回id值,就用到了useGeneratedKeys 和 keyProperty
@RequestMapping(value="/insertUser",method=RequestMethod.POST)
@ResponseBody
public int insertUser() {
User user1 = new User();
user1.setUsername("234");
user1.setUsersex(4);
user1.setDegree(100.08);
int count = userTestService.insertUser1(user1);
System.out.println("共插入1條數據"+"userid值爲"+user1.getUserid());
return count;
}
注意上述代碼@ResponseBody 一定的加,不然報:
java.lang.IllegalArgumentException: Unknown return value type: java.lang.Integer
keyProperty=“userid” 中userid爲主鍵
<insert id="insertUser1" useGeneratedKeys="true" keyProperty="userid">
insert into richfit_myku(user_name,user_sex,degree)
values(
#{username}, #{usersex}, #{degree})
</insert>
@Data
@TableName(value = "richfit_myku")
public class User implements Serializable {
private int userid;
private String username;
private int usersex;
private Double degree;
}
(二)第二種方式 selectKey 返回主鍵的值
有些數據庫(如 Oracle )不提供主鍵自增的功能,而是使用序列得到 個值,然後將這個值賦給 id ,再將數據插入數據庫。對於這種情況,可以採用另外 種方式:使用<selectKek>標籤來獲取主鍵的值,這種方式不適用於不提供主鍵自增功能的數據庫,也適用於提供主鍵自增功能的數據庫。
selectKey 標籤 ke yColumn keyProperty 和上面 useGeneratedKeys 的用法含義相同 ,這 resultType 用於設置返回值類型order屬性的設置和使用的數據庫有關MySQL 數據庫中, order 屬性設置的值是 AFTER,因爲當前記錄的主鍵值在 insert 語句執行成功後才能獲取 而在 Oracle 數據庫中, order 的值要設置爲 BEFORE ,這是因爲 Oracle中需要先從序列獲取值,然後將值作爲主鍵插入到數據庫中。
<insert id="insertUser1">
insert into richfit_myku(user_name,user_sex,degree)
values(
#{username}, #{usersex}, #{degree})
<selectKey keyColumn="userid" keyProperty="userid" resultType="int" order="AFTER">
<!-- MySQL 中的 SQL 語句 SELECT LAST_ INSERT_ ID ()用於獲
數據庫中最後插入的數據的 ID-->
select LAST_INSERT_ID()
</selectKey>
</insert>