SAnyExtension.kt 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * ********************************************************************************************************************
  3. *
  4. * iFHS7.
  5. * ;BBMBMBMc rZMBMBR BMB
  6. * MBEr:;PBM, 7MBMMEOBB: BBB RBW
  7. * XK: BO SB. :SZ MBM. c;; ir BBM :FFr :SSF: ;xBMB:r iuGXv. i:. iF2;
  8. * DBBM0r. :D S7 ;XMBMB GMBMu. MBM: BMB MBMBBBMBMS WMBMBMBBK MBMBMBM BMBRBMBW .MBMBMBMBB
  9. * :JMRMMD .. , 1MMRM1; ;MBMBBR: MBM ;MB: BMB: MBM. RMBr sBMH BM0 UMB, BMB. KMBv
  10. * ;. XOW B1; :uM: 1RE, i .2BMBs rMB. MBO MBO JMB; MBB MBM BBS 7MBMBOBM: MBW :BMc
  11. * OBRJ.SEE MRDOWOR, 3DE:7OBM . ;BMB RMR7BM BMB MBB. BMB ,BMR .BBZ MMB rMB, BMM rMB7
  12. * :FBRO0D0 RKXSXPR. JOKOOMPi BMBSSWBMB; BMBB: MBMB0ZMBMS .BMBOXRBMB MBMDE RBM2;SMBM; MBB xBM2
  13. * iZGE O0SHSPO. uGZ7. sBMBMBDL :BMO OZu:BMBK, rRBMB0; ,EBMB xBMBr:ER. RDU :OO;
  14. * ,BZ, 1D0 RPSFHXR. xWZ .SMr . .BBB
  15. * :0BMRDG RESSSKR. 2WOMBW; BMBMR
  16. * i0BM: SWKHKGO MBDv
  17. * .UB OOGDM. MK, Copyright (c) 2015-2019. 斯伯坦机器人
  18. * , XMW ..
  19. * r All rights reserved.
  20. *
  21. * ********************************************************************************************************************
  22. */
  23. package com.persagy.database.extensions
  24. import com.persagy.base.extensions.getAllDeclaredFields
  25. import com.persagy.database.SFilter
  26. import javax.persistence.Id
  27. /**
  28. * 取得主键字段值
  29. *
  30. * @return Id字段值
  31. */
  32. fun Any.keyValue(property: String = "id"): Any? {
  33. /** 依次取id列表中的键值 */
  34. javaClass.keyFieldList().forEach {
  35. if (it.name == property) {
  36. val accessible = it.isAccessible //canAccess(this)
  37. it.isAccessible = true
  38. val id = it.get(this)
  39. it.isAccessible = accessible
  40. return id
  41. }
  42. }
  43. return null
  44. } // Fun Serializable.keyValue()
  45. /**
  46. * 取得主键与值的映射
  47. *
  48. * @return 主键映射。key为属性名
  49. */
  50. fun Any.keyMap(): HashMap<String, Any> {
  51. val map = HashMap<String, Any>()
  52. val clz = this::class.java
  53. for (field in clz.getAllDeclaredFields()) {
  54. // val anno = field.getAnnotation(Column::class.java)
  55. if (field.getAnnotation(Id::class.java) != null)
  56. {
  57. val accessible = field.isAccessible //canAccess(this)
  58. field.isAccessible = true
  59. map[field.name] = field.get(this)
  60. field.isAccessible = accessible
  61. }
  62. }
  63. return map
  64. } // Fun Serializable.keyMap()
  65. /**
  66. * 获得主键的过滤条件
  67. *
  68. * @return 主键的过滤条件
  69. */
  70. fun Any.filterListByKeys(): ArrayList<SFilter> {
  71. val filterList = ArrayList<SFilter>()
  72. this.keyMap().forEach {
  73. filterList.add(SFilter.eq(it.key, it.value))
  74. }
  75. return filterList
  76. } // Fun Serializable.filterListByKeys()