tk.Mybatis 插入數(shù)據(jù)獲取Id問題
1、問題描述
幾種代碼寫法會(huì)有不同的ID返回值,下面我們一一分析。
2、問題分析
??首先一種插入寫法,源碼如下:
SysUser .java
/**
* 用戶管理(SysUser)實(shí)體類
*
* @author Chen
* @since 2020-05-06 14:16:48
*/
@Data
@ApiModel("用戶管理")
public class SysUser implements Serializable {
private static final long serialVersionUID = 993569543176442301L;
/**
* 編號(hào)
*/
@Id
private Long id;
/**
* 用戶名
*/
private String name;
/**
* 昵稱
*/
private String nickName;
/**
* 頭像
*/
private String avatar;
/**
* 密碼
*/
private String password;
/**
* 加密鹽
*/
private String salt;
/**
* 郵箱
*/
private String email;
/**
* 手機(jī)號(hào)
*/
private String mobile;
/**
* 狀態(tài) 0:禁用 1:正常
*/
private Object status;
/**
* 機(jī)構(gòu)ID
*/
private Long deptId;
/**
* 創(chuàng)建人
*/
private String createBy;
/**
* 創(chuàng)建時(shí)間
*/
private Date createTime;
/**
* 更新人
*/
private String lastUpdateBy;
/**
* 更新時(shí)間
*/
private Date lastUpdateTime;
/**
* 是否刪除 -1:已刪除 0:正常
*/
private Object delFlag;
}
測(cè)試類
@Test
void insert() {
SysUser sysUser = new SysUser();
sysUser.setName("zhangsan3");
sysUser.setNickName("張三3");
SysUser insert = sysUserService.insert(sysUser);
System.out.println(insert);
}
結(jié)果輸出:
SysUser(id=null, name=zhangsan3, nickName=張三3, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)
是的我們獲取到的是id=null,這顯然不符合我們的預(yù)期。于是修改代碼。只改測(cè)試類。比如輸入id=0。源碼如下:
@Test
void insert() {
SysUser sysUser = new SysUser();
sysUser.setId(0L);
sysUser.setName("zhangsan6");
sysUser.setNickName("張三6");
SysUser insert = sysUserService.insert(sysUser);
System.out.println(insert);
}
再次運(yùn)行程序,控制臺(tái)輸出如下:
SysUser(id=0, name=zhangsan4, nickName=張三4, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)
嗯,好像確實(shí)輸出了id=0,符合我們的預(yù)期,但是真的是這樣嗎?我們看看數(shù)據(jù)庫限制是什么樣。

沒錯(cuò),我們的真實(shí)id是38。這里就有問題了。查閱相關(guān)資料說是在實(shí)體類中添加@GeneratedValue(strategy = GenerationType.IDENTITY)就可以了。于是我們照做。修改實(shí)體類如下:
/**
* 用戶管理(SysUser)實(shí)體類
*
* @author Chen
* @since 2020-05-06 14:16:48
*/
@Data
@ApiModel("用戶管理")
public class SysUser implements Serializable {
private static final long serialVersionUID = 993569543176442301L;
/**
* 編號(hào)
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 用戶名
*/
private String name;
/**
* 昵稱
*/
private String nickName;
/**
* 頭像
*/
private String avatar;
/**
* 密碼
*/
private String password;
/**
* 加密鹽
*/
private String salt;
/**
* 郵箱
*/
private String email;
/**
* 手機(jī)號(hào)
*/
private String mobile;
/**
* 狀態(tài) 0:禁用 1:正常
*/
private Object status;
/**
* 機(jī)構(gòu)ID
*/
private Long deptId;
/**
* 創(chuàng)建人
*/
private String createBy;
/**
* 創(chuàng)建時(shí)間
*/
private Date createTime;
/**
* 更新人
*/
private String lastUpdateBy;
/**
* 更新時(shí)間
*/
private Date lastUpdateTime;
/**
* 是否刪除 -1:已刪除 0:正常
*/
private Object delFlag;
}

主要就是改了這里。OK,繼續(xù)運(yùn)行程序,結(jié)果如下:
SysUser(id=0, name=zhangsan5, nickName=張三5, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)
這里的id還是0,什么鬼。再看看數(shù)據(jù)庫。

明顯不是0。所以這里不能設(shè)置id的屬性。修改測(cè)試類。源碼如下:
@Test
void insert() {
SysUser sysUser = new SysUser();
sysUser.setName("zhangsan6");
sysUser.setNickName("張三6");
SysUser insert = sysUserService.insert(sysUser);
System.out.println(insert);
}
繼續(xù)運(yùn)行程序,結(jié)果如下:
SysUser(id=40, name=zhangsan6, nickName=張三6, avatar=null, password=null, salt=null, email=null, mobile=null, status=null, deptId=null, createBy=null, createTime=null, lastUpdateBy=null, lastUpdateTime=null, delFlag=null)
這次id=40了,查看數(shù)據(jù)庫。

很明顯對(duì)上了。
3、總結(jié)
到此這篇關(guān)于tk.Mybatis 插入數(shù)據(jù)獲取Id問題的文章就介紹到這了,更多相關(guān)tk.Mybatis 插入數(shù)據(jù)獲取Id內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring AOP日志框架實(shí)現(xiàn)過程圖解
這篇文章主要介紹了Spring AOP日志框架實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Springboot3利用redis生成唯一訂單號(hào)的實(shí)現(xiàn)示例
本文主要介紹了Springboot3利用redis生成唯一訂單號(hào)的實(shí)現(xiàn)示例,包括UUID、雪花算法和數(shù)據(jù)庫約束,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
在windows下揪出java程序占用cpu很高的線程并完美解決
這篇文章主要介紹了在windows下揪出java程序占用cpu很高的線程并完美解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
spring?boot自動(dòng)裝配之@ComponentScan注解用法詳解
@ComponentScan的作用就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類裝配到spring容器中,下面這篇文章主要給大家介紹了關(guān)于spring?boot自動(dòng)裝配之@ComponentScan注解用法的相關(guān)資料,需要的朋友可以參考下2023-04-04
Mybatis聯(lián)合查詢的實(shí)現(xiàn)方法
本文主要介紹了 Mybatis聯(lián)合查詢的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
基于SpringBoot上傳任意文件功能的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄赟pringBoot上傳任意文件功能的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08
java實(shí)現(xiàn)監(jiān)控rtsp流轉(zhuǎn)flv方法實(shí)例(前端播放,前后端代碼都有)
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)監(jiān)控rtsp流轉(zhuǎn)flv的相關(guān)資料,文中介紹的是前端播放,前后端代碼都有,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06

