spring boot + jpa + kotlin入門(mén)實(shí)例詳解
spring boot +jpa的文章網(wǎng)絡(luò)上已經(jīng)有不少,這里主要補(bǔ)充一下用kotlin來(lái)做。
kotlin里面的data class來(lái)創(chuàng)建entity可以幫助我們減少不少的代碼,比如現(xiàn)在這個(gè)User的Entity,這是Java版本的:
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String firstName; private String lastName; public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } }
上面的那一大段變成kotlin,就像下面的這樣的:
@Entity data class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0L, val firstName: String = "", val lastName: String = "")
連我這個(gè)用C#的人都覺(jué)得動(dòng)心,如果你是Java的開(kāi)發(fā)者,真的可以考慮試試看。
不過(guò),這里還有個(gè)小提示,在kotlin里,如果你不給User給出默認(rèn)的構(gòu)造函數(shù),那是會(huì)報(bào)錯(cuò)的,報(bào)錯(cuò)信息為
o.s.boot.web.support.ErrorPageFilter : Forwarding to error page from request / due to exception No default constructor for entity: : com._1b2m.springbootkotin.User; nested exception is org.hibernate.InstantiationException: No default constructor for entity: : com._1b2m.springbootkotin.User
提示是沒(méi)有默認(rèn)的構(gòu)造函數(shù),我們可以為User類(lèi)的構(gòu)造函數(shù)增加參數(shù)默認(rèn)值來(lái)完成,就如同上面我寫(xiě)的樣子。
題外話(huà),在Java里,IDE可以幫助我們生成getter和setter。但是就算是這樣,也沒(méi)有像kotlin那樣能把那么長(zhǎng)的代碼縮成一行,一個(gè)entity一行就寫(xiě)完,這感覺(jué)很不要太好。
另外,在Java里,使用CrudRepository時(shí),這樣用就行:
@Autowired UserRepository repository;
但是在kotlin里,編譯都無(wú)法通過(guò),會(huì)報(bào)出這樣一條錯(cuò)誤:
property must be initialized or be abstract
要解決這個(gè)問(wèn)題,需要增加lateinit,就像 這樣:
@Autowired lateinit var repository: UserRepository
其他的基本跟Java一致。
本文提到的源碼放在github
在寫(xiě)spring boot程序時(shí),kotlin的確少寫(xiě)了非常多的代碼,這令我對(duì)這門(mén)語(yǔ)言也有所期待了。
以上所述是小編給大家介紹的spring boot + jpa + kotlin入門(mén)實(shí)例詳解 ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
- 關(guān)于Spring Boot和Kotlin的聯(lián)合開(kāi)發(fā)
- 使用Spring boot + jQuery上傳文件(kotlin)功能實(shí)例詳解
- Spring Boot 與 Kotlin 使用JdbcTemplate連接MySQL數(shù)據(jù)庫(kù)的方法
- Spring Boot 與 kotlin 使用Thymeleaf模板引擎渲染web視圖的方法
- Kotlin + Spring Boot 請(qǐng)求參數(shù)驗(yàn)證的代碼實(shí)例
- 詳解用Kotlin寫(xiě)一個(gè)基于Spring Boot的RESTful服務(wù)
- Spring Boot 與 Kotlin 使用Redis數(shù)據(jù)庫(kù)的配置方法
- Spring Boot 與 Kotlin 上傳文件的示例代碼
- Spring Boot與Kotlin定時(shí)任務(wù)的示例(Scheduling Tasks)
- 利用Kotlin + Spring Boot實(shí)現(xiàn)后端開(kāi)發(fā)
相關(guān)文章
Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07詳解Java volatile 內(nèi)存屏障底層原理語(yǔ)義
為了保證內(nèi)存可見(jiàn)性,java 編譯器在生成指令序列的適當(dāng)位置會(huì)插入內(nèi)存屏障指令來(lái)禁止特定類(lèi)型的處理器重排序。為了實(shí)現(xiàn) volatile 內(nèi)存語(yǔ)義,JMM 會(huì)分別限制這兩種類(lèi)型的重排序類(lèi)型2021-09-09java應(yīng)用程序如何自定義log4j配置文件的位置
這篇文章主要介紹了java應(yīng)用程序如何自定義log4j配置文件的位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java AtomicInteger類(lèi)的重要方法和特性
AtomicInteger是Java中的一個(gè)類(lèi),用于實(shí)現(xiàn)原子操作的整數(shù),AtomicInteger類(lèi)主要用于處理整數(shù)類(lèi)型的原子操作,本文給大家介紹Java AtomicInteger類(lèi)的重要方法和特性,感興趣的朋友一起看看吧2023-10-10spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù)
這篇文章主要介紹了spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06Spring中@EnableScheduling注解的工作原理詳解
這篇文章主要介紹了Spring中@EnableScheduling注解的工作原理詳解,@EnableScheduling是 Spring Framework 提供的一個(gè)注解,用于啟用Spring的定時(shí)任務(wù)(Scheduling)功能,需要的朋友可以參考下2024-01-01Springboot報(bào)錯(cuò)java.lang.NullPointerException: null問(wèn)題
這篇文章主要介紹了Springboot報(bào)錯(cuò)java.lang.NullPointerException: null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11