Advertisement
Madcaden

jpa+kotlin

Jul 21st, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. spring boot + jpa + kotlin实例
  2.  
  3. spring boot +jpa的文章网络上已经有不少,这里主要补充一下用kotlin来做。
  4.  
  5. kotlin里面的data class来创建entity可以帮助我们减少不少的代码,比如现在这个User的Entity
  6. ```java
  7. @Entity
  8. public class User {
  9.  
  10. @Id
  11. @GeneratedValue(strategy = GenerationType.AUTO)
  12. private long id;
  13. private String firstName;
  14. private String lastName;
  15.  
  16. public String getLastName() {
  17. return lastName;
  18. }
  19.  
  20. public void setLastName(String lastName) {
  21. this.lastName = lastName;
  22. }
  23.  
  24. public long getId() {
  25. return id;
  26. }
  27.  
  28. public void setId(long id) {
  29. this.id = id;
  30. }
  31.  
  32. public String getFirstName() {
  33. return firstName;
  34. }
  35.  
  36. public void setFirstName(String firstName) {
  37. this.firstName = firstName;
  38. }
  39. }
  40.  
  41. ```
  42. 写成kotlin就是这样
  43.  
  44. ```kotlin
  45. @Entity
  46. data class User(@Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0L, val firstName: String = "", val lastName: String = "")
  47. ```
  48. 连我这个用C#的人都觉得动心,如果你是Java的开发者,真的可以考虑试试看。
  49.  
  50. 不过,这里还有个小提示,在kotlin如果你不给User给出默认的构造函数,那是会报错的,不能实例化User对象,报错信息为
  51. > 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]
  52.  
  53. 提示是没有默认的构造函数,不过在kotlin里,可以为构造函数增加一个参数默认值来完成。
  54.  
  55. 题外话,在Java里,IDE可以帮助我们生成getter和setter。但是就算是这样,也没有像kotlin那样能把那么长的代码缩成一行,一个entity一行就写完,这感觉很不要太好。
  56.  
  57. 另外,在Java里,使用CrudRepository时,这样用就行:
  58. ```java
  59. @Autowired
  60. UserRepository repository;
  61. ```
  62.  
  63. 但是在kotlin里,编译都无法通过,会报出这样一条错误:
  64. > property must be initialized or be abstract
  65.  
  66. 要解决这个问题,需要增加lateinit,就像 这样:
  67.  
  68. ```kotlin
  69. @Autowired
  70. lateinit var repository: UserRepository
  71. ```
  72.  
  73. 其他的基本跟Java一致。
  74.  
  75. 本文提到的源码放在[]()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement