MyBatis中有關(guān)int和Integer的使用方式
有關(guān)int和Integer的使用
int 類型,在默認(rèn)情況下不賦值為0,執(zhí)行到mybatis的更新語句時(shí),被當(dāng)做數(shù)字0,而非null
Integer的默認(rèn)值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無法表達(dá)出未賦值的情況,
總結(jié):在實(shí)體類中盡量使用Integer修飾,Integer可以區(qū)分出未賦值和值為0的區(qū)別,我們大部分做判斷都是以“”null“”去判斷的。
? ? /** ? ? ?* 主鍵字段 ? ? ?*/ ? ? @TableId(type = IdType.AUTO) //根據(jù)數(shù)據(jù)庫類型設(shè)置自增 ? ? private Integer id;
自增主鍵為integer類型,對應(yīng)數(shù)據(jù)庫列類型為int,如果不加這個(gè)配置的話,就會默認(rèn)將跟隨全局。
如果你的數(shù)據(jù)庫是int類型且自增的話,那么mybatis-plus會默認(rèn)插入Long類型的自增id,導(dǎo)致報(bào)錯(cuò),當(dāng)然你可以考慮在數(shù)據(jù)庫里把id設(shè)置成bigint類型,實(shí)體類里用Long來作為主鍵id
int和Integer的區(qū)別
1、Integer是int的包裝類,int則是java的一種基本數(shù)據(jù)類型
2、Integer變量必須實(shí)例化后才能使用,而int變量不需要
3、Integer實(shí)際是對象的引用,當(dāng)new一個(gè)Integer時(shí),實(shí)際上是生成一個(gè)指針指向此對象;而int則是直接存儲數(shù)據(jù)值
4、Integer的默認(rèn)值是null,int的默認(rèn)值是0
延伸:
關(guān)于Integer和int的比較
1、由于Integer變量實(shí)際上是對一個(gè)Integer對象的引用,所以兩個(gè)通過new生成的Integer變量永遠(yuǎn)是不相等的(因?yàn)閚ew生成的是兩個(gè)對象,其內(nèi)存地址不同)。
Integer i = new Integer(100); Integer j = new Integer(100); System.out.print(i == j); //false
2、Integer變量和int變量比較時(shí),只要兩個(gè)變量的值是向等的,則結(jié)果為true(因?yàn)榘b類Integer和基本數(shù)據(jù)類型int比較時(shí),java會自動拆包裝為int,然后進(jìn)行比較,實(shí)際上就變?yōu)閮蓚€(gè)int變量的比較)
Integer i = new Integer(100); int j = 100; System.out.print(i == j); //true
3、非new生成的Integer變量和new Integer()生成的變量比較時(shí),結(jié)果為false。(因?yàn)榉莕ew生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內(nèi)存中的地址不同)
Integer i = new Integer(100); Integer j = 100; System.out.print(i == j); //false
4、對于兩個(gè)非new生成的Integer對象,進(jìn)行比較時(shí),如果兩個(gè)變量的值在區(qū)間-128到127之間,則比較結(jié)果為true,如果兩個(gè)變量的值不在此區(qū)間,則比較結(jié)果為false
Integer i = 100; Integer j = 100; System.out.print(i == j); //true Integer i = 128; Integer j = 128; System.out.print(i == j); //false
對于第4條的原因:
java在編譯Integer i = 100 ;時(shí),會翻譯成為Integer i = Integer.valueOf(100);,而java API中對Integer類型的valueOf的定義如下:
public static Integer valueOf(int i){ ? ? assert IntegerCache.high >= 127; ? ? if (i >= IntegerCache.low && i <= IntegerCache.high){ ? ? ? ? return IntegerCache.cache[i + (-IntegerCache.low)]; ? ? } ? ? return new Integer(i); }
java對于-128到127之間的數(shù),會進(jìn)行緩存,Integer i = 127時(shí),會將127進(jìn)行緩存,下次再寫Integer j = 127時(shí),就會直接從緩存中取,就不會new了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring使用@Async注解導(dǎo)致循環(huán)依賴問題異常的排查記錄
這篇文章主要介紹了spring使用@Async注解導(dǎo)致循環(huán)依賴問題異常的排查記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08mybatis的動態(tài)SQL和模糊查詢實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于mybatis的動態(tài)SQL和模糊查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03spring boot 監(jiān)聽容器啟動代碼實(shí)例
這篇文章主要介紹了spring boot 監(jiān)聽容器啟動代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Spring內(nèi)存緩存Caffeine的基本使用教程分享
Caffeine作為當(dāng)下本地緩存的王者被大量的應(yīng)用再實(shí)際的項(xiàng)目中,可以有效的提高服務(wù)吞吐率、qps,降低rt,本文就來簡單介紹下Caffeine的使用姿勢吧2023-03-03java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例
這篇文章主要介紹了java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能,結(jié)合完整實(shí)例形式分析了Aes加密解密功能的定義與使用方法,需要的朋友可以參考下2017-01-01解決mac最新版intellij idea崩潰閃退crash的問題
這篇文章主要介紹了解決mac最新版intellij idea崩潰閃退crash的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09JavaWeb購物車項(xiàng)目開發(fā)實(shí)戰(zhàn)指南
之前沒有接觸過購物車的東東,也不知道購物車應(yīng)該怎么做,所以在查詢了很多資料,總結(jié)一下購物車的功能實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于JavaWeb購物車項(xiàng)目開發(fā)的相關(guān)資料,需要的朋友可以參考下2022-06-06