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的确少写了非常多的代码,这令我对这门语言也有所期待了。
最新文章
- 剑指Offer面试题:29.丑数
- HBase集成Zookeeper集群部署
- jquery send(data) 对data的处理
- Atitit.api参数传递的设计
- Wikioi 1020 孪生蜘蛛 Label:Floyd最短路
- 【125】固定IP的电脑配置无线路由
- 13 引用WINAPI
- VIEW层AJAX提交表单到Controller的实体
- MySQL开启远程链接(2014.12.12)
- Merge into(oracle)
- the selected server is enabled,but is not configured properly.Deployment to it will not be permitted
- Unity暂停游戏功能
- php配置文件php.ini的详细解析
- English trip EM2-LP-5A Food Teacher:Lamb
- 【转】WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
- rational rose java.lang.classNotFoundException
- 【整理】HTML5游戏开发学习笔记(5)- 猜谜游戏
- 第12月第14天 sfml cmake
- h5语音录制及上传(Java版语音聊天系统)
- android 图片大小适配,如何在不同屏幕上适配图片,如何设置可以自适应不同分辨率?