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的确少写了非常多的代码,这令我对这门语言也有所期待了。

最新文章

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

热门文章

  1. OpenCV-bwLabel-实现图像连通组件标记与分析
  2. 记一次MSSQL到MySQL大数据迁移过程
  3. 允许发生http请求
  4. 发布网站的时候发现360极速浏览器ie7内核不兼容样式的问题
  5. RAC7——vip的理解
  6. selenium常用获取元素点
  7. java 环境变量与安装目录
  8. js实现动态球形标签云
  9. DataTable 分批处理,每批处理4行
  10. java 解析pdm文档