• 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,就像下面的这样的:

    @Entity
    data class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0L, val firstName: String = "", val lastName: String = "")
    

    连我这个用C#的人都觉得动心,如果你是Java的开发者,真的可以考虑试试看。

    不过,这里还有个小提示,在kotlin里,如果你不给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

    提示是没有默认的构造函数,我们可以为User类的构造函数增加参数默认值来完成,就如同上面我写的样子。

    题外话,在Java里,IDE可以帮助我们生成getter和setter。但是就算是这样,也没有像kotlin那样能把那么长的代码缩成一行,一个entity一行就写完,这感觉很不要太好。

    另外,在Java里,使用CrudRepository时,这样用就行:

    @Autowired
    UserRepository repository;
    

    但是在kotlin里,编译都无法通过,会报出这样一条错误:

    property must be initialized or be abstract

    要解决这个问题,需要增加lateinit,就像 这样:

    @Autowired
    lateinit var repository: UserRepository
    

    其他的基本跟Java一致。

    本文提到的源码放在github

    在写spring boot程序时,kotlin的确少写了非常多的代码,这令我对这门语言也有所期待了。

  • 相关阅读:
    Codeforces 672D
    Codeforces 672C
    Codeforces 673D
    Codeforces 1181D
    Codeforces 1181C
    Codeforces 1011F
    Codeforces 1011E
    2020.1.3计导全面复习
    csp模拟题-201903
    CCF模拟题-201909
  • 原文地址:https://www.cnblogs.com/asis/p/spring-boot-jpa-kotlin.html
Copyright © 2020-2023  润新知