最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis中useGenerateKeys的使用解析

 更新時(shí)間:2021年09月24日 09:48:36   作者:空山新雨天氣晚秋  
這篇文章主要介紹了MyBatis中useGenerateKeys的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MyBatis useGenerateKeys的使用

需求

使用MyBatis往MySQL數(shù)據(jù)庫中插入一條記錄后,需要返回該條記錄的自增主鍵值。

方法:在mapper中指定keyProperty屬性,示例如下:

<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" parameterType="cn.stu.entity.UserEntity">
    insert into user(userName,password,comment)  
    values(#{userName},#{password},#{comment})  
</insert>

注意:此處可能會(huì)有坑:

如果在<insert>的右邊尖括號(hào)之后有空格,在啟動(dòng)時(shí)可能會(huì)報(bào):元素類型 "insert" 必須后跟屬性規(guī)范 ">" 或 "/>",并且,在作新增操作時(shí)會(huì)一直增不進(jìn)去而報(bào)SQL語法錯(cuò)誤,碰到這類問題就把<insert>標(biāo)簽整體在敲一邊就可以了

如上所示,我們?cè)趇nsert中指定了keyProperty="userId",其中userId代表插入的User對(duì)象的主鍵屬性。

User.java

public class User {  
    private int userId;  
    private String userName;  
    private String password;  
    private String comment;        
    //setter and getter  
}  

UserDao.java

public interface UserDao {   
    public int insertAndGetId(User user);    
}  

測(cè)試:

Java代碼

User user = new User();  
user.setUserName("chenzhou");  
user.setPassword("xxxx");  
user.setComment("測(cè)試插入數(shù)據(jù)返回主鍵功能");  
  
System.out.println("插入前主鍵為:"+user.getUserId());  
userDao.insertAndGetId(user);//插入操作  
System.out.println("插入后主鍵為:"+user.getUserId());  

輸出:

1.插入前主鍵為:0

2.插入后主鍵為:15

查詢數(shù)據(jù)庫:

如上所示,剛剛插入的記錄主鍵id為15

小結(jié)一下吧

用了這個(gè)useGenerateKeys="true"后,不用再在寫一句關(guān)于select的SQL(降低數(shù)據(jù)庫的壓力)而直接能夠得到剛剛插進(jìn)去的那個(gè)主鍵,但是——這個(gè)屬性只能用在主鍵能自增長(zhǎng)的數(shù)據(jù)庫里面比如MySQL可以用,但是oracle就不能用了!

對(duì)于oracle返回自增主鍵(oracle序列)如下

  • keyProperty:將查詢到主鍵值設(shè)置到parameterType指定的對(duì)象的哪個(gè)屬性
  • order:相對(duì)于insert語句來說它的執(zhí)行順序,只要不是自增主鍵,那么就設(shè)置為before
  • resultType:指定返回的結(jié)果類型

MyBatis keyProperty和useGenerateKeys

用了這個(gè)useGenerateKeys="true"后,不用再在寫一句關(guān)于select的SQL(降低數(shù)據(jù)庫的壓力)而直接能夠得到剛剛插進(jìn)去的那個(gè)主鍵,但是——這個(gè)屬性只能用在主鍵能自增長(zhǎng)的數(shù)據(jù)庫里面比如MySQL可以用,但是oracle就不能用了!

這倆個(gè)屬性好像只能在insert語句中去使用

意思就是你在controller語句中執(zhí)行完一個(gè)insert語句后,會(huì)有一條記錄插入到了數(shù)據(jù)庫中,然后主鍵進(jìn)行了自增,正常情況下應(yīng)該是再有一條語句去數(shù)據(jù)庫中找到這個(gè)id,但是此時(shí)不用了,直接就可以拿到這個(gè)id了

看例子吧

User user = new User();  
user.setUserName("chenzhou");  
user.setPassword("xxxx");  
user.setComment("測(cè)試插入數(shù)據(jù)返回主鍵功能");  
 
System.out.println("插入前主鍵為:"+user.getUserId());  
userDao.insertAndGetId(user);//插入操作  
System.out.println("插入后主鍵為:"+user.getUserId());

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

长沙县| 古交市| 互助| 通城县| 东光县| 德兴市| 思茅市| 黑水县| 平南县| 江津市| 无棣县| 池州市| 克山县| 司法| 体育| 昆明市| 上饶县| 营山县| 资兴市| 桐庐县| 定日县| 凤台县| 古田县| 墨脱县| 客服| 忻州市| 山阳县| 肥城市| 平安县| 石狮市| 资源县| 沙河市| 连城县| 胶南市| 册亨县| 浑源县| 灵石县| 诸城市| 阳东县| 梁山县| 永泰县|