Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- spring boot + jpa + kotlin实例
- spring boot +jpa的文章网络上已经有不少,这里主要补充一下用kotlin来做。
- kotlin里面的data class来创建entity可以帮助我们减少不少的代码,比如现在这个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就是这样
- ```kotlin
- @Entity
- data class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0L, val firstName: String = "", val lastName: String = "")
- ```
- 连我这个用C#的人都觉得动心,如果你是Java的开发者,真的可以考虑试试看。
- 不过,这里还有个小提示,在kotlin如果你不给User给出默认的构造函数,那是会报错的,不能实例化User对象,报错信息为
- > 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]
- 提示是没有默认的构造函数,不过在kotlin里,可以为构造函数增加一个参数默认值来完成。
- 题外话,在Java里,IDE可以帮助我们生成getter和setter。但是就算是这样,也没有像kotlin那样能把那么长的代码缩成一行,一个entity一行就写完,这感觉很不要太好。
- 另外,在Java里,使用CrudRepository时,这样用就行:
- ```java
- @Autowired
- UserRepository repository;
- ```
- 但是在kotlin里,编译都无法通过,会报出这样一条错误:
- > property must be initialized or be abstract
- 要解决这个问题,需要增加lateinit,就像 这样:
- ```kotlin
- @Autowired
- lateinit var repository: UserRepository
- ```
- 其他的基本跟Java一致。
- 本文提到的源码放在[]()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement