spring boot + jpa + kotlin入门实例详解
springboot+jpa的文章网络上已经有不少,这里主要补充一下用kotlin来做。
kotlin里面的dataclass来创建entity可以帮助我们减少不少的代码,比如现在这个User的Entity,这是Java版本的:
@Entity
publicclassUser{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
privatelongid;
privateStringfirstName;
privateStringlastName;
publicStringgetLastName(){
returnlastName;
}
publicvoidsetLastName(StringlastName){
this.lastName=lastName;
}
publiclonggetId(){
returnid;
}
publicvoidsetId(longid){
this.id=id;
}
publicStringgetFirstName(){
returnfirstName;
}
publicvoidsetFirstName(StringfirstName){
this.firstName=firstName;
}
}
上面的那一大段变成kotlin,就像下面的这样的:
@Entity dataclassUser(@Id@GeneratedValue(strategy=GenerationType.AUTO)valid:Long=0L,valfirstName:String="",vallastName:String="")
连我这个用C#的人都觉得动心,如果你是Java的开发者,真的可以考虑试试看。
不过,这里还有个小提示,在kotlin里,如果你不给User给出默认的构造函数,那是会报错的,报错信息为
o.s.boot.web.support.ErrorPageFilter:Forwardingtoerrorpagefromrequest/duetoexceptionNodefaultconstructorforentity::com._1b2m.springbootkotin.User;nestedexceptionisorg.hibernate.InstantiationException:Nodefaultconstructorforentity::com._1b2m.springbootkotin.User
提示是没有默认的构造函数,我们可以为User类的构造函数增加参数默认值来完成,就如同上面我写的样子。
题外话,在Java里,IDE可以帮助我们生成getter和setter。但是就算是这样,也没有像kotlin那样能把那么长的代码缩成一行,一个entity一行就写完,这感觉很不要太好。
另外,在Java里,使用CrudRepository时,这样用就行:
@Autowired UserRepositoryrepository;
但是在kotlin里,编译都无法通过,会报出这样一条错误:
propertymustbeinitializedorbeabstract
要解决这个问题,需要增加lateinit,就像这样:
@Autowired lateinitvarrepository:UserRepository
其他的基本跟Java一致。
本文提到的源码放在github
在写springboot程序时,kotlin的确少写了非常多的代码,这令我对这门语言也有所期待了。
以上所述是小编给大家介绍的springboot+jpa+kotlin入门实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!