Преглед изворни кода

********************************* ***********************

sybotan пре 4 година
родитељ
комит
ef9baefb26
49 измењених фајлова са 1077 додато и 1330 уклоњено
  1. 4 2
      README.md
  2. 11 11
      persagy-kotlin-base/build.gradle
  3. 5 2
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/exceptions/SApplicationRuntimeException.kt
  4. 5 2
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/exceptions/SBusinessException.kt
  5. 5 2
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/exceptions/SFieldNotFoundException.kt
  6. 36 35
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SAnyExtension.kt
  7. 6 3
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SByteArrayExtension.kt
  8. 13 12
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SClassExtension.kt
  9. 16 16
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SDoubleExtension.kt
  10. 16 16
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SFloatExtension.kt
  11. 4 4
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SIntExtension.kt
  12. 13 7
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SStringBuilderExtension.kt
  13. 12 6
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SStringExtension.kt
  14. 4 2
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SThrowableExtension.kt
  15. 6 6
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/opts/SFormat.kt
  16. 40 54
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SGzipUtil.kt
  17. 40 61
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SHttpUtil.kt
  18. 0 43
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SJarUtil.kt
  19. 36 35
      persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SJsonUtil.kt
  20. 93 90
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SAbstractDao.kt
  21. 6 6
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SAbstractDaoFactory.kt
  22. 5 5
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SAbstractFunction.kt
  23. 104 98
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SFilter.kt
  24. 2 3
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SGroup.kt
  25. 6 2
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SOrder.kt
  26. 9 5
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SPageQueryInfo.kt
  27. 77 70
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/SQueryBuilder.kt
  28. 6 6
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/enums/SDatabaseType.kt
  29. 3 5
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/enums/SDirection.kt
  30. 17 30
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/enums/SOps.kt
  31. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/extensions/SAnyExtension.kt
  32. 4 4
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/extensions/SClassExtension.kt
  33. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLPad.kt
  34. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLeft.kt
  35. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLength.kt
  36. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLower.kt
  37. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SMid.kt
  38. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SRPad.kt
  39. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SRight.kt
  40. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SSubstring.kt
  41. 7 7
      persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SUpper.kt
  42. 28 25
      persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/IBaseMapper.kt
  43. 116 166
      persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SAbstractDriver.kt
  44. 41 39
      persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SAbstractMybatisDao.kt
  45. 12 12
      persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SRowParser.kt
  46. 29 198
      persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SSqlProvider.kt
  47. 9 9
      persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/extensions/SAnyExtension.kt
  48. 83 83
      persagy-kotlin-mysql/src/main/kotlin/com/persagy/mysql/SMySqlDriver.kt
  49. 85 85
      persagy-kotlin-postgresql/src/main/kotlin/com/persagy/postgresql/SPostgreSqlDriver.kt

+ 4 - 2
README.md

@@ -1,7 +1,9 @@
-# saga-kotlin
+# persagy-kotlin
 #### 项目介绍
-上格云kotlin语言公共支持库。
+博瑞尚格kotlin语言公共支持库。
 
 #### 软件架构
 软件架构说明
 
+
+

+ 11 - 11
persagy-kotlin-base/build.gradle

@@ -42,43 +42,43 @@ compileTestKotlin {
 dependencies {
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // kotlin 依赖
-    compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib-jdk8', version: KOTLIN_VERSION
-    compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: KOTLIN_VERSION
+    compile group: "org.jetbrains.kotlin", name: "kotlin-stdlib-jdk8", version: KOTLIN_VERSION
+    compile group: "org.jetbrains.kotlin", name: "kotlin-reflect", version: KOTLIN_VERSION
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // 单元测试
     // https://mvnrepository.com/artifact/org.testng/testng
-    testCompile group: 'org.testng', name: 'testng', version: TESTNG_VERSION
+    testCompile group: "org.testng", name: "testng", version: TESTNG_VERSION
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // http请求
     // https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
-    compile group: 'com.squareup.okhttp3', name: 'okhttp', version: OKHTTP_VERSION
+    compile group: "com.squareup.okhttp3", name: "okhttp", version: OKHTTP_VERSION
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // JSON解析
     // https://mvnrepository.com/artifact/com.alibaba/fastjson
-    compile group: 'com.alibaba', name: 'fastjson', version: FASTJSON_VERSION
+    compile group: "com.alibaba", name: "fastjson", version: FASTJSON_VERSION
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // 文档生成
 dokka {
     jdkVersion = JDK_VERSION
-    outputFormat = 'javadoc'
+    outputFormat = "javadoc"
     outputDirectory = "$buildDir/javadoc"
-    //sourceDirs = files('src/main/kotlin')
+    //sourceDirs = files("src/main/kotlin")
 }
 
 // 上成上传的文档jar包
 task javadocJar(type: Jar, dependsOn: dokka) {
-    classifier = 'javadoc'
+    classifier = "javadoc"
     from dokka.outputDirectory
 }
 
 // 上成上传的文档jar包
 task sourcesJar(type: Jar) {
-    classifier = 'sources'
+    classifier = "sources"
     from sourceSets.main.allSource
 }
 
@@ -99,9 +99,9 @@ uploadArchives {
             pom.artifactId = project.name
             pom.project {
                 name project.name
-                packaging 'jar'
+                packaging "jar"
                 url PERSAGY_URL
-                description '斯伯坦机器人 Kotlin 基础支持库。'
+                description "斯伯坦机器人 Kotlin 基础支持库。"
                 licenses {
                     license {
                         name LICENSE_NAME

+ 5 - 2
persagy-kotlin-base/src/main/kotlin/com/persagy/base/exceptions/SApplicationRuntimeException.kt

@@ -29,6 +29,9 @@ package com.persagy.base.exceptions
 /**
  * 应用运行时异常
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
-open class SApplicationRuntimeException(message: String): RuntimeException(message)
+open class SApplicationRuntimeException(
+        /** 应用异常消息 */
+        message: String
+): RuntimeException(message)

+ 5 - 2
persagy-kotlin-base/src/main/kotlin/com/persagy/base/exceptions/SBusinessException.kt

@@ -31,6 +31,9 @@ import com.persagy.base.exceptions.SApplicationRuntimeException
 /**
  * 业务异常
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
-open class SBusinessException(message: String): SApplicationRuntimeException(message)
+open class SBusinessException(
+        /** 业务异常消息 */
+        message: String
+): SApplicationRuntimeException(message)

+ 5 - 2
persagy-kotlin-base/src/main/kotlin/com/persagy/base/exceptions/SFieldNotFoundException.kt

@@ -31,6 +31,9 @@ import com.persagy.base.exceptions.SBusinessException
 /**
  * 字段未找到异常
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
-open class SFieldNotFoundException(field: String): SBusinessException("字段 '$field' 未找到。")
+open class SFieldNotFoundException(
+        /** 字段异常 */
+        field: String
+): SBusinessException("字段 '$field' 未找到。")

+ 36 - 35
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SAnyExtension.kt

@@ -32,7 +32,7 @@ import java.lang.Exception
 import java.lang.reflect.ParameterizedType
 
 /**
- * Any扩展。获得类的泛型类
+ * Any 扩展,获得类的泛型类
  *
  * @return  类的泛型类
  */
@@ -42,32 +42,32 @@ fun Any.gennericClass(): Class<*>? {
     } catch (e: Exception) {
         null
     }
-} // Fun Any.gennericClass()
+}
 
 /**
- * Any扩展toJson()函数
+ * Any 扩展 toJson() 函数
  *
- * @param   namingStrategy          命名规则
- * @return  Json字符串(属性为null不序列化)
+ * @param namingStrategy        命名规则
+ * @return  Json 字符串 (属性为 null 不序列化)
  */
 fun Any.toJson(namingStrategy: PropertyNamingStrategy? = null): String {
     return SJsonUtil.toJson(this, namingStrategy)
-} // Fun Any.toJson()
+}
 
 /**
- * Any扩展toJson()函数。
+ * Any 扩展 toJson() 函数, 值为 null 也会序列化
  *
- * @param   namingStrategy          命名规则
- * @return  Json字符串(属性为null序列化)
+ * @param namingStrategy        命名规则
+ * @return Json 字符串 (属性为 null 序列化)
  */
 fun Any.toJsonAll(namingStrategy: PropertyNamingStrategy? = null): String {
     return SJsonUtil.toJsonAll(this, namingStrategy)
-} // Fun Any.toJsonAll()
+}
 
 /**
- * Any扩展toMap()函数
+ * Any 扩展 toMap() 函数
  *
- * @return  Json字符串
+ * @return Json 字符串
  */
 fun Any.toMap(): Map<String, Any?> {
     @Suppress("UNCHECKED_CAST")
@@ -75,9 +75,9 @@ fun Any.toMap(): Map<String, Any?> {
 } // Fun Any.toMap()
 
 /**
- * Any扩展toByte()函数。
+ * Any 扩展 toByte() 函数。
  *
- * @return  将对象转换为Int类型
+ * @return 将对象转换为 Int 类型
  */
 fun Any.toBoolean(): Boolean? {
     return when(this.javaClass.simpleName) {
@@ -90,12 +90,12 @@ fun Any.toBoolean(): Boolean? {
         "Short" -> (this as Short).toBoolean()
         else -> null
     }
-} // Fun Any.toBoolean()
+}
 
 /**
- * Any扩展toByte()函数。
+ * Any 扩展 toByte() 函数。
  *
- * @return  将对象转换为Int类型
+ * @return 将对象转换为 Int 类型
  */
 fun Any.toByte(): Byte? {
     return when(this.javaClass.simpleName) {
@@ -108,12 +108,12 @@ fun Any.toByte(): Byte? {
         "Short" -> (this as Short).toByte()
         else -> null
     }
-} // Fun Any.toByte()
+}
 
 /**
- * Any扩展toDouble()函数。
+ * Any 扩展 toDouble() 函数。
  *
- * @return  将对象转换为Int类型
+ * @return 将对象转换为 Int 类型
  */
 fun Any.toDouble(): Double? {
     return when(this.javaClass.simpleName) {
@@ -126,12 +126,12 @@ fun Any.toDouble(): Double? {
         "Short" -> (this as Short).toDouble()
         else -> null
     }
-} // Fun Any.toDouble()
+}
 
 /**
- * Any扩展toFloat()函数。
+ * Any 扩展 toFloat() 函数。
  *
- * @return  将对象转换为Int类型
+ * @return 将对象转换为 Int 类型
  */
 fun Any.toFloat(): Float? {
     return when(this.javaClass.simpleName) {
@@ -144,12 +144,12 @@ fun Any.toFloat(): Float? {
         "Short" -> (this as Short).toFloat()
         else -> null
     }
-} // Fun Any.toFloat()
+}
 
 /**
- * Any扩展toInt()函数。
+ * Any 扩展 toInt() 函数。
  *
- * @return  将对象转换为Int类型
+ * @return 将对象转换为 Int 类型
  */
 fun Any.toInt(): Int? {
     return when(this.javaClass.simpleName) {
@@ -169,12 +169,12 @@ fun Any.toInt(): Int? {
         }
         else -> null
     }
-} // Fun Any.toInt()
+}
 
 /**
- * Any扩展toLong()函数。
+ * Any 扩展 toLong() 函数。
  *
- * @return  将对象转换为Int类型
+ * @return 将对象转换为 Int 类型
  */
 fun Any.toLong(): Long? {
     return when(this.javaClass.simpleName) {
@@ -190,9 +190,9 @@ fun Any.toLong(): Long? {
 } // Fun Any.toLong()
 
 /**
- * Any扩展toShort()函数。
+ * Any 扩展 toShort() 函数。
  *
- * @return  将对象转换为Int类型
+ * @return 将对象转换为 Int 类型
  */
 fun Any.toShort(): Short? {
     return when(this.javaClass.simpleName) {
@@ -205,14 +205,15 @@ fun Any.toShort(): Short? {
         "Short" -> this as Short
         else -> null
     }
-} // Fun Any.toShort()
+}
 
 /**
- * Any扩展,判断是否为基本类型
+ * Any 扩展,判断是否为基本类型
  *
- * @return  如果是则返回true
+ * @return 如果是则返回 true
  */
 fun Any.isBaseType(): Boolean {
+    /** 是 java基本类型返回 true */
     if (this.javaClass.isPrimitive) {
         return true;
     }
@@ -230,4 +231,4 @@ fun Any.isBaseType(): Boolean {
             this is java.sql.Time ||
             this is java.sql.Timestamp ||
             this is java.util.Date
-} // Fun Any.isBaseType()
+}

+ 6 - 3
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SByteArrayExtension.kt

@@ -27,16 +27,19 @@
 package com.persagy.base.extensions
 
 /**
- * 字节数组16进制字符串
+ * 字节数组 16 进制字符串
  *
- * @return  16进制字符串
+ * @return  16 进制字符串
  */
 fun ByteArray.toHex(): String {
     val sb = StringBuilder("")
+
+    /** 遍历字符数组 */
     for (c in this) {
         val stmp = String.format("%02x", c)
         sb.append(stmp)
         sb.append(" ")
     }
+
     return sb.toString().toUpperCase().trim()
-} // Fun String.byteArrayToHexStr()
+}

+ 13 - 12
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SClassExtension.kt

@@ -31,7 +31,7 @@ import java.lang.reflect.Field
 import java.lang.reflect.Method
 
 /**
- * Class<*>扩展。获得所有包含父对象的定义字段列表。
+ * Class<*> 扩展,获得所有包含父对象的定义字段列表。
  *
  * @return  字段列表
  */
@@ -43,13 +43,14 @@ fun Class<*>.getAllDeclaredFields(): ArrayList<Field> {
         clz = clz.superclass
     }
     return fieldList
-} // Fun Class<*>.getAllDeclaredFields()
+}
 
 /**
- * Class<*>扩展。根据名称获得所有包含父对象的定义字段。
+ * Class<*> 扩展,根据名称获得所有包含父对象的定义字段。
  *
- * @param   ignoreCase      是否忽略大小写,默认不忽略
- * @param   jsonProperty    是否检测Json属性
+ * @param name              属性名
+ * @param ignoreCase        是否忽略大小写,默认不忽略
+ * @param jsonProperty      是否检测 Json 属性
  * @return  字段
  */
 fun Class<*>.getAllDeclaredField(name: String, ignoreCase: Boolean = false, jsonProperty: Boolean = false): Field? {
@@ -58,12 +59,12 @@ fun Class<*>.getAllDeclaredField(name: String, ignoreCase: Boolean = false, json
         val annName = it.getAnnotation(JSONField::class.java)?.name
         it.name.equals(name, ignoreCase) || (jsonProperty && name.equals(annName, ignoreCase))
     }
-} // Fun Class<*>.getAllDeclaredField()
+}
 
 /**
- * Class<*>扩展。获得所有包含父对象的定义方法列表。
+ * Class<*> 扩展,获得所有包含父对象的定义方法列表。
  *
- * @return  方法列表
+ * @return 方法列表
  */
 fun Class<*>.getAllDeclaredMethods(): ArrayList<Method> {
     val methodList = ArrayList<Method>()
@@ -73,12 +74,12 @@ fun Class<*>.getAllDeclaredMethods(): ArrayList<Method> {
         clz = clz.superclass
     }
     return methodList
-} // Fun Class<*>.getAllDeclaredMethods()
+}
 
 /**
- * Class<*>扩展,判断是否为基本类型
+ * Class<*> 扩展,判断是否为基本类型
  *
- * @return  如果是则返回true
+ * @return 如果是则返回 true
  */
 fun Class<*>.isBaseType(): Boolean {
     if (this.isPrimitive) {
@@ -100,4 +101,4 @@ fun Class<*>.isBaseType(): Boolean {
             java.sql.Timestamp::class.java.isAssignableFrom(this) ||
             java.util.Date::class.java.isAssignableFrom(this)
 
-} // Fun Class<*>.isBaseType()
+}

+ 16 - 16
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SDoubleExtension.kt

@@ -27,41 +27,41 @@
 package com.persagy.base.extensions
 
 /**
- * Double扩展判断相等
+ * Double 扩展判断相等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other     比较的数据
+ * @return 是否相等
  */
 fun Double.eq(other: Double): Boolean {
     return Math.abs(this - other) < 0.000001f
-} // Fun Any.Float.eq()
+}
 
 /**
- * Double扩展判断相等
+ * Double 扩展判断相等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other     比较的数据
+ * @return 是否相等
  */
 fun Double.eq(other: Float): Boolean {
     return Math.abs(this - other) < 0.000001f
-} // Fun Any.Float.eq()
+}
 
 /**
- * Double扩展判断不等
+ * Double 扩展判断不等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other       比较的数据
+ * @return 是否相等
  */
 fun Double.ne(other: Double): Boolean {
     return Math.abs(this - other) > 0.000001f
-} // Fun Any.Float.ne()
+}
 
 /**
- * Double扩展判断不等
+ * Double 扩展判断不等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other     比较的数据
+ * @return 是否相等
  */
 fun Double.ne(other: Float): Boolean {
     return Math.abs(this - other) > 0.000001f
-} // Fun Any.Float.ne()
+}

+ 16 - 16
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SFloatExtension.kt

@@ -27,41 +27,41 @@
 package com.persagy.base.extensions
 
 /**
- * Float扩展判断相等
+ * Float 扩展判断相等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other     比较的数据
+ * @return 是否相等
  */
 fun Float.eq(other: Double): Boolean {
     return Math.abs(this - other) < 0.000001f
-} // Fun Any.Float.eq()
+}
 
 /**
- * Float扩展判断相等
+ * Float 扩展判断相等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other     比较的数据
+ * @return 是否相等
  */
 fun Float.eq(other: Float): Boolean {
     return Math.abs(this - other) < 0.000001f
-} // Fun Any.Float.eq()
+}
 
 /**
- * Float扩展判断不等
+ * Float 扩展判断不等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other     比较的数据
+ * @return 是否相等
  */
 fun Float.ne(other: Double): Boolean {
     return Math.abs(this - other) > 0.000001f
-} // Fun Any.Float.ne()
+}
 
 /**
- * Float扩展判断不等
+ * Float 扩展判断不等
  *
- * @param   other   比较的数据
- * @return  是否相等
+ * @param other     比较的数据
+ * @return 是否相等
  */
 fun Float.ne(other: Float): Boolean {
     return Math.abs(this - other) > 0.000001f
-} // Fun Any.Float.ne()
+}

+ 4 - 4
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SIntExtension.kt

@@ -27,12 +27,12 @@
 package com.persagy.base.extensions
 
 /**
- * 将int类型转换成16进制数字符串,长度不够补0
+ * 将 Int 类型转换成 16 进制数字符串,长度不够补 0
  *
- * @param   len     转换的16进制数字符串长度
- * @return  转换后的16进制字符串
+ * @param len       转换的 16 进制数字符串长度
+ * @return 转换后的 16 进制字符串
  */
 fun Int.toHex(len: Int): String {
     val value = String.format("%0${len}x", this)
     return value.substring(value.length - len)
-} // Fun String.intTo3Byte()
+}

+ 13 - 7
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SStringBuilderExtension.kt

@@ -27,21 +27,27 @@
 package com.persagy.base.extensions
 
 /**
- * StringBuilder扩展。追加n个ch字符
- * @param   ch      追加的字符
- * @param   n       追加多少个
+ * StringBuilder 扩展,追加 n 个 ch 字符
+ *
+ * @param ch      追加的字符
+ * @param n       追加多少个
+ * @return 字符串构建对象
  */
 fun StringBuilder.appendChar(ch: Char, n: Int): StringBuilder {
+    /** 产生 n 字符 */
     for (i in 0 until n) {
         this.append(ch)
     }
+
     return this
-} // Fun String.genSpace()
+}
 
 /**
- * StringBuilder扩展。追加n个空格
- * @param   n       追加多少个
+ * StringBuilder 扩展,追加 n 个空格
+ *
+ * @param n     追加多少个
+ * @return 字符串构建对象
  */
 fun StringBuilder.appendSpace(n: Int): StringBuilder {
     return appendChar(' ', n)
-} // Fun String.genSpace()
+}

+ 12 - 6
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SStringExtension.kt

@@ -27,27 +27,33 @@
 package com.persagy.base.extensions
 
 /**
- * String扩展firstUpperCase函数。首字母转换为大写
+ * String 扩展 firstUpperCase 函数,首字母转换为大写
  *
- * @return  转换后的字符串
+ * @return 转换后的字符串
  */
 fun String.firstUpperCase(): String {
     val ch = this.toCharArray()
+
+    /** 是否为小写的 a - z ,是转为大写 */
     if (ch[0] in 'a'..'z') {
         ch[0] = (ch[0].toInt() - 32).toChar()
     }
+
     return String(ch)
-} // Fun String.firstUpperCase()
+}
 
 /**
- * String扩展firstUpperCase函数。首字母转换为小写
+ * String 扩展 firstUpperCase 函数,首字母转换为小写
  *
- * @return  转换后的字符串
+ * @return 转换后的字符串
  */
 fun String.firstLowerCase(): String {
     val ch = this.toCharArray()
+
+    /** 是否为小写的 A - Z ,是转为小写 */
     if (ch[0] in 'A'..'Z') {
         ch[0] = (ch[0].toInt() + 32).toChar()
     }
+
     return String(ch)
-} // Fun String.firstLowerCase()
+}

+ 4 - 2
persagy-kotlin-base/src/main/kotlin/com/persagy/base/extensions/SThrowableExtension.kt

@@ -27,7 +27,9 @@
 package com.persagy.base.extensions
 
 /**
- * 扩展异常rootCause。用于取得嵌套异常的异常信息。
+ * 扩展异常 rootCause,用于取得嵌套异常的异常信息。
+ *
+ * @return 异常
  */
 fun Throwable.rootCause(): Throwable? {
     var root = this.cause
@@ -39,4 +41,4 @@ fun Throwable.rootCause(): Throwable? {
     } catch (e: Exception) {
         null
     }
-} // Throwable.rootCause()
+}

+ 6 - 6
persagy-kotlin-base/src/main/kotlin/com/persagy/base/opts/SFormat.kt

@@ -29,18 +29,18 @@ package com.persagy.base.opts
 /**
  * 格式定义
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 object SFormat {
-    /** datetime类型数据格式定义 */
+    /** datetime 类型数据格式定义 */
     var dateTime = "yyyy-MM-dd HH:mm:ss"
 
-    /** timestamp类型数据格式定义 */
+    /** timestamp 类型数据格式定义 */
     var timestamp = "yyyy-MM-dd HH:mm:ss"
 
-    /** date类型数据格式定义 */
+    /** date 类型数据格式定义 */
     var date = "yyyy-MM-dd"
 
-    /** time类型数据格式定义 */
+    /** time 类型数据格式定义 */
     var time = "HH:mm:ss"
-} // Object SFormat
+}

+ 40 - 54
persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SGzipUtil.kt

@@ -33,48 +33,63 @@ import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 
 /**
- * Gzip工具,用于完成zip压缩与解压缩
+ * Gzip 工具,用于完成 zip 压缩与解压缩
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 object SGzipUtil {
+    /** utf 编码 */
     const val GZIP_ENCODE_UTF_8 = "UTF-8"
+    /** gbk 编码 */
     const val GZIP_ENCODE_ISO_8859_1 = "ISO-8859-1"
 
     /**
      * 字符串的解压
      *
-     * @param   str         对字符串解压
-     * @return  返回解压缩后的字符串
+     * @param str           对字符串解压
+     * @return 返回解压缩后的字符串
+     * @throws IOException  io 异常
      */
     @Throws(IOException::class)
     fun unCompress(str: String): ByteArray? {
+
+        /** 字符串为空返回空 null */
         if (str.isEmpty()) {
             return null
         }
 
-        // 创建一个新的 byte 数组输出流
+        /** 创建一个新的 byte 数组输出流 */
         val out = ByteArrayOutputStream()
-        // 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组
+
+        /** 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组 */
         val `in` = ByteArrayInputStream(str
                 .toByteArray(charset("UTF-8")))
-        // 使用默认缓冲区大小创建新的输入流
+
+        /** 使用默认缓冲区大小创建新的输入流 */
         val gzip = GZIPInputStream(`in`)
         val buffer = ByteArray(1024)
         var n = gzip.read(buffer)
-        while (n >= 0) {  // 将未压缩数据读入字节数组
-            // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte数组输出流
+
+        /** 将未压缩数据读入字节数组 */
+        while (n >= 0) {
+            /** 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流 */
             out.write(buffer, 0, n)
             n = gzip.read(buffer)
         }
-        // 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串
+
+        /** 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串 */
         return buffer
-    } // Fun unCompress()
+    }
 
     /**
-     * 字符串压缩为GZIP字节数组
+     * 字符串压缩为 GZIP 字节数组
+     *
+     * @param str           待压缩字符串
+     * @param encoding      编码
+     * @return 字节数组
      */
     fun compress(str: String, encoding: String): ByteArray? {
+        /** 字符串为空返回 null */
         if (str.isEmpty()) {
             return null
         }
@@ -90,23 +105,31 @@ object SGzipUtil {
         }
 
         return out.toByteArray()
-    } // Fun compress()
+    }
 
     /**
      * Gzip  byte[] 解压成字符串
+     *
+     * @param bytes     字节数组
+     * @return 字符串
      */
     fun uncompressToString(bytes: ByteArray): String? {
         return uncompressToString(bytes, GZIP_ENCODE_UTF_8)
-    } // Fun uncompressToString()
+    }
 
 
     /**
      * Gzip  byte[] 解压成字符串
+     *
+     * @param bytes     字节数组
+     * @param encoding  编码
+     * @return 字符串
      */
     private fun uncompressToString(bytes: ByteArray?, encoding: String): String? {
         if (bytes == null || bytes.size == 0) {
             return null
         }
+
         val out = ByteArrayOutputStream()
         val `in` = ByteArrayInputStream(bytes)
         try {
@@ -123,43 +146,6 @@ object SGzipUtil {
         }
 
         return null
-    } // Fun uncompressToString()
-
-//    /**
-//     * 判断byte[]是否是Gzip格式
-//     */
-//    fun isGzip(data: ByteArray): Boolean {
-//        val header = data[0] shl 8 or (data[1] and 0xff)
-//        return header == 0x1f8b
-//    } // Fun isGzip()
-
-//    /**
-//     * GZIP解压缩
-//     *
-//     * @param   zipText     GZIP压缩过的字符串
-//     * @return 解压后的字符串
-//     */
-//    @Throws(IOException::class)
-//    fun decompress(zipText: String): String {
-//        val compressed = Base64.decode(zipText, 1024)
-//        if (compressed.size > 4) {
-//            val gzipInputStream = GZIPInputStream(
-//                    ByteArrayInputStream(compressed, 4,
-//                            compressed.size - 4))
-//
-//            val baos = ByteArrayOutputStream()
-//            var value = 0
-//            while (value != -1) {
-//                value = gzipInputStream.read()
-//                if (value != -1) {
-//                    baos.write(value)
-//                }
-//            }
-//            gzipInputStream.close()
-//            baos.close()
-//            return String(baos.toByteArray(), "UTF-8")
-//        } else {
-//            return ""
-//        }
-//    }
-} // Object GzipUtil
+    }
+
+}

+ 40 - 61
persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SHttpUtil.kt

@@ -32,9 +32,9 @@ import okhttp3.*
 import java.util.concurrent.TimeUnit
 
 /**
- * Http工具类
+ * Http 工具类
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 object SHttpUtil {
     /** 连接超时时间 */
@@ -44,7 +44,7 @@ object SHttpUtil {
     /** 写入超时时间 */
     var writeTimeout: Long = 30L
 
-    /** http客户端 */
+    /** http 客户端 */
     private val httpClient: OkHttpClient by lazy {
         OkHttpClient.Builder()
                 .connectTimeout(connectTimeout, TimeUnit.SECONDS)
@@ -62,10 +62,10 @@ object SHttpUtil {
     val PARALLEL        = MediaType.parse("multipart/parallel")
 
     /**
-     * 根据扩展名获得Http的Content-Type
+     * 根据扩展名获得 Http  Content-Type
      *
-     * @param       extensionName       文件扩展名
-     * @return      扩展名对应的Content-Type
+     * @param extensionName       文件扩展名
+     * @return  扩展名对应的 Content-Type
      */
     fun contentType(extensionName: String): String {
         val map = mapOf(
@@ -411,22 +411,22 @@ object SHttpUtil {
                 "xap"     to  "application/x-silverlight-app"
         )
 
-        // 扩展名转换为小写
+        /** 扩展名转换为小写 */
         val key = extensionName.toLowerCase()
 
-        // 如果map包含指定的扩展名,则返回对应的Content-Type, 否则返回二进制流类型"application/octet-stream"
+        /** 如果 map 包含指定的扩展名,则返回对应的 Content-Type, 否则返回二进制流类型 application/octet-stream  */
         return if (map.contains(key)) {
             map.getValue(key)
         } else {
             "application/octet-stream"
         }
-    } // Fun contentType()
+    }
 
     /**
      * GET 请求
      *
-     * @param   url     URL 地址
-     * @return  服务器返回的应答信息
+     * @param url      地址
+     * @return 服务器返回的应答信息
      */
     @Throws(Exception::class)
     fun getRequest(url: String): String {
@@ -438,12 +438,12 @@ object SHttpUtil {
         val call = httpClient.newCall(request)
         val response = call.execute()
         return response.body()!!.string()
-    } // Fun getRequest()
+    }
 
     /**
-     * GET 请求(zip压缩格式)
+     * GET 请求(zip 压缩格式)
      *
-     * @param   url     URL地址
+     * @param url      地址
      * @return  服务器返回的应答信息
      */
     @Throws(Exception::class)
@@ -458,81 +458,59 @@ object SHttpUtil {
         val response = call.execute()
 
         return SGzipUtil.uncompressToString(response.body()!!.bytes()) ?: ""
-    } // Fun getZipRequest()
+    }
 
     /**
-     * 发送post对象请求
+     * 发送 post 对象请求
      *
-     * @param   url     URL地址
-     * @param   body    请求体
-     * @return  返回应答体字符串
+     * @param url       地址
+     * @param body      请求体
+     * @return 返回应答体字符串
      */
     @Throws(Exception::class)
     fun postRequest(url: String, body: String, type: MediaType = JSON!!): String {
         val jsonBody = FormBody.create(type, body)
         val request = createPostRequest(url, jsonBody)
-
         val call = httpClient.newCall(request)
         val response = call.execute()
         return response.body()!!.string()
-    } // Fun postRequest()
+    }
 
     /**
-     * 发送get对象请求
+     * 发送 get 对象请求
      *
-     * @param   <T>                 请求的返回类型
-     * @param   url                 URL地址
-     * @param   namingStrategy      命名规则
-     * @return  接收到的请求体
+     * @param <T>                 请求的返回类型
+     * @param url                 地址
+     * @param namingStrategy      命名规则
+     * @return 接收到的请求体
      */
     @Throws(Exception::class)
     inline fun <reified T> getObject(url: String, namingStrategy: PropertyNamingStrategy? = null): T {
         val responseJson = getRequest(url)
         return SJsonUtil.fromJson(responseJson, namingStrategy)
-    } // Fun getObject()
+    }
 
     /**
-     * 发送post请求
+     * 发送 post 请求
      *
-     * @param   url                 URL地址
-     * @param   <T>                 请求的返回类型
-     * @param   requestBody         发送到服务器的请求体
-     * @param   namingStrategy      命名规则
-     * @return  接收到的请求体
+     * @param url                 地址
+     * @param <T>                 请求的返回类型
+     * @param requestBody         发送到服务器的请求体
+     * @param namingStrategy      命名规则
+     * @return 接收到的请求体
      */
     @Throws(Exception::class)
     inline fun <reified T> postObject(url: String, requestBody: Any, namingStrategy: PropertyNamingStrategy? = null): T {
         val responseJson = postRequest(url, requestBody.toJson(namingStrategy))
         return SJsonUtil.fromJson(responseJson, namingStrategy)
-    } // Fun postObject()
-
-    /**
-     * 上传文件
-     *
-     * @param   url     上传地址
-     */
-//    fun uploadFile(url: String) {
-//        /*RequestBody requestBody = new MultipartBody.Builder()
-//                .setType(MultipartBody.FORM)
-//                .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/png"), file))
-//                .build();*/
-//        return
-//    } // Fun uploadFile()
-
-    /**
-     * 下载文件
-     *
-     * @param       url     文件url地址
-     */
-//    fun downloadFile(url: String) {
-//
-//    } // Fun downloadFile()
+    }
 
     /**
-     * 创建Http post请求对象
+     * 创建 Http post 请求对象
      *
-     * @param   url             URL地址
-     * @param   jsonBody        发送到服务器的请求体
+     * @param url             地址
+     * @param jsonBody        发送到服务器的请求体
+     * @return 接收到的请求体
      */
     private fun createPostRequest(url: String, jsonBody: RequestBody? = null): Request {
         val builder = Request.Builder()
@@ -542,5 +520,6 @@ object SHttpUtil {
         }
 
         return builder.build()
-    } // Fun createPostRequest()
-} // Object SHttpUtil
+    }
+
+}

+ 0 - 43
persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SJarUtil.kt

@@ -1,43 +0,0 @@
-/*
- * *********************************************************************************************************************
- *
- *          !!
- *        .F88X
- *        X8888Y
- *      .}888888N;
- *        i888888N;        .:!              .I$WI:
- *          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
- *          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
- *            +888888N;  .8888888Y                                  "&&8Y.}8,
- *            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
- *              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
- *              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
- *            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
- *            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
- *          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
- *        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
- *      .:R888888I
- *      .&888888I                                          Copyright (c) 2009-2020.  博锐尚格科技股份有限公司
- *        ~8888'
- *        .!88~                                                                     All rights reserved.
- *
- * *********************************************************************************************************************
- */
-
-package com.persagy.base.utils
-
-/**
- * Jar包工具类
- *
- * @author  庞利祥 <sybotan@126.com>
- */
-object SJarUtil {
-    /**
-     *  加载jar包
-     *
-     *  @param  jarFile     jar包文件
-     */
-//    fun loadJar(jarFile: String) {
-//
-//    } // Fun loadJar()
-} // Object SJarUtil

+ 36 - 35
persagy-kotlin-base/src/main/kotlin/com/persagy/base/utils/SJsonUtil.kt

@@ -34,11 +34,12 @@ import java.io.*
 import java.lang.reflect.Type
 
 /**
- * Json工具类
+ * Json 工具类
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 object SJsonUtil {
+    /** tag 当前类名 */
     private val TAG = SJsonUtil::class.java.name
     /** 序列化配置 */
     val serializeConfig = SerializeConfig()
@@ -46,9 +47,9 @@ object SJsonUtil {
     /**
      * 转换对象到 JSON 格式字符串
      *
-     * @param   obj                     被转换对象
-     * @param   namingStrategy          命名规则
-     * @return  JSON 格式字符串
+     * @param obj                     被转换对象
+     * @param namingStrategy          命名规则
+     * @return JSON 格式字符串
      */
     fun toJson(obj: Any, namingStrategy: PropertyNamingStrategy? = null): String {
         return if (null == namingStrategy) {
@@ -58,14 +59,14 @@ object SJsonUtil {
             config.propertyNamingStrategy = namingStrategy
             JSON.toJSONString(obj, config, SerializerFeature.DisableCircularReferenceDetect)
         }
-    } // Fun toJson()
+    }
 
     /**
      * 转换对象到 JSON 格式字符串,包含空字符串
      *
-     * @param   obj                     被转换对象
-     * @param   namingStrategy          首字母是否大写
-     * @return  json格式字符串
+     * @param obj                     被转换对象
+     * @param namingStrategy          首字母是否大写
+     * @return json 格式字符串
      */
     fun toJsonAll(obj: Any, namingStrategy: PropertyNamingStrategy? = null): String {
         return if (null == namingStrategy) {
@@ -83,26 +84,26 @@ object SJsonUtil {
                     SerializerFeature.WriteNullListAsEmpty,
                     SerializerFeature.DisableCircularReferenceDetect)
         }
-    } // Fun toJsonAll()
+    }
 
     /**
      * 将 JSON 数据解析成相应的映射对象
      *
-     * @param   jsonData                要解析的JSON数据
-     * @param   type                    Java类型
-     * @return  解析结果
+     * @param jsonData      要解析的 JSON 数据
+     * @param type          Java 类型
+     * @return 解析结果
      */
     @Throws(Exception::class)
     fun <T> fromJson(jsonData: String, type: Class<T>): T? {
         return JSON.parseObject(jsonData, type)
-    } // Fun fromJson()
+    }
 
     /**
-     * 将Json数据解析成相应的映射对象
+     * 将 Json 数据解析成相应的映射对象
      *
-     * @param   jsonData                要解析的JSON数据
-     * @param   type                    Java类型
-     * @return  解析结果
+     * @param jsonData                要解析的 JSON 数据
+     * @param type                    Java 类型
+     * @return 解析结果
      */
     @Throws(Exception::class)
     fun fromJson(jsonData: String, type: Type): Any? {
@@ -110,12 +111,12 @@ object SJsonUtil {
     } // Fun fromJson()
 
     /**
-     * 将Json数据解析成相应的映射对象
+     * 将 Json 数据解析成相应的映射对象
      *
-     * @param   input                   要解析的JSON数据输入流
-     * @param   type                    Java类型
-     * @param   namingStrategy          命名规则
-     * @return  解析结果
+     * @param input                 要解析的 JSON 数据输入流
+     * @param type                  Java 类型
+     * @param namingStrategy        命名规则
+     * @return 解析结果
      */
     @Throws(Exception::class)
     fun <T> fromJson(input: InputStream, type: Class<T>): T? {
@@ -127,27 +128,27 @@ object SJsonUtil {
         }
 
         return fromJson(String(buf), type)
-    } // Fun fromJson()
+    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     /**
-     * 将Json数据解析成相应的映射对象
+     * 将 Json 数据解析成相应的映射对象
      *
-     * @param   jsonData                要解析的JSON数据
-     * @param   namingStrategy          命名规则
-     * @return  解析结果
+     * @param jsonData                要解析的 JSON 数据
+     * @param namingStrategy          命名规则
+     * @return 解析结果
      */
     @Throws(Exception::class)
     inline fun <reified T> fromJson(jsonData: String, namingStrategy: PropertyNamingStrategy? = null): T {
         return JSON.parseObject(jsonData, T::class.java)
-    } // Fun parseJson()
+    }
 
     /**
-     * 将Json数据解析成相应的映射对象
+     * 将 Json 数据解析成相应的映射对象
      *
-     * @param   input                   要解析的JSON数据输入流
-     * @param   namingStrategy          命名规则
-     * @return  解析结果
+     * @param input                   要解析的 JSON 数据输入流
+     * @param namingStrategy          命名规则
+     * @return 解析结果
      */
     @Throws(Exception::class)
     inline fun <reified T> fromJson(input: InputStream, namingStrategy: PropertyNamingStrategy? = null): T {
@@ -159,5 +160,5 @@ object SJsonUtil {
         }
 
         return fromJson(String(buf), namingStrategy)
-    } // Fun fromJson()
-} // Class SJsonUtil
+    }
+}

+ 93 - 90
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SAbstractDao.kt

@@ -40,31 +40,32 @@ import javax.persistence.Table
 /**
  * 数据访问对象基类
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
     companion object {
         /**
-         * 获得表名,取实体类@Table注解的名称,如果没有注解,则取实体类类名。
+         * 获得表名,取实体类 @Table 注解的名称,如果没有注解,则取实体类类名。
          *
-         * @param   clz         mapper类类型
-         * @param   keyEsc      转义符,用于避免与数据库关键词冲突
-         * @return  表名
+         * @param clz         mapper 类类型
+         * @param keyEsc      转义符,用于避免与数据库关键词冲突
+         * @return 表名
          */
         fun tableName(clz: Class<*>, keyEsc: String = ""): String {
             val tableAnno = clz.getAnnotation(javax.persistence.Table::class.java)
-            // 如果有@Table注解,则取注解的表名;否则使用类名做为表名
+            /** 如果有@Table注解,则取注解的表名;否则使用类名做为表名 */
             val tableName = tableAnno?.name ?: clz.simpleName
             val name = tableName.replace(".", "$keyEsc.$keyEsc")
             return "$keyEsc$name$keyEsc"
-        } // Fun tableName()
+        }
 
         /**
          * 获得实体类属性对应的数据表字段名
          *
-         * @param   clazz   实体类类型
-         * @param   name    属性名
-         * @return  对应的数据表字段名
+         * @param clazz     实体类类型
+         * @param name      属性名
+         * @param keyEsc    转义符,用于避免与数据库关键词冲突
+         * @return 对应的数据表字段名
          */
         fun columnName(clazz: Class<*>, name: String, keyEsc: String = ""): String {
             try {
@@ -74,7 +75,7 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
             } catch (e: Exception) {
                 throw SFieldNotFoundException(name)
             }
-        } // Fun columnName()
+        }
 
         /**
          * 获得实体类属性名
@@ -90,8 +91,8 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
             } catch (e: Exception) {
                 throw SFieldNotFoundException(name)
             }
-        } // Fun propertyName()
-    } // companion object
+        }
+    }
 
     /** 实体类类型 */
     val entityClass = entityClazz
@@ -99,82 +100,82 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
     /**
      * 在数据库中插入实体
      *
-     * @param   entity      插入数据库的实体
-     * @return  插入是否成功
+     * @param entity      插入数据库的实体
+     * @return 插入是否成功
      */
     abstract fun insert(entity: ENTITY): Boolean
 
     /**
      * 在数据库中插入/更新实体
      *
-     * @param   entity      插入/更新数据库的实体
-     * @return  插入是否成功
+     * @param entity      插入/更新数据库的实体
+     * @return 插入是否成功
      */
     abstract fun replace(entity: ENTITY): Boolean
 
     /**
      * 根据条件删除
      *
-     * @param   args        删除条件
-     * @return  删除是否成功
+     * @param args        删除条件
+     * @return 删除是否成功
      */
     abstract fun delete(args: List<SFilter>): Boolean
 
     /**
      * 删除所有记录
      *
-     * @return  删除是否成功
+     * @return 删除是否成功
      */
     abstract fun deleteAll(): Boolean
 
     /**
      * 根据条件更新
      *
-     * @param   entity      更新的值
-     * @param   projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
-     * @param   args        更新条件
-     * @return  更新是否成功
+     * @param entity      更新的值
+     * @param projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
+     * @param args        更新条件
+     * @return 更新是否成功
      */
     abstract fun update(entity: ENTITY, projection: ArrayList<String>? = null, args: List<SFilter>? = null): Boolean
 
     /**
      * 根据条件查询记录
      *
-     * @param   args        查询条件
-     * @return  查询构造器
+     * @param args        查询条件
+     * @return 查询构造器
      */
     abstract fun select(args: List<SFilter>): SQueryBuilder<ENTITY>
 
     /**
      * 根据条件查询所有记录
      *
-     * @return  查找构建器
+     * @return 查找构建器
      */
     abstract fun selectAll(): SQueryBuilder<ENTITY>
 
     /**
      * 执行查询操作
      *
-     * @param   builder     查询查询构造器
-     * @return  查询到的记录
+     * @param builder     查询查询构造器
+     * @return 查询到的记录
      */
     abstract fun execQuery(builder: SQueryBuilder<ENTITY>): ArrayList<ENTITY>
 
     /**
      * 执行统计个数操作
      *
-     * @param   builder     查询查询构造器
-     * @return  查询到的记录数
+     * @param builder     查询查询构造器
+     * @return 查询到的记录数
      */
     abstract fun execCount(builder: SQueryBuilder<ENTITY>): Long
 
     /**
      * 执行分页查询操作
      *
-     * @param   builder     查询查询构造器
-     * @param   pageNumber      第几页
-     * @param   pageSize        每页记录数
-     * @return  查询到的记录
+     * @param builder     查询查询构造器
+     * @param pageNumber      第几页
+     * @param pageSize        每页记录数
+     * @return 查询到的记录
      */
     fun pageQuery(builder: SQueryBuilder<ENTITY>, pageNumber: Int, pageSize: Int): SPageQueryInfo<ENTITY> {
         val pageInfo = SPageQueryInfo<ENTITY>(pageNumber, pageSize)
@@ -183,23 +184,23 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         pageInfo.content = execQuery(builder)
 
         return pageInfo
-    } // Fun pageQuery()
+    }
 
     /**
      * 删除实体
      *
-     * @param   entity      被删除的实体
-     * @return  删除是否成功
+     * @param entity      被删除的实体
+     * @return 删除是否成功
      */
     open fun delete(entity: ENTITY): Boolean {
         return delete(entity.filterListByKeys())
-    } // Fun delete()
+    }
 
     /**
      * 根据条件删除
      *
-     * @param   args        删除条件
-     * @return  删除是否成功
+     * @param args        删除条件
+     * @return 删除是否成功
      */
     open fun delete(vararg args: Pair<String, Any>): Boolean {
         val filterList = ArrayList<SFilter>()
@@ -208,47 +209,47 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         }
 
         return delete(filterList)
-    } // Fun delete()
+    }
 
     /**
      * 根据条件删除
      *
-     * @param   args        删除条件
-     * @return  删除是否成功
+     * @param args        删除条件
+     * @return 删除是否成功
      */
     open fun delete(vararg args: SFilter): Boolean {
         return delete(args.toList())
-    } // Fun delete()
+    }
 
     /**
      * 根据条件删除
      *
-     * @param   query       删除条件
-     * @return  删除是否成功
+     * @param query       删除条件
+     * @return 删除是否成功
      */
     open fun delete(query: String): Boolean {
         val parser = SSyntaxParser(ByteArrayInputStream(query.toByteArray()))
         return delete(parser.parserFilters())
-    } // Fun delete()
+    }
 
     /**
      * 更新实体
      *
-     * @param   entity      更新实体
-     * @param   projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
-     * @return  更新是否成功
+     * @param entity      更新实体
+     * @param projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
+     * @return 更新是否成功
      */
     open fun update(entity: ENTITY, projection: ArrayList<String>? = null): Boolean {
         return update(entity, projection, entity.filterListByKeys())
-    } // Fun update()
+    }
 
     /**
      * 根据条件更新
      *
-     * @param   entity      更新实体内容
-     * @param   projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
-     * @param   args        更新条件
-     * @return  更新是否成功
+     * @param entity      更新实体内容
+     * @param projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
+     * @param args        更新条件
+     * @return 更新是否成功
      */
     open fun update(entity: ENTITY, projection: ArrayList<String>? = null, vararg args: Pair<String, Any>): Boolean {
         val filterList = ArrayList<SFilter>()
@@ -257,38 +258,38 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         }
 
         return update(entity, projection, filterList)
-    } // Fun update()
+    }
 
     /**
      * 根据条件更新
      *
-     * @param   entity      更新实体内容
-     * @param   projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
-     * @param   args        更新条件
-     * @return  更新是否成功
+     * @param entity      更新实体内容
+     * @param projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
+     * @param args        更新条件
+     * @return 更新是否成功
      */
     open fun update(entity: ENTITY, projection: ArrayList<String>? = null, vararg args: SFilter): Boolean {
         return update(entity, projection, args.toList())
-    } // Fun update()
+    }
 
     /**
      * 根据条件更新
      *
-     * @param   entity      更新实体内容
-     * @param   projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
-     * @param   query       更新条件
-     * @return  更新是否成功
+     * @param entity      更新实体内容
+     * @param projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
+     * @param query       更新条件
+     * @return 更新是否成功
      */
     open fun update(entity: ENTITY, projection: ArrayList<String>? = null, query: String): Boolean {
         val parser = SSyntaxParser(ByteArrayInputStream(query.toByteArray()))
         return update(entity, projection, parser.parserFilters())
-    } // Fun update()
+    }
 
     /**
      * 根据条件查询一条记录
      *
-     * @param   args        查询条件
-     * @return  查询构造器
+     * @param args        查询条件
+     * @return 查询构造器
      */
     open fun select(vararg args: Pair<String, Any>): SQueryBuilder<ENTITY> {
         val filterList = ArrayList<SFilter>()
@@ -297,26 +298,26 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         }
 
         return select(filterList)
-    } // Fun select()
+    }
 
     /**
      * 根据条件查询记录
      *
-     * @param   args        查询条件
-     * @return  查询构造器
+     * @param args        查询条件
+     * @return 查询构造器
      */
     open fun select(vararg args: SFilter): SQueryBuilder<ENTITY> {
         return select(args.toList())
-    } // Fun select()
+    }
 
     /**
      * 根据条件查询记录
      *
-     * @param   query        查询条件
-     * @return  查询构造器
+     * @param query        查询条件
+     * @return 查询构造器
      */
     open fun select(query: String?): SQueryBuilder<ENTITY> {
-        // 如果查询条件为空,则执行查询所有
+        /** 如果查询条件为空,则执行查询所有 */
         if (query == null) {
             return selectAll()
         }
@@ -324,10 +325,12 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         val queryParser = SSyntaxParser(ByteArrayInputStream(query.toByteArray()))
         val filters  = queryParser.parserFilters()
         return select(filters)
-    } // Fun select()
+    }
 
     /**
      * 获得表名
+     *
+     * @return 字符串
      */
     fun tableName(): String {
         val clz = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<*>
@@ -337,16 +340,16 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         }
 
         return clz.simpleName
-    } // Fun tableName()
+    }
 
     /**
-     * 实体的field转换为Pair结构
+     * 实体的 field 转换为 Pair 结构
      *
-     * @param   entity      要转换的实体对象
-     * @param   field       实体对应的域
+     * @param entity      要转换的实体对象
+     * @param field       实体对应的域
      */
     protected fun fieldToPair(entity: ENTITY, field: Field):  Pair<String, Any?> {
-        // 获得field对应的数据库表字段名
+        /** 获得field对应的数据库表字段名 */
         val anno = field.getAnnotation(Column::class.java)
         return Pair<String, Any?>(anno.name, when (field.type.simpleName) {
             "byte", "Byte" -> field.getByte(entity)
@@ -369,20 +372,20 @@ abstract class SAbstractDao<ENTITY: Any>(entityClazz: Class<ENTITY>) {
                 }
             }
         })
-    } // Fun fieldToPair()
+    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // 级联操作相关
     /**
      * 查询级联关系
      *
-     * @param   table       表名
-     * @param   id1         对象表ID字段名
-     * @param   id2         级联对象ID字段名
-     * @param   self        自身级联
-     * @param   filter      附加过滤条件
-     * @param   idList      对象ID列表
+     * @param table       表名
+     * @param id1         对象表 ID 字段名
+     * @param id2         级联对象 ID 字段名
+     * @param self        自身级联
+     * @param filter      附加过滤条件
+     * @param idList      对象 ID 列表
      * @return  关系列表
      */
     abstract fun relationQuery(table: String, id1: String, id2: String, self: Boolean, filter: String, idList: ArrayList<Any>): ArrayList<HashMap<String, Any>>
-} // Class SAbstractDao
+}

+ 6 - 6
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SAbstractDaoFactory.kt

@@ -27,16 +27,16 @@
 package com.persagy.database
 
 /**
- * Dao工厂
+ * Dao 工厂
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 abstract class SAbstractDaoFactory<ENTITY: Any> {
     /**
-     * 创建DAO对象
+     * 创建 DAO 对象
      *
-     * @param   entityClazz     实体类
-     * @return  实体类的数据访问对象
+     * @param entityClazz     实体类
+     * @return 实体类的数据访问对象
      */
     abstract fun createDao(entityClazz: Class<ENTITY>): SAbstractDao<ENTITY>
-} // Class SDaoFactory
+}

+ 5 - 5
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SAbstractFunction.kt

@@ -31,17 +31,17 @@ import com.persagy.database.enums.SDatabaseType
 /**
  * 函数支持
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 abstract class SAbstractFunction (val name: String, val args: ArrayList<Any>) {
     /** 字段名 */
     var colName = ""
 
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQL 语句
      */
     abstract fun toSql(type: SDatabaseType): String
-} // Class SAbstractFunction
+}

+ 104 - 98
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SFilter.kt

@@ -31,7 +31,7 @@ import com.persagy.database.enums.SOps
 /**
  * 过滤条件
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SFilter private constructor(
         /** 第一参数,保存属性名 */
@@ -40,285 +40,291 @@ class SFilter private constructor(
         var second: Any?,
         /** 操作符 */
         var opt: SOps = SOps.EQ) {
+
+    /**
+     * 构造函数
+     */
     constructor(): this(null, null)
 
     companion object {
         /**
          * 过滤条件:属性 == 值
          *
-         * @param   property        属性名
-         * @param   value           值
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           值
+         * @return 过滤条件
          */
         fun eq(property: String, value: Any): SFilter {
             return SFilter(property, value, SOps.EQ)
-        } // Fun eq()
+        }
 
         /**
          * 过滤条件:函数 == 值
          *
-         * @param   func            函数对象
-         * @param   value           值
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           值
+         * @return 过滤条件
          */
         fun eq(func: SAbstractFunction, value: Any): SFilter {
             return SFilter(func, value, SOps.EQ)
-        } // Fun eq()
+        }
 
         /**
          * 过滤条件:属性 != 值
          *
-         * @param   property        属性名
-         * @param   value           值
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           值
+         * @return 过滤条件
          */
         fun ne(property: String, value: Any): SFilter {
             return SFilter(property, value, SOps.NE)
-        } // Fun ne()
+        }
 
         /**
          * 过滤条件:函数 != 值
          *
-         * @param   func            函数对象
-         * @param   value           值
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           值
+         * @return 过滤条件
          */
         fun ne(func: SAbstractFunction, value: Any): SFilter {
             return SFilter(func, value, SOps.NE)
-        } // Fun ne()
+        }
 
         /**
          * 过滤条件:属性 > 值
          *
-         * @param   property        属性名
-         * @param   value           值
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           值
+         * @return 过滤条件
          */
         fun gt(property: String, value: Any): SFilter {
             return SFilter(property, value, SOps.GT)
-        } // Fun gt()
+        }
 
         /**
          * 过滤条件:函数 > 值
          *
-         * @param   func            函数对象
-         * @param   value           值
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           值
+         * @return 过滤条件
          */
         fun gt(func: SAbstractFunction, value: Any): SFilter {
             return SFilter(func, value, SOps.GT)
-        } // Fun gt()
+        }
 
         /**
          * 过滤条件:属性 >= 值
          *
-         * @param   property        属性名
-         * @param   value           值
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           值
+         * @return 过滤条件
          */
         fun gte(property: String, value: Any): SFilter {
             return SFilter(property, value, SOps.GTE)
-        } // Fun gte()
+        }
 
         /**
          * 过滤条件:函数 >= 值
          *
-         * @param   func            函数对象
-         * @param   value           值
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           值
+         * @return 过滤条件
          */
         fun gte(func: SAbstractFunction, value: Any): SFilter {
             return SFilter(func, value, SOps.GTE)
-        } // Fun gte()
+        }
 
         /**
          * 过滤条件:属性 < 值
          *
-         * @param   property        属性名
-         * @param   value           值
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           值
+         * @return 过滤条件
          */
         fun lt(property: String, value: Any): SFilter {
             return SFilter(property, value, SOps.LT)
-        } // Fun lt()
+        }
 
         /**
          * 过滤条件:函数 < 值
          *
-         * @param   func            函数对象
-         * @param   value           值
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           值
+         * @return 过滤条件
          */
         fun lt(func: SAbstractFunction, value: Any): SFilter {
             return SFilter(func, value, SOps.LT)
-        } // Fun lt()
+        }
 
         /**
          * 过滤条件:属性 <= 值
          *
-         * @param   property        属性名
-         * @param   value           值
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           值
+         * @return 过滤条件
          */
         fun lte(property: String, value: Any): SFilter {
             return SFilter(property, value, SOps.LTE)
-        } // Fun lte()
+        }
 
         /**
          * 过滤条件:函数 <= 值
          *
-         * @param   func            函数对象
-         * @param   value           值
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           值
+         * @return 过滤条件
          */
         fun lte(func: SAbstractFunction, value: Any): SFilter {
             return SFilter(func, value, SOps.LTE)
-        } // Fun lte()
+        }
 
         /**
          * 过滤条件:包含
          *
-         * @param   property        属性名
-         * @param   value           被包含的值
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           被包含的值
+         * @return 过滤条件
          */
         fun contain(property: String, value: String): SFilter {
             return SFilter(property, value, SOps.CONTAIN)
-        } // Fun contain()
+        }
 
         /**
          * 过滤条件:包含
          *
-         * @param   func            函数对象
-         * @param   value           被包含的值
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           被包含的值
+         * @return 过滤条件
          */
         fun contain(func: SAbstractFunction, value: String): SFilter {
             return SFilter(func, value, SOps.CONTAIN)
-        } // Fun contain()
+        }
 
         /**
          * 过滤条件:以指定字符串开始
          *
-         * @param   property        属性名
-         * @param   value           指定字符串开始
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           指定字符串开始
+         * @return 过滤条件
          */
         fun startWith(property: String, value: String): SFilter {
             return SFilter(property, value, SOps.STARTWITH)
-        } // Fun contain()
+        }
 
         /**
          * 过滤条件:以指定字符串开始
          *
-         * @param   func            函数对象
-         * @param   value           指定字符串开始
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           指定字符串开始
+         * @return 过滤条件
          */
         fun startWith(func: SAbstractFunction, value: String): SFilter {
             return SFilter(func, value, SOps.STARTWITH)
-        } // Fun contain()
+        }
 
         /**
          * 过滤条件:以指定字符串结尾
          *
-         * @param   property        属性名
-         * @param   value           指定字符串开始
-         * @return  过滤条件
+         * @param property        属性名
+         * @param value           指定字符串开始
+         * @return 过滤条件
          */
         fun endWith(property: String, value: String): SFilter {
             return SFilter(property, value, SOps.ENDWITH)
-        } // Fun endWith()
+        }
 
         /**
          * 过滤条件:以指定字符串结尾
          *
-         * @param   func            函数对象
-         * @param   value           指定字符串开始
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param value           指定字符串开始
+         * @return 过滤条件
          */
         fun endWith(func: SAbstractFunction, value: String): SFilter {
             return SFilter(func, value, SOps.ENDWITH)
-        } // Fun endWith()
+        }
 
         /**
          * 过滤条件:属性为空
          *
-         * @param   property        属性名
-         * @return  过滤条件
+         * @param property        属性名
+         * @return 过滤条件
          */
         fun isNull(property: String): SFilter {
             return SFilter(property, null, SOps.ISNULL)
-        } // Fun isNull()
+        }
 
         /**
          * 过滤条件:属性为空
          *
-         * @param   func            函数对象
-         * @return  过滤条件
+         * @param func            函数对象
+         * @return 过滤条件
          */
         fun isNull(func: SAbstractFunction): SFilter {
             return SFilter(func, null, SOps.ISNULL)
-        } // Fun isNull()
+        }
 
         /**
          * 过滤条件:属性在值列表中
          *
-         * @param   property        属性名
-         * @param   valueList       值列表
-         * @return  过滤条件
+         * @param property        属性名
+         * @param valueList       值列表
+         * @return 过滤条件
          */
         fun inList(property: String, valueList: List<Any>): SFilter {
             return SFilter(property, valueList, SOps.IN)
-        } // Fun inList()
+        }
 
         /**
          * 过滤条件:属性在值列表中
          *
-         * @param   func            函数对象
-         * @param   valueList       值列表
-         * @return  过滤条件
+         * @param func            函数对象
+         * @param valueList       值列表
+         * @return 过滤条件
          */
         fun inList(func: SAbstractFunction, valueList: List<Any>): SFilter {
             return SFilter(func, valueList, SOps.IN)
-        } // Fun inList()
+        }
 
         /**
          * 过滤条件:逻辑非
          *
-         * @param   filter          属性名
-         * @return  过滤条件
+         * @param filter          属性名
+         * @return 过滤条件
          */
         fun not(filter: SFilter): SFilter {
             return SFilter(filter, null, SOps.NOT)
-        } // Fun not()
+        }
 
         /**
          * 过滤条件:逻辑与
          *
-         * @param   filterList      过滤条件列表
-         * @return  过滤条件
+         * @param filterList      过滤条件列表
+         * @return 过滤条件
          */
         fun and(vararg filterList: SFilter): SFilter {
             var filter = filterList[0]
             for (i in 1 until filterList.size) {
                 filter = SFilter(filter, filterList[i], SOps.AND)
             }
+
             return filter
-        } // Fun not()
+        }
 
         /**
          * 过滤条件:逻辑或
          *
-         * @param   filterList      过滤条件列表
-         * @return  过滤条件
+         * @param filterList      过滤条件列表
+         * @return 过滤条件
          */
         fun or(vararg filterList: SFilter): SFilter {
             var filter = filterList[0]
             for (i in 1 until filterList.size) {
                 filter = SFilter(filter, filterList[i], SOps.OR)
             }
+
             return filter
-        } // Fun not()
-    } // companion object
-} // Class SFilter
+        }
+    }
+}

+ 2 - 3
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SGroup.kt

@@ -29,12 +29,11 @@ package com.persagy.database
 /**
  * 查询统计分组
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SGroup {
     /** 分组属性名 */
     var nameList = ArrayList<String>()
-
     /** 统计个数 */
     var count: Boolean? = null
 
@@ -49,4 +48,4 @@ class SGroup {
 
     /** 需计算平均值属性列表 */
     var avgList = ArrayList<String>()
-} // class SGroup
+}

+ 6 - 2
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SOrder.kt

@@ -31,6 +31,10 @@ import com.persagy.database.enums.SDirection
 /**
  * 排序条件
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
-class SOrder(val name: String, var direction: SDirection = SDirection.ASC)
+class SOrder(
+        /** 字段名 */
+        val name: String,
+        /** 排序规则 */
+        var direction: SDirection = SDirection.ASC)

+ 9 - 5
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SPageQueryInfo.kt

@@ -29,10 +29,14 @@ package com.persagy.database
 /**
  * 分页查询信息
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
-open class SPageQueryInfo<ENTITY: Any>(pageNumber: Int, pageSize: Int) {
-        /** 符合条件的总记录数 */
+open class SPageQueryInfo<ENTITY: Any>(
+        /** 第几页 */
+        pageNumber: Int,
+        /** 每页记录数 */
+        pageSize: Int) {
+    /** 符合条件的总记录数 */
     var total: Long? = null
 
     /** 第几页(从 1 开始) */
@@ -48,5 +52,5 @@ open class SPageQueryInfo<ENTITY: Any>(pageNumber: Int, pageSize: Int) {
     init {
         this.pageNumber = pageNumber
         this.pageSize = pageSize
-    } // Init
-} // Class SPageQueryInfo
+    }
+}

+ 77 - 70
persagy-kotlin-database/src/main/kotlin/com/persagy/database/SQueryBuilder.kt

@@ -39,7 +39,7 @@ import kotlin.collections.ArrayList
 /**
  * 查询条件生成器
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SQueryBuilder<ENTITY: Any>(
         private val baseDao: SAbstractDao<ENTITY>,
@@ -71,12 +71,6 @@ class SQueryBuilder<ENTITY: Any>(
 
     /** 记录数 */
     var count:Int? = null
-//        set(value) {
-//            field = value
-//            if (field < 1) {
-//                field = 1
-//            }
-//        }
 
     /** 分组 */
     var group = SGroup()
@@ -84,25 +78,25 @@ class SQueryBuilder<ENTITY: Any>(
     /**
      * 执行查询
      *
-     * @return  返回查询到的记录
+     * @return 返回查询到的记录
      */
     fun exec(): ArrayList<ENTITY> {
         return baseDao.execQuery(this)
-    } // Fun exec()
+    }
 
     /**
      * 统计查询个数
      *
-     * @return  返回查询到的记录个数
+     * @return 返回查询到的记录个数
      */
     fun execCount(): Long {
         return baseDao.execCount(this)
-    } // Fun execCount()
+    }
 
     /**
      * 执行查询,并返回第一条记录
      *
-     * @return  返回查询到的第一条记录
+     * @return 返回查询到的第一条记录
      */
     fun entity(): ENTITY? {
         count = 1
@@ -112,72 +106,74 @@ class SQueryBuilder<ENTITY: Any>(
         } else {
             null
         }
-    } // Fun entity()
+    }
 
     /**
      * 执行分页查询
      *
-     * @param   pageNumber      第几页
-     * @param   pageSize        每页记录数
-     * @return  分页找到的数据
+     * @param pageNumber      第几页
+     * @param pageSize        每页记录数
+     * @return 分页找到的数据
      */
     fun pageQuery(pageNumber: Int, pageSize: Int): SPageQueryInfo<ENTITY> {
         return baseDao.pageQuery(this, pageNumber, pageSize)
-    } // Fun pageQuery()
+    }
 
     /**
      * 数据库表
      *
-     * @param   name    表名
-     * @return  查询构建器
+     * @param name    表名
+     * @return 查询构建器
      */
     fun table(name: String): SQueryBuilder<ENTITY> {
         tableName = name
         return this
-    } // Fun tableName
+    }
 
     /**
      * 字段映射
      *
-     * @param   fields      字段列表
-     * @return  查询构建器
+     * @param fields      字段列表
+     * @return 查询构建器
      */
     fun projection(fields: List<String>): SQueryBuilder<ENTITY> {
         for (name in fields) {
             fieldList.add(propertyName(name.trim()))
         }
+
         return this
-    } // Fun projection()
+    }
 
     /**
      * 字段映射
      *
-     * @param   fields      字段列表
-     * @return  查询构建器
+     * @param fields      字段列表
+     * @return 查询构建器
      */
     fun projection(fields: String): SQueryBuilder<ENTITY> {
         return projection(fields.split(","))
-    } // Fun projection()
+    }
 
     /**
      * 添加过滤条件
      *
-     * @param   filterList      过滤条件
-     * @return  查询构建器
+     * @param filterList      过滤条件
+     * @return 查询构建器
      */
     fun filter(vararg filterList: SFilter): SQueryBuilder<ENTITY> {
         for (item in filterList) {
             convertType(baseDao.entityClass, item)
             this.filterList.add(item)
         }
+
         return this
-    } // Fun filter()
+    }
 
     /**
      * 添加过滤条件
      *
-     * @param   filterList      过滤条件
-     * @return  查询构建器
+     * @param filterList      过滤条件
+     * @return 查询构建器
      */
     fun filter(vararg filterList: Pair<String, Any>): SQueryBuilder<ENTITY> {
         for (item in filterList) {
@@ -185,20 +181,21 @@ class SQueryBuilder<ENTITY: Any>(
             convertType(baseDao.entityClass, filter)
             this.filterList.add(filter)
         }
+
         return this
-    } // Fun filter()
+    }
 
     /**
      * 添加排序条件
      *
-     * @param   name    排序属性名
-     * @param   dir     排序方向
-     * @return  查询构建器
+     * @param name    排序属性名
+     * @param dir     排序方向
+     * @return 查询构建器
      */
     fun order(name: String, dir: SDirection): SQueryBuilder<ENTITY> {
         orderArgs.add(SOrder(propertyName(name.trim()), dir))
         return this
-    } // Fun order()
+    }
 
     /**
      * 添加排序条件
@@ -210,133 +207,143 @@ class SQueryBuilder<ENTITY: Any>(
         for (order in orderList) {
             order(order.name, order.direction)
         }
+
         return this
-    } // Fun order()
+    }
 
     /**
      * 添加排序条件
      *
-     * @param   orderStr    排序条件
-     * @return  查询构建器
+     * @param orderStr    排序条件
+     * @return 查询构建器
      */
     fun order(orderStr: String): SQueryBuilder<ENTITY> {
         val parser = SSyntaxParser(ByteArrayInputStream(orderStr.toByteArray()))
         val orderList = parser.parserOrders()
         order(*orderList.toTypedArray())
         return this
-    } // Fun order()
+    }
 
     /**
      * 去除重复记录
      *
-     * @return  查询构建器
+     * @return 查询构建器
      */
     fun distinct(): SQueryBuilder<ENTITY> {
         isDistinct = true
         return this
-    } // Fun distinct()
+    }
 
     /**
      * 限定取得的记录数
      *
-     * @param   count   取得的记录数
-     * @return  查询构建器
+     * @param count   取得的记录数
+     * @return 查询构建器
      */
     fun limit(count: Int): SQueryBuilder<ENTITY> {
         limit(0, count)
         return this
-    } // Fun limit()
+    }
 
     /**
      * 限定从指定位置取得的记录数
      *
-     * @param   offset  指定位置(默认从0开始)
-     * @param   count   取得的记录数
-     * @return  查询构建器
+     * @param offset  指定位置(默认从 0 开始)
+     * @param count   取得的记录数
+     * @return 查询构建器
      */
     fun limit(offset: Int, count: Int): SQueryBuilder<ENTITY> {
         this.offset = offset
         this.count = count
         return this
-    } // Fun limit()
+    }
 
     /**
      * 添加分组
      *
-     * @param   nameList    名称列表
-     * @return  查询构建器
+     * @param nameList    名称列表
+     * @return 查询构建器
      */
     fun group(vararg nameList: String): SQueryBuilder<ENTITY> {
         for (name in nameList) {
             group.nameList.add(propertyName(name.trim()))
         }
+
         return this
-    } // Fun group()
+    }
 
     /**
      * 是否统计记录个数
+     *
+     * @param value     布尔值
+     * @return 结果对象
      */
     fun count(value: Boolean): SQueryBuilder<ENTITY>{
         group.count = value
         return this
-    } // Fun count()
+    }
+
     /**
      * 统计最大数
      *
-     * @param   nameList    统计的属性名称
-     * @return  查询构建器
+     * @param nameList    统计的属性名称
+     * @return 查询构建器
      */
     fun max(vararg nameList: String): SQueryBuilder<ENTITY> {
         for (name in nameList) {
             group.maxList.add(propertyName(name.trim()))
         }
+
         return this
-    } // Fun max()
+    }
 
 
     /**
      * 统计最小数
      *
-     * @param   nameList    统计的属性名称
-     * @return  查询构建器
+     * @param nameList    统计的属性名称
+     * @return 查询构建器
      */
     fun min(vararg nameList: String): SQueryBuilder<ENTITY> {
         for (name in nameList) {
             group.minList.add(propertyName(name.trim()))
         }
+
         return this
-    } // Fun min()
+    }
 
     /**
      * 统计求和
      *
-     * @param   nameList    统计的属性名称
-     * @return  查询构建器
+     * @param nameList    统计的属性名称
+     * @return 查询构建器
      */
     fun sum(vararg nameList: String): SQueryBuilder<ENTITY> {
         for (name in nameList) {
             group.sumList.add(propertyName(name.trim()))
         }
+
         return this
-    } // Fun sum()
+    }
 
     /**
      * 统计求平均数
      *
-     * @param   nameList    统计的属性名称
-     * @return  查询构建器
+     * @param nameList    统计的属性名称
+     * @return 查询构建器
      */
     fun avg(vararg nameList: String): SQueryBuilder<ENTITY> {
         for (name in nameList) {
             group.avgList.add(propertyName(name.trim()))
         }
+
         return this
-    } // Fun avg()
+    }
 
     /**
      * 获得属性名
      *
-     * @param   name    输入名称
+     * @param name    输入名称
      * @return  属性名
      */
     private fun propertyName(name: String): String {
@@ -352,8 +359,8 @@ class SQueryBuilder<ENTITY: Any>(
     /**
      * 转换数据类型
      *
-     * @param   entityClass 实体类类型
-     * @param   filter      过滤条件
+     * @param entityClass   实体类类型
+     * @param filter        过滤条件
      */
     private fun convertType(entityClass: Class<*>, filter: SFilter) {
         if (filter.first is SFilter) {
@@ -375,5 +382,5 @@ class SQueryBuilder<ENTITY: Any>(
                 }
             }
         }
-    } // Fun convertType()
-} // Class SQueryBuilder
+    }
+}

+ 6 - 6
persagy-kotlin-database/src/main/kotlin/com/persagy/database/enums/SDatabaseType.kt

@@ -29,11 +29,11 @@ package com.persagy.database.enums
 /**
  * 框架支持的数据库类型
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 enum class SDatabaseType {
-    MySQL,
-    Oracle,
-    PostgreSQL,
-    SQLServer
-} // Enum SDatabaseType
+    MySQL,          /** MySQL */
+    Oracle,         /** Oracle */
+    PostgreSQL,     /** PostgreSQL */
+    SQLServer       /** SQLServer */
+}

+ 3 - 5
persagy-kotlin-database/src/main/kotlin/com/persagy/database/enums/SDirection.kt

@@ -32,8 +32,6 @@ package com.persagy.database.enums
  * @author  庞利祥 <sybotan@126.com>
  */
 enum class SDirection {
-    /** 升级 */
-    ASC,
-    /**  降序 */
-    DESC
-} // Enum Order
+    ASC,     /** 升级 */
+    DESC    /**  降序 */
+}

+ 17 - 30
persagy-kotlin-database/src/main/kotlin/com/persagy/database/enums/SOps.kt

@@ -29,35 +29,22 @@ package com.persagy.database.enums
 /**
  * 过滤操作运算符
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 enum class SOps {
-    /** 等于 */
-    EQ,
-    /** 不等于 */
-    NE,
-    /** 大于 */
-    GT,
-    /** 大于等于 */
-    GTE,
-    /** 小于 */
-    LT,
-    /** 小于等于 */
-    LTE,
-    /** 包含 */
-    CONTAIN,
-    /** 开始 */
-    STARTWITH,
-    /** 结尾 */
-    ENDWITH,
-    /** 为空 */
-    ISNULL,
-    /** 包含在列表中 */
-    IN,
-    /** 逻辑非 */
-    NOT,
-    /** 逻辑与 */
-    AND,
-    /** 逻辑或 */
-    OR
-} // Enum Ops
+
+    EQ,         /** 等于 */
+    NE,         /** 不等于 */
+    GT,         /** 大于 */
+    GTE,        /** 大于等于 */
+    LT,         /** 小于 */
+    LTE,        /** 小于等于 */
+    CONTAIN,    /** 包含 */
+    STARTWITH,  /** 开始 */
+    ENDWITH,    /** 结尾 */
+    ISNULL,     /** 为空 */
+    IN,         /** 包含在列表中 */
+    NOT,        /** 逻辑非 */
+    AND,        /** 逻辑与 */
+    OR          /** 逻辑或 */
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/extensions/SAnyExtension.kt

@@ -33,10 +33,10 @@ import javax.persistence.Id
 /**
  * 取得主键字段值
  *
- * @return  Id字段值
+ * @return  Id 字段值
  */
 fun Any.keyValue(property: String = "id"): Any? {
-    /** 依次取id列表中的键值 */
+    /** 依次取 id 列表中的键值 */
     javaClass.keyFieldList().forEach {
         if (it.name == property) {
             val accessible = it.isAccessible   //canAccess(this)
@@ -47,12 +47,12 @@ fun Any.keyValue(property: String = "id"): Any? {
         }
     }
     return null
-} // Fun Serializable.keyValue()
+}
 
 /**
  * 取得主键与值的映射
  *
- * @return  主键映射。key为属性名
+ * @return 主键映射。key 为属性名
  */
 fun Any.keyMap(): HashMap<String, Any> {
     val map = HashMap<String, Any>()
@@ -69,12 +69,12 @@ fun Any.keyMap(): HashMap<String, Any> {
     }
 
     return map
-} // Fun Serializable.keyMap()
+}
 
 /**
  * 获得主键的过滤条件
  *
- * @return  主键的过滤条件
+ * @return 主键的过滤条件
  */
 fun Any.filterListByKeys(): ArrayList<SFilter> {
     val filterList = ArrayList<SFilter>()
@@ -82,4 +82,4 @@ fun Any.filterListByKeys(): ArrayList<SFilter> {
         filterList.add(SFilter.eq(it.key, it.value))
     }
     return filterList
-} // Fun Serializable.filterListByKeys()
+}

+ 4 - 4
persagy-kotlin-database/src/main/kotlin/com/persagy/database/extensions/SClassExtension.kt

@@ -35,7 +35,7 @@ import javax.persistence.Id
 /**
  * 取得主键列表
  *
- * @return  主键列表
+ * @return 主键列表
  */
 fun Class<*>.keyFieldList(): ArrayList<Field> {
     val keyList = ArrayList<Field>()
@@ -46,12 +46,12 @@ fun Class<*>.keyFieldList(): ArrayList<Field> {
         }
     }
     return keyList
-} // Fun Serializable.keyFieldList()
+}
 
 /**
  * 取得主键字段列表
  *
- * @return  主键字段列表
+ * @return 主键字段列表
  */
 fun Class<*>.keyColumnList(): ArrayList<String> {
     val columnList = ArrayList<String>()
@@ -63,4 +63,4 @@ fun Class<*>.keyColumnList(): ArrayList<String> {
         }
     }
     return columnList
-} // Fun keyColumnList()
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLPad.kt

@@ -30,18 +30,18 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL左填充字符串函数
+ * SQL 左填充字符串函数
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SLPad(name: String, len: Int, padString: String) : SAbstractFunction(name, arrayListOf(len, padString)) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQ L语句
      */
     override fun toSql(type: SDatabaseType): String {
         return "lpad($colName, ${args[0]}, '${args[1]}')"
-    } // Fun toSql()
-} // Class SLPad
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLeft.kt

@@ -30,18 +30,18 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL左截取函数
+ * SQL 左截取函数
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SLeft(name: String, len: Int) : SAbstractFunction(name, arrayListOf(len)) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type      数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return "left($colName, ${args[0]})"
-    } // Fun toSql()
-} // Class SLeft
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLength.kt

@@ -30,18 +30,18 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL取长度函数
+ * SQL 取长度函数
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SLength(name: String) : SAbstractFunction(name, arrayListOf()) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type      数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return "length($colName)"
-    } // Fun toSql()
-} // Class SLength
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SLower.kt

@@ -30,18 +30,18 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL字符串转换为小写
+ * SQL 字符串转换为小写
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SLower(name: String) : SAbstractFunction(name, arrayListOf()) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return "lower($colName)"
-    } // Fun toSql()
-} // Class SLower
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SMid.kt

@@ -30,16 +30,16 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL从指定位置截取批暄长度字符串函数
+ * SQL 从指定位置截取批暄长度字符串函数
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SMid(name: String, pos: Int, len: Int) : SAbstractFunction(name, arrayListOf(pos, len)) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return if (args.size == 2) {
@@ -47,5 +47,5 @@ class SMid(name: String, pos: Int, len: Int) : SAbstractFunction(name, arrayList
         } else {
             "substring($colName, ${args[0]})"
         }
-    } // Fun toSql()
-} // Class SMid
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SRPad.kt

@@ -30,18 +30,18 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL右填充字符串函数
+ * SQL 右填充字符串函数
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SRPad(name: String, len: Int, padString: String) : SAbstractFunction(name, arrayListOf(len, padString)) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return "rpad($colName, ${args[0]}, '${args[1]}')"
-    } // Fun toSql()
-} // Class SRPad
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SRight.kt

@@ -30,18 +30,18 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL右截取函数
+ * SQL 右截取函数
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SRight(name: String, len: Int) : SAbstractFunction(name, arrayListOf(len)) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return "right($colName, ${args[0]})"
-    } // Fun toSql()
-} // Class SRight
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SSubstring.kt

@@ -30,16 +30,16 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL从指定位置截取批暄长度字符串函数
+ * SQL 从指定位置截取批暄长度字符串函数
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SSubstring(name: String, pos: Int, len: Int) : SAbstractFunction(name, arrayListOf(pos, len)) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return if (args.size == 2) {
@@ -47,5 +47,5 @@ class SSubstring(name: String, pos: Int, len: Int) : SAbstractFunction(name, arr
         } else {
             "substring($colName, ${args[0]})"
         }
-    } // Fun toSql()
-} // Class SSubstring
+    }
+}

+ 7 - 7
persagy-kotlin-database/src/main/kotlin/com/persagy/database/functions/SUpper.kt

@@ -30,18 +30,18 @@ import com.persagy.database.SAbstractFunction
 import com.persagy.database.enums.SDatabaseType
 
 /**
- * SQL字符串转换为大写
+ * SQL 字符串转换为大写
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SUpper(name: String) : SAbstractFunction(name, arrayListOf()) {
     /**
-     * 转换成对应的SQL语句
+     * 转换成对应的 SQL 语句
      *
-     * @param   type        数据库类型
-     * @return  对应的SQL语句
+     * @param type        数据库类型
+     * @return 对应的 SQL 语句
      */
     override fun toSql(type: SDatabaseType): String {
         return "upper($colName)"
-    } // Fun toSql()
-} // Class SUpper
+    }
+}

+ 28 - 25
persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/IBaseMapper.kt

@@ -34,14 +34,14 @@ import org.apache.ibatis.annotations.*
 /**
  * 基础数据库操作影射器
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 interface IBaseMapper<ENTITY: Any> {
     /**
      * 根据条件删除
      *
-     * @param   filterArgs      过滤条件
-     * @param   whereArgs       whereArgs参数值,由SQlProvider填充
+     * @param filterArgs      过滤条件
+     * @param whereArgs       whereArgs 参数值,由 SQlProvider 填充
      */
     @DeleteProvider(type = SSqlProvider::class, method = "delete")
     fun delete(@Param("entityClass")entityClass: Class<*>,
@@ -50,6 +50,9 @@ interface IBaseMapper<ENTITY: Any> {
 
     /**
      * 删除所有记录
+     *
+     * @param entityClass       实体类,类型
+     * @return 是否成功
      */
     @DeleteProvider(type = SSqlProvider::class, method = "deleteAll")
     fun deleteAll(@Param("entityClass")entityClass: Class<*>): Boolean
@@ -57,8 +60,8 @@ interface IBaseMapper<ENTITY: Any> {
     /**
      * 在数据库中插入实体
      *
-     * @param   entity      插入数据库的实体
-     * @return  插入是否成功
+     * @param entity       插入数据库的实体
+     * @return 插入是否成功
      */
     @InsertProvider(type = SSqlProvider::class, method = "insert")
     @Options(useGeneratedKeys = true, keyProperty = "entity._id")
@@ -68,8 +71,8 @@ interface IBaseMapper<ENTITY: Any> {
     /**
      * 在数据库中插入实体
      *
-     * @param   entity      插入数据库的实体
-     * @return  插入是否成功
+     * @param entity      插入数据库的实体
+     * @return 插入是否成功
      */
     @InsertProvider(type = SSqlProvider::class, method = "replace")
     fun replace(@Param("entityClass")entityClass: Class<*>,
@@ -79,10 +82,10 @@ interface IBaseMapper<ENTITY: Any> {
     /**
      * 根据条件更新
      *
-     * @param   entity          更新值
-     * @param   projection      字段映射
-     * @param   filterArgs      过滤条件
-     * @param   whereArgs       whereArgs参数值,由SQlProvider填充
+     * @param  entity          更新值
+     * @param  projection      字段映射
+     * @param  filterArgs      过滤条件
+     * @param  whereArgs       whereArgs参数值,由 SQlProvider 填充
      */
     @UpdateProvider(type = SSqlProvider::class, method = "update")
     fun update(@Param("entityClass")entityClass: Class<*>,
@@ -94,9 +97,9 @@ interface IBaseMapper<ENTITY: Any> {
     /**
      * 执行查询操作
      *
-     * @param   builder         查询查询构造器
-     * @param   whereArgs       whereArgs参数值,由SQlProvider填充
-     * @return  查询到的记录
+     * @param builder         查询查询构造器
+     * @param whereArgs       whereArgs参数值,由 SQlProvider 填充
+     * @return 查询到的记录
      */
     @SelectProvider(type = SSqlProvider::class, method = "execQuery")
     fun execQuery(@Param("entityClass")entityClass: Class<*>,
@@ -106,9 +109,9 @@ interface IBaseMapper<ENTITY: Any> {
     /**
      * 执行查询操作
      *
-     * @param   builder         查询查询构造器
-     * @param   whereArgs       whereArgs参数值,由SQlProvider填充
-     * @return  查询到的记录
+     * @param builder         查询查询构造器
+     * @param whereArgs       whereArgs参数值,由 SQlProvider 填充
+     * @return 查询到的记录
      */
     @SelectProvider(type = SSqlProvider::class, method = "execCount")
     fun execCount(@Param("entityClass")entityClass: Class<*>,
@@ -120,13 +123,13 @@ interface IBaseMapper<ENTITY: Any> {
     /**
      * 查询级联关系
      *
-     * @param   table       表名
-     * @param   id1         对象表ID字段名
-     * @param   id2         级联对象ID字段名
-     * @param   self        自身级联
-     * @param   filter      附加过滤条件
-     * @param   idList      对象ID列表
-     * @return  关系列表
+     * @param  table       表名
+     * @param  id1         对象表ID字段名
+     * @param  id2         级联对象ID字段名
+     * @param  self        自身级联
+     * @param  filter      附加过滤条件
+     * @param  idList      对象ID列表
+     * @return 关系列表
      */
     @SelectProvider(type = SSqlProvider::class, method = "relationQuery")
     fun relationQuery(@Param("table")table: String,
@@ -136,4 +139,4 @@ interface IBaseMapper<ENTITY: Any> {
                       @Param("filter")filter: String,
                       @Param("idList")idList: ArrayList<Any>,
                       @Param("whereArgs")whereArgs: Map<String, Any>): ArrayList<HashMap<String, Any>>
-} // Interface IBaseMapper
+}

+ 116 - 166
persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SAbstractDriver.kt

@@ -51,40 +51,41 @@ abstract class SAbstractDriver {
     /**
      * 在数据库中插入实体
      *
-     * @param   argsMap         注入参数
-     * @return  插入SQL语句
+     * @param argsMap         注入参数
+     * @return 插入 SQL 语句
      */
     abstract fun insert(argsMap: Map<String, Any?>): String
 
     /**
      * 在数据库中替换实体
      *
-     * @param   argsMap         注入参数
-     * @param   insertSql       插入SQL语句
-     * @return  替换SQL语句
+     * @param argsMap         注入参数
+     * @param insertSql       插入 SQL 语句
+     * @return 替换 SQL 语句
      */
     abstract fun replace(argsMap: Map<String, Any?>, insertSql: String): String
 
     /**
      * 根据条件删除
      *
-     * @param   argsMap         注入参数
-     * @return  删除SQL语句
+     * @param argsMap         注入参数
+     * @return 删除 SQL 语句
      */
     abstract fun delete(argsMap: Map<String, Any?>): String
 
     /**
      * 删除所有记录
      *
-     * @return  删除SQL语句
+     * @param argsMap         注入参数
+     * @return 删除 SQL 语句
      */
     abstract fun deleteAll(argsMap: Map<String, Any?>): String
 
     /**
      * 根据条件更新
      *
-     * @param   argsMap         注入参数
-     * @return  更新SQL语句
+     * @param argsMap         注入参数
+     * @return 更新 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     open fun update(argsMap: Map<String, Any?>): String {
@@ -96,7 +97,7 @@ abstract class SAbstractDriver {
 
         if (argsMap.containsKey("projection")) {
             val fields = argsMap["projection"] as ArrayList<String>?
-            // 转换属性名
+            /** 转换属性名 */
             fields?.forEach {
                 try {
                     val colName = SAbstractDao.columnName(entityClass, it.trim())
@@ -144,13 +145,13 @@ abstract class SAbstractDriver {
         logger.debug("SQL= $sql")
 
         return sql
-    } // Fun update()
+    }
 
     /**
      * 执行查询操作
      *
-     * @param   argsMap         注入参数
-     * @return  查询SQL语句
+     * @param argsMap         注入参数
+     * @return 查询 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     fun execQuery(argsMap: Map<String, Any?>): String {
@@ -162,26 +163,26 @@ abstract class SAbstractDriver {
 
         var sql = object: SQL() {
             init {
-                // 如果选择去重
+                /** 如果选择去重 */
                 if (builder.isDistinct) {
                     SELECT_DISTINCT(buildColumns(entityClass, builder.fieldList))
                 } else {
                     SELECT(buildColumns(entityClass, builder.fieldList))
                 }
 
-                // 如果查询构建器朱指定了表名
+                /** 如果查询构建器朱指定了表名 */
                 if (builder.tableName.isNullOrEmpty()) {
                     FROM(SSqlProvider.driver.tableName(entityClass))
                 } else {
                     FROM(builder.tableName!!)
                 }
 
-                // 过滤条件
+                /** 过滤条件 */
                 if (clause.isNotEmpty()) {
                     WHERE(clause)
                 }
 
-                // 排序条件
+                /** 排序条件 */
                 for (col in builder.orderArgs) {
                     var path: String? = null
                     var propertyName = col.name
@@ -195,7 +196,7 @@ abstract class SAbstractDriver {
                     ORDER_BY("${SSqlProvider.driver.columnName(colName, path)} ${col.direction}")
                 }
 
-                // 分组
+                /** 分组 */
                 if (!builder.group.nameList.isNullOrEmpty()) {
                     for (name in builder.group.nameList) {
                         val colName = SAbstractDao.columnName(entityClass, name)
@@ -243,13 +244,13 @@ abstract class SAbstractDriver {
 
         logger.debug("SQL= $sql")
         return sql
-    } // Fun execQuery()
+    }
 
     /**
      * 执行查询操作
      *
-     * @param   argsMap         注入参数
-     * @return  查询SQL语句
+     * @param argsMap         注入参数
+     * @return 查询 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     fun execCount(argsMap: Map<String, Any?>): String {
@@ -263,19 +264,19 @@ abstract class SAbstractDriver {
             init {
                 SELECT("count(1) AS total")
 
-                // 如果查询构建器指定了表名
+                /** 如果查询构建器指定了表名 */
                 if (builder.tableName.isNullOrEmpty()) {
                     FROM(SSqlProvider.driver.tableName(entityClass))
                 } else {
                     FROM(builder.tableName!!)
                 }
 
-                // 过滤条件
+                /** 过滤条件 */
                 if (clause.isNotEmpty()) {
                     WHERE(clause)
                 }
 
-                // 分组
+                /** 分组 */
                 if (!builder.group.nameList.isNullOrEmpty()) {
                     for (name in builder.group.nameList) {
                         val colName = SAbstractDao.columnName(entityClass, name)
@@ -286,162 +287,107 @@ abstract class SAbstractDriver {
         }.toString()
         logger.debug("SQL= $sql")
         return sql
-    } // Fun execQuery()
+    }
 
     /**
-     * 获得表名,取实体类@Table注解的名称,如果没有注解,则取实体类类名。
+     * 获得表名,取实体类 @Table 注解的名称,如果没有注解,则取实体类类名。
      *
-     * @param   clz         mapper类类型
-     * @return  表名
+     * @param clz         mapper 类类型
+     * @return 表名
      */
     abstract fun tableName(clz: Class<*>): String
 
     /**
      * 将 name 加上引用符号
      *
-     * @param   name        名称
-     * @return  加上引用符号的名称
+     * @param name        名称
+     * @return 加上引用符号的名称
      */
     abstract fun escName(name: String): String
 
     /**
-     * 实体类的值,如果不是基本类型,则转换为json
+     * 实体类的值,如果不是基本类型,则转换为 json
      *
-     * @param   entity      实体类
-     * @param   name        名称
-     * @return  加上引用符号的名称
+     * @param entity      实体类
+     * @param name        名称
+     * @return 加上引用符号的名称
      */
     abstract fun entityValue(entity: HashMap<String, Any?>, name: String): String
 
     /**
-     * 生成limit语句
+     * 生成 limit 语句
      *
-     * @param   offset      偏移位置
-     * @param   count       取得的记录数
-     * @return  LIMIT子句
+     * @param offset      偏移位置
+     * @param count       取得的记录数
+     * @return LIMIT 子句
      */
     abstract fun limit(offset: Int?, count: Int?): String
 
-//    /**
-//     * 删除所有记录
-//     *
-//     * @return  删除SQL语句
-//     */
-//    abstract fun deleteAll(argsMap: Map<String, Any?>): String
-//
-//    /**
-//     * 在数据库中插入实体
-//     *
-//     * @param   argsMap         注入参数
-//     * @return  插入SQL语句
-//     */
-//    abstract fun insert(argsMap: Map<String, Any?>): String
-//
-//    /**
-//     * 在数据库中插入实体
-//     *
-//     * @param   argsMap         注入参数
-//     * @return  插入SQL语句
-//     */
-//    abstract fun replace(argsMap: Map<String, Any?>): String
-//
-//    /**
-//     * 根据条件更新
-//     *
-//     * @param   argsMap         注入参数
-//     * @return  更新SQL语句
-//     */
-//    abstract fun update(argsMap: Map<String, Any?>): String
-//
-//    /**
-//     * 执行查询操作
-//     *
-//     * @param   argsMap         注入参数
-//     * @return  查询SQL语句
-//     */
-//    abstract fun execQuery(argsMap: Map<String, Any?>): String
-//
-//    /**
-//     * 执行查询操作
-//     *
-//     * @param   argsMap         注入参数
-//     * @return  查询SQL语句
-//     */
-//    abstract fun execCount(argsMap: Map<String, Any?>): String
-//
-//    /**
-//     * 查询级联关系
-//     *
-//     * @param   argsMap         注入参数
-//     * @return  查询SQL语句
-//     */
-//    abstract fun relationQuery(argsMap: Map<String, Any?>): String
-
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
     /**
-     * 转换where字句参数
+     * 转换 where 字句参数
      *
-     * @param   argName     参数名
-     * @param   argValue    参数值
-     * @param   ops         运算符
-     * @return  转换后的SQL
+     * @param argName     参数名
+     * @param argValue    参数值
+     * @param ops         运算符
+     * @return 转换后的 SQL
      */
     abstract fun whereArg(argName: String, argValue: String, ops: SOps): String
 
 
     /**
-     * 转换参数名SQL语句
+     * 转换参数名 SQL 语句
      *
-     * @param   name        字段名
-     * @param   path        json路径。如果不是json对象,则该值为空
-     * @return  转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果不是 json 对象,则该值为空
+     * @return 转换后的 SQL
      */
     abstract fun argName(name: String, path: String?): String
 
     /**
-     * 转换参数值SQL语句
+     * 转换参数值 SQL 语句
      *
-     * @param   argName     参数名
-     * @param   isJson      是否Json对象
-     * @return  转换后的SQL
+     * @param argName     参数名
+     * @param isJson      是否 Json 对象
+     * @return 转换后的 SQL
      */
     abstract fun argValue(argName: String, isJson: Boolean): String
 
     /**
-     * 转换IN条件表达式
+     * 转换 IN 条件表达式
      *
-     * @param   name        字段名
-     * @param   path        json路径,如果字段不为json,则path为null
-     * @param   inArg       in操作参数
-     * @return  转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果字段不为 json,则 path 为 null
+     * @param inArg       in 操作参数
+     * @return 转换后的 SQL
      */
     abstract fun inArg(name: String, path: String?, inArg: String): String
 
     /**
-     * 将名称及json路径转换为SQL
+     * 将名称及 json 路径转换为 SQL
      *
-     * @param   name        字段名
-     * @param   path        json路径,如果字段不为json,则path为null
-     * @return   转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果字段不为 json,则 path 为 null
+     * @return 转换后的 SQL
      */
     abstract fun columnName(name: String, path: String?): String
 
     /**
-     * 将参数值转换为SQL语句
+     * 将参数值转换为 SQL 语句
      *
-     * @param   value       值
-     * @param   isJson      值是否转换为json格式
-     * @return  转换后的SQL
+     * @param value       值
+     * @param isJson      值是否转换为 json 格式
+     * @return 转换后的 SQL
      */
     abstract fun argValueToJson(value: String, isJson: Boolean): String
 
     /**
-     * 更新Json类型字段
+     * 更新 Json 类型字段
      *
-     * @param   name        字段名
-     * @param   value       值
-     * @return  更新SQL字符串
+     * @param name        字段名
+     * @param value       值
+     * @return 更新 SQL 字符串
      */
     abstract fun updateJson(name: String, value: Any): String
 
@@ -450,18 +396,18 @@ abstract class SAbstractDriver {
     /**
      * 处理函数支持
      *
-     * @param   func        函数对象
-     * @param   colName     字段名
-     * @return  生成的SQL语句
+     * @param func        函数对象
+     * @param colName     字段名
+     * @return 生成的 SQL 语句
      */
     abstract fun processFunction(func: SAbstractFunction, colName: String): String;
 
     /**
-     * 构造where子句参数
+     * 构造 where 子句参数
      *
-     * @param   filterList      过滤条件
-     * @param   values          子句参数列表
-     * @return  返回where子句
+     * @param filterList      过滤条件
+     * @param values          子句参数列表
+     * @return 返回 where 子句
      */
     protected fun buildWhereArgList(clazz: Class<*>, filterList: List<SFilter>, values: HashMap<String, Any>): String {
         val builder = StringBuilder()
@@ -475,32 +421,32 @@ abstract class SAbstractDriver {
         }
 
         val sql = builder.toString()
-        logger.debug("buildWhereArgList = $sql")
+//        logger.debug("buildWhereArgList = $sql")
         return sql
-    } // Fun buildWhereArgList()
+    }
 
     /**
-     * 构造where子句参数
+     * 构造 where 子句参数
      *
-     * @param   clazz           对应的实体类类型
-     * @param   filter          过滤条件
-     * @param   values          子句参数列表
-     * @return  返回where子句
+     * @param clazz           对应的实体类类型
+     * @param filter          过滤条件
+     * @param values          子句参数列表
+     * @return 返回 where 子句
      */
     protected fun buildWhereArg(clazz: Class<*>, filter: SFilter, values: HashMap<String, Any>): String {
         val builder = StringBuilder()
         val argName = "arg${values.size}"
         when (filter.opt) {
-            SOps.EQ,            // 等于
-            SOps.NE,            // 不等于
-            SOps.GT,            // 大于
-            SOps.GTE,           // 大于等于
-            SOps.LT,            // 小于
-            SOps.LTE,           // 小于等于
-            SOps.CONTAIN,       // 包含
-            SOps.STARTWITH,     // 以指定字符串开始
-            SOps.ENDWITH,       // 以指定字符串结束
-            SOps.ISNULL         // 为空
+            SOps.EQ,            /** 等于 */
+            SOps.NE,            /** 不等于 */
+            SOps.GT,            /** 大于 */
+            SOps.GTE,           /** 大于等于 */
+            SOps.LT,            /** 小于 */
+            SOps.LTE,           /** 小于等于 */
+            SOps.CONTAIN,       /** 包含 */
+            SOps.STARTWITH,     /** 以指定字符串开始 */
+            SOps.ENDWITH,       /** 以指定字符串结束 */
+            SOps.ISNULL         /** 为空 */
             -> {
                 var path: String? = null
                 var propertyName = if (filter.first is SAbstractFunction) {
@@ -532,8 +478,8 @@ abstract class SAbstractDriver {
                     SSqlProvider.driver.whereArg(SSqlProvider.driver.argName(colName, path), SSqlProvider.driver.argValue(argName, isJson), filter.opt)
                 }
             }
-            SOps.IN -> {         // 在列表内
-                // 如果列表不为空,则添加IN子句
+            SOps.IN -> {         /** 在列表内 */
+                /** 如果列表不为空,则添加IN子句 */
                 if (filter.second !=null && List::class.java.isAssignableFrom(filter.second!!.javaClass) &&
                         (filter.second as List<Any?>).size > 0) {
                     var path: String? = null
@@ -556,13 +502,13 @@ abstract class SAbstractDriver {
                     //"${driver.keyEsc}$colName${driver.keyEsc} IN ($inArg)"
                 }
             }
-            SOps.NOT -> {        // 逻辑非
+            SOps.NOT -> {        /** 逻辑非 */
                 builder.append("NOT (${buildWhereArg(clazz, filter.first as SFilter, values)})")
             }
-            SOps.AND -> {        // 逻辑与
+            SOps.AND -> {        /** 逻辑与 */
                 builder.append("(${buildWhereArg(clazz, filter.first as SFilter, values)}) AND (${buildWhereArg(clazz, filter.second as SFilter, values)})")
             }
-            SOps.OR -> {         // 逻辑或
+            SOps.OR -> {         /** 逻辑或 */
                 builder.append("((${buildWhereArg(clazz, filter.first as SFilter, values)}) OR (${buildWhereArg(clazz, filter.second as SFilter, values)}))")
             }
             else -> {
@@ -570,13 +516,17 @@ abstract class SAbstractDriver {
         }
 
         return builder.toString()
-    } // Fun buildWhereArgList()
+    }
 
     /**
-     * 生成IN操作参数
+     * 生成 IN 操作参数
+     *
+     * @param filter        条件
+     * @param values        值列表
+     * @param argPrefix     参数前缀
      */
     @Suppress("UNCHECKED_CAST")
-    protected fun buildInArgs(filter: SFilter, values: HashMap<String, Any>, argName: String): String {
+    protected fun buildInArgs(filter: SFilter, values: HashMap<String, Any>, argPrefix: String): String {
         val builder = StringBuilder()
         val argList = filter.second!! as List<Any>
         val property = filter.first?.toString()
@@ -590,22 +540,22 @@ abstract class SAbstractDriver {
             if (index > 0) {
                 builder.append(", ")
             }
-            builder.append(SSqlProvider.driver.argValueToJson("#{whereArgs.${argName}_$index}", isJson))
-            values["${argName}_$index"] = item
+            builder.append(SSqlProvider.driver.argValueToJson("#{whereArgs.${argPrefix}_$index}", isJson))
+            values["${argPrefix}_$index"] = item
         }
 
         return builder.toString()
-    } // Fun buildInArgs()
+    }
 
     /**
-     * 构建columns值。如果不指定字段列表,则查所有记录
+     * 构建 columns 值,如果不指定字段列表,则查所有记录
      *
-     * @param   clazz       实体类类型
-     * @param   fieldList   属性映射列表
-     * @return  values列表
+     * @param clazz       实体类类型
+     * @param fieldList   属性映射列表
+     * @return values 列表
      */
     protected fun buildColumns(clazz: Class<*>, fieldList: ArrayList<String>?): String {
-        // 如果不指定字段列表,则查所有记录
+        /** 如果不指定字段列表,则查所有记录 */
         if (fieldList == null || fieldList.size <= 0) {
             return "*"
         }
@@ -624,5 +574,5 @@ abstract class SAbstractDriver {
             builder.append(SSqlProvider.driver.escName(anna.name))
         }
         return builder.toString()
-    } // Fun buildColumns()
-} // Class SAbstractDriver
+    }
+}

+ 41 - 39
persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SAbstractMybatisDao.kt

@@ -35,7 +35,7 @@ import com.persagy.mybatis.extensions.toUpdateRow
 import org.slf4j.LoggerFactory
 
 /**
-     * Mybatis基础Dao操作
+ * Mybatis 基础 Dao 操作
  *
  * @author 庞利祥 <sybotan@126.com>
  */
@@ -44,9 +44,9 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
     companion object {
         /** 日志记录器 */
         private val logger = LoggerFactory.getLogger(SAbstractMybatisDao::class.java)
-    } // companion object
+    }
 
-    /** sql映射对象*/
+    /** sql 映射对象 */
     abstract val mapper: IBaseMapper<ENTITY>
 
     /** 读取记录行解析器 */
@@ -55,8 +55,8 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
     /**
      * 在数据库中插入实体
      *
-     * @param   entity      插入数据库的实体
-     * @return  手入是否成功
+     * @param entity      插入数据库的实体
+     * @return 手入是否成功
      */
     override fun insert(entity: ENTITY): Boolean {
         val entityMap = entity.toInsertRow()
@@ -70,18 +70,19 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
                 keyField.set(entity, id)
                 keyField.isAccessible = accessible
             }
+
         } catch (e: Exception) {
             // DO NOTHING
         }
 
         return result
-    } // Fun insert()
+    }
 
     /**
      * 在数据库中插入实体
      *
-     * @param   entity      插入数据库的实体
-     * @return  手入是否成功
+     * @param entity      插入数据库的实体
+     * @return 手入是否成功
      */
     override fun replace(entity: ENTITY): Boolean {
         return try {
@@ -90,13 +91,13 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
             e.printStackTrace()
             false
         }
-    } // Fun replace()
+    }
 
     /**
      * 根据条件删除
      *
-     * @param   args        删除条件
-     * @return  删除是否成功
+     * @param args        删除条件
+     * @return 删除是否成功
      */
     override fun delete(args: List<SFilter>): Boolean {
         return try {
@@ -105,12 +106,12 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
             e.printStackTrace()
             false
         }
-    } // Fun delete()
+    }
 
     /**
      * 删除所有记录
      *
-     * @return  删除是否成功
+     * @return 删除是否成功
      */
     override fun deleteAll(): Boolean {
         return try {
@@ -119,14 +120,15 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
             e.printStackTrace()
             false
         }
-    } // Fun deleteAll()
+    }
 
     /**
      * 根据条件更新
      *
-     * @param   projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
-     * @param   args        删除条件
-     * @return  更新是否成功
+     * @param entity      实体
+     * @param projection  将被更新的字段列表(以逗号分隔),为空表示更新所有非空字段
+     * @param args        删除条件
+     * @return 更新是否成功
      */
     override fun update(entity: ENTITY, projection: ArrayList<String>?, args: List<SFilter>?): Boolean {
         return try {
@@ -135,27 +137,27 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
             e.printStackTrace()
             false
         }
-    } // Fun update()
+    }
 
     /**
      * 根据条件查询记录
      *
-     * @param   args        查询条件
-     * @return  查询构造器
+     * @param args        查询条件
+     * @return 查询构造器
      */
     override fun select(args: List<SFilter>): SQueryBuilder<ENTITY> {
-        // 以下循环解决 “SingletonList cannot be cast to java.util.ArrayList” 错误。
+        /** 以下循环解决 “SingletonList cannot be cast to java.util.ArrayList” 错误。*/
         val filterList = ArrayList<SFilter>()
         args.forEach {
             filterList.add(it)
         }
         return SQueryBuilder(this, filterList)
-    } // Fun select()
+    }
 
     /**
      * 根据条件查询所有记录
      *
-     * @return  查找的记录
+     * @return 查找的记录
      */
     override fun selectAll(): SQueryBuilder<ENTITY> {
         val sQueryBuilder = SQueryBuilder(this, ArrayList())
@@ -163,13 +165,13 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
         sQueryBuilder.limit(999999999)
         logger.debug("查询记录:${sQueryBuilder.toJson()}")
         return sQueryBuilder
-    } // Fun selectAll()
+    }
 
     /**
      * 执行查询操作
      *
-     * @param   builder     查询查询构造器
-     * @return  查询到的记录
+     * @param builder     查询查询构造器
+     * @return 查询到的记录
      */
     override fun execQuery(builder: SQueryBuilder<ENTITY>): ArrayList<ENTITY> {
         val result = ArrayList<ENTITY>()
@@ -182,13 +184,13 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
         }
 
         return result
-    } // Fun exec()
+    }
 
     /**
      * 执行统计个数操作
      *
-     * @param   builder     查询查询构造器
-     * @return  查询到的记录
+     * @param builder     查询查询构造器
+     * @return 查询到的记录
      */
     override fun execCount(builder: SQueryBuilder<ENTITY>): Long {
         val list = mapper.execCount(entityClass, builder, HashMap())
@@ -196,22 +198,22 @@ abstract class SAbstractMybatisDao<ENTITY: Any>(entityClazz: Class<ENTITY>) : SA
             return list[0]
         }
         return list.size.toLong()
-    } // Fun execCount()
+    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // 级联操作相关
     /**
      * 查询级联关系
      *
-     * @param   table       表名
-     * @param   id1         对象表ID字段名
-     * @param   id2         级联对象ID字段名
-     * @param   self        自身级联
-     * @param   filter      附加过滤条件
-     * @param   idList      对象ID列表
-     * @return  关系列表
+     * @param table       表名
+     * @param id1         对象表 ID 字段名
+     * @param id2         级联对象 ID 字段名
+     * @param self        自身级联
+     * @param filter      附加过滤条件
+     * @param idList      对象 ID 列表
+     * @return 关系列表
      */
     override fun relationQuery(table: String, id1: String, id2: String, self: Boolean, filter: String, idList: ArrayList<Any>): ArrayList<HashMap<String, Any>> {
         return mapper.relationQuery(table, id1, id2, self, filter, idList, HashMap());
-    } // Fun cascadeIdList()
-} // Class SAbstractMybatisDao
+    }
+}

+ 12 - 12
persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SRowParser.kt

@@ -35,7 +35,7 @@ import javax.persistence.Column
 /**
  * 记录解析器
  *
- * @author  庞利祥(庞利祥)
+ * @author 庞利祥(庞利祥)
  */
 open class SRowParser<ENTITY: Any>(entityClazz: Class<ENTITY>) {
     companion object {
@@ -48,8 +48,8 @@ open class SRowParser<ENTITY: Any>(entityClazz: Class<ENTITY>) {
     /**
      * 解析记录行
      *
-     * @param   columns     字段映射
-     * @return  实体类
+     * @param columns     字段映射
+     * @return 实体类
      */
     open fun parseRow(columns: Map<String, Any?>): ENTITY {
         val entity = entityClass.getDeclaredConstructor().newInstance()
@@ -57,7 +57,7 @@ open class SRowParser<ENTITY: Any>(entityClazz: Class<ENTITY>) {
             val accessible = field.isAccessible    // canAccess(entity)
             field.isAccessible = true
 
-            // 处理统计信息
+            /** 处理统计信息 */
             if (field.name == "statistics") {
                 field.set(entity, groupStatistics(columns))
                 continue
@@ -99,8 +99,8 @@ open class SRowParser<ENTITY: Any>(entityClazz: Class<ENTITY>) {
     /**
      * 获得分组统计信息
      *
-     * @param   columns     字段列表
-     * @return  分组统计信息
+     * @param columns     字段列表
+     * @return 分组统计信息
      */
     private fun groupStatistics(columns: Map<String, Any?>): HashMap<String, Any?>? {
         var statistics: HashMap<String, Any?>?
@@ -128,14 +128,14 @@ open class SRowParser<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         }
 
         return statistics
-    } // Fun groupStatistics()
+    }
 
     /**
      * 统记字段名称
      *
-     * @param   type        统计类型
-     * @param   name        统计字段名
-     * @return  字段名
+     * @param type        统计类型
+     * @param name        统计字段名
+     * @return 字段名
      */
     private fun statisticName(type: String, name: String): String {
         val col = if (name.startsWith("_statistics_")) {
@@ -150,5 +150,5 @@ open class SRowParser<ENTITY: Any>(entityClazz: Class<ENTITY>) {
         } else {
             str.firstLowerCase();
         }
-    } // Fun statisticName()
-} // SRowParser
+    }
+}

+ 29 - 198
persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/SSqlProvider.kt

@@ -32,9 +32,9 @@ import kotlin.collections.ArrayList
 import kotlin.collections.HashMap
 
 /**
- * SQL构造器
+ * SQL 构造器
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 open class SSqlProvider {
     /** 静态对象 */
@@ -44,261 +44,92 @@ open class SSqlProvider {
 
         /** 驱动 */
         lateinit var driver: SAbstractDriver;
-    } // companion object
+    }
 
     /**
      * 在数据库中插入实体
      *
-     * @param   argsMap         注入参数
-     * @return  插入SQL语句
+     * @param argsMap         注入参数
+     * @return 插入 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     open fun insert(argsMap: Map<String, Any?>): String {
         return driver.insert(argsMap)
-    } // Fun insert()
+    }
 
     /**
      * 在数据库中替换实体
      *
-     * @param   argsMap         注入参数
-     * @return  替换SQL语句
+     * @param argsMap         注入参数
+     * @return 替换 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     open fun replace(argsMap: Map<String, Any?>): String {
         val insertSql = insert(argsMap)
         return driver.replace(argsMap, insertSql)
-    } // Fun replace()
+    }
 
     /**
      * 根据条件删除
      *
-     * @param   argsMap         注入参数
-     * @return  删除SQL语句
+     * @param argsMap         注入参数
+     * @return 删除 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     open fun delete(argsMap: Map<String, Any?>): String {
         return driver.delete(argsMap)
-    } // Fun delete()
+    }
 
     /**
      * 删除所有记录
      *
-     * @return  删除SQL语句
+     * @param argsMap         注入参数
+     * @return 删除 SQL 语句
      */
     open fun deleteAll(argsMap: Map<String, Any?>): String {
         return driver.deleteAll(argsMap)
-    } // Fun deleteAll()
+    }
 
     /**
      * 根据条件更新
      *
-     * @param   argsMap         注入参数
-     * @return  更新SQL语句
+     * @param argsMap         注入参数
+     * @return 更新 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     open fun update(argsMap: Map<String, Any?>): String {
         return driver.update(argsMap)
-    } // Fun update()
+    }
 
     /**
      * 执行查询操作
      *
-     * @param   argsMap         注入参数
-     * @return  查询SQL语句
+     * @param argsMap         注入参数
+     * @return 查询 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     fun execQuery(argsMap: Map<String, Any?>): String {
         return driver.execQuery(argsMap)
-    } // Fun execQuery()
+    }
 
     /**
      * 执行查询操作
      *
-     * @param   argsMap         注入参数
-     * @return  查询SQL语句
+     * @param argsMap         注入参数
+     * @return 查询 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     fun execCount(argsMap: Map<String, Any?>): String {
         return driver.execCount(argsMap)
-    } // Fun execQuery()
-
-//    /**
-//     * 构造where子句参数
-//     *
-//     * @param   filterList      过滤条件
-//     * @param   values          子句参数列表
-//     * @return  返回where子句
-//     */
-//    private fun buildWhereArgList(clazz: Class<*>, filterList: List<SFilter>, values: HashMap<String, Any>): String {
-//        val builder = StringBuilder()
-//
-//        for (filter in filterList) {
-//            val where = buildWhereArg(clazz, filter, values)
-//            if (builder.isNotEmpty()) {
-//                builder.append(" AND ")
-//            }
-//            builder.append(where)
-//        }
-//
-//        val sql = builder.toString()
-//        logger.debug("buildWhereArgList = $sql")
-//        return sql
-//    } // Fun buildWhereArgList()
-//
-//    /**
-//     * 构造where子句参数
-//     *
-//     * @param   clazz           对应的实体类类型
-//     * @param   filter          过滤条件
-//     * @param   values          子句参数列表
-//     * @return  返回where子句
-//     */
-//    private fun buildWhereArg(clazz: Class<*>, filter: SFilter, values: HashMap<String, Any>): String {
-//        val builder = StringBuilder()
-//        val argName = "arg${values.size}"
-//        when (filter.opt) {
-//            SOps.EQ,            // 等于
-//            SOps.NE,            // 不等于
-//            SOps.GT,            // 大于
-//            SOps.GTE,           // 大于等于
-//            SOps.LT,            // 小于
-//            SOps.LTE,           // 小于等于
-//            SOps.CONTAIN,       // 包含
-//            SOps.STARTWITH,     // 以指定字符串开始
-//            SOps.ENDWITH,       // 以指定字符串结束
-//            SOps.ISNULL         // 为空
-//            -> {
-//                var path: String? = null
-//                var propertyName = if (filter.first is SAbstractFunction) {
-//                    (filter.first!! as SAbstractFunction).name
-//                } else {
-//                    filter.first as String
-//                }
-//                val pos = propertyName.indexOf(".")
-//                if (pos > 0) {
-//                    path = propertyName.substring(pos + 1)
-//                    propertyName = propertyName.substring(0, pos)
-//                }
-//                val colName = SAbstractDao.columnName(clazz, propertyName)
-//                try {
-//                    values[argName] = filter.second!!
-//                } catch (e: Exception) {
-//                    // DO NOTHING
-//                }
-//
-//                val isJson = if (filter.opt == SOps.CONTAIN || filter.opt == SOps.STARTWITH || filter.opt == SOps.ENDWITH) {
-//                    false
-//                } else {
-//                    path != null
-//                }
-//
-//                return if (filter.first is SAbstractFunction) {
-//                    driver.whereArg(driver.processFunction(filter.first!! as SAbstractFunction, driver.argName(colName, path)), driver.argValue(argName, isJson), filter.opt)
-//                } else {
-//                    driver.whereArg(driver.argName(colName, path), driver.argValue(argName, isJson), filter.opt)
-//                }
-//            }
-//            SOps.IN -> {         // 在列表内
-//                // 如果列表不为空,则添加IN子句
-//                if (filter.second !=null && List::class.java.isAssignableFrom(filter.second!!.javaClass) &&
-//                        (filter.second as List<Any?>).size > 0) {
-//                    var path: String? = null
-//                    val inArg = buildInArgs(filter, values, argName)
-//
-//                    if (filter.first is SAbstractFunction) {
-//                        val colName = SAbstractDao.columnName(clazz, (filter.first as SAbstractFunction).name)
-//                        val col = driver.processFunction(filter.first!! as SAbstractFunction, driver.argName(colName, path))
-//                        builder.append("$col IN ($inArg)")
-//                    } else {
-//                        var propertyName = filter.first!!.toString()
-//                        val pos = propertyName.indexOf(".")
-//                        if (pos > 0) {
-//                            path = propertyName.substring(pos + 1)
-//                            propertyName = propertyName.substring(0, pos)
-//                        }
-//                        val colName = SAbstractDao.columnName(clazz, propertyName)
-//                        builder.append(driver.inArg(colName, path, inArg))
-//                    }
-//                    //"${driver.keyEsc}$colName${driver.keyEsc} IN ($inArg)"
-//                }
-//            }
-//            SOps.NOT -> {        // 逻辑非
-//                builder.append("NOT (${buildWhereArg(clazz, filter.first as SFilter, values)})")
-//            }
-//            SOps.AND -> {        // 逻辑与
-//                builder.append("(${buildWhereArg(clazz, filter.first as SFilter, values)}) AND (${buildWhereArg(clazz, filter.second as SFilter, values)})")
-//            }
-//            SOps.OR -> {         // 逻辑或
-//                builder.append("((${buildWhereArg(clazz, filter.first as SFilter, values)}) OR (${buildWhereArg(clazz, filter.second as SFilter, values)}))")
-//            }
-//            else -> {
-//            }
-//        }
-//
-//        return builder.toString()
-//    } // Fun buildWhereArgList()
-//
-//    /**
-//     * 生成IN操作参数
-//     */
-//    @Suppress("UNCHECKED_CAST")
-//    private fun buildInArgs(filter: SFilter, values: HashMap<String, Any>, argName: String): String {
-//        val builder = StringBuilder()
-//        val argList = filter.second!! as List<Any>
-//        val property = filter.first?.toString()
-//        val isJson = if (filter.first is SAbstractFunction) {
-//            false
-//        } else {
-//            property?.indexOf(".") != -1
-//        }
-//
-//        for ((index, item) in argList.withIndex()) {
-//            if (index > 0) {
-//                builder.append(", ")
-//            }
-//            builder.append(driver.argValueToJson("#{whereArgs.${argName}_$index}", isJson))
-//            values["${argName}_$index"] = item
-//        }
-//
-//        return builder.toString()
-//    } // Fun buildInArgs()
-//
-//    /**
-//     * 构建columns值。如果不指定字段列表,则查所有记录
-//     *
-//     * @param   clazz       实体类类型
-//     * @param   fieldList   属性映射列表
-//     * @return  values列表
-//     */
-//    protected fun buildColumns(clazz: Class<*>, fieldList: ArrayList<String>?): String {
-//        // 如果不指定字段列表,则查所有记录
-//        if (fieldList == null || fieldList.size <= 0) {
-//            return "*"
-//        }
-//
-//        val builder = StringBuilder()
-//        for (field in clazz.getAllDeclaredFields()) {
-//            if (!fieldList.contains(field.name)) {
-//                continue
-//            }
-//            val anna = field.getAnnotation(Column::class.java) ?: continue
-//
-//            if (builder.isNotEmpty()) {
-//                builder.append(", ")
-//            }
-//
-//            builder.append(driver.escName(anna.name))
-//        }
-//        return builder.toString()
-//    } // Fun buildColumns()
+    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // 级联操作相关
     /**
      * 查询级联关系
      *
-     * @param   argsMap         注入参数
-     * @return  查询SQL语句
+     * @param argsMap         注入参数
+     * @return 查询 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     fun relationQuery(argsMap: Map<String, Any?>): String {
@@ -330,7 +161,7 @@ open class SSqlProvider {
             }
         }.toString()
 
-        // 如果是关联自身(比如楼层连通关系,两个ID都是楼层)
+        /** 如果是关联自身(比如楼层连通关系,两个ID都是楼层) */
         if (self) {
             val sql1 = object: SQL() {
                 init {
@@ -357,5 +188,5 @@ open class SSqlProvider {
 
         logger.debug("SQL= $sql")
         return sql
-    } // Fun relationQuery()
-} // Class SSqlProvider
+    }
+}

+ 9 - 9
persagy-kotlin-mybatis/src/main/kotlin/com/persagy/mybatis/extensions/SAnyExtension.kt

@@ -31,9 +31,9 @@ import java.lang.reflect.Field
 import javax.persistence.Column
 
 /**
- * Any扩展获得类的泛型类
+ * Any扩展获得类的泛型类
  *
- * @return  类的泛型类
+ * @return 类的泛型类
  */
 fun Any.toInsertRow():  HashMap<String, Any?> {
     val row = HashMap<String, Any?>()
@@ -47,12 +47,12 @@ fun Any.toInsertRow():  HashMap<String, Any?> {
         row[anno.name] = fieldValue(this, field)
     }
     return row
-} // Fun Serializable.toInsertRow()
+}
 
 /**
  * 转换实体到更新行
  *
- * @return  更新行
+ * @return 更新行
  */
 fun Any.toUpdateRow(): HashMap<String, Any?> {
     val row = HashMap<String, Any?>()
@@ -67,17 +67,17 @@ fun Any.toUpdateRow(): HashMap<String, Any?> {
     }
 
     return row
-} // Fun toUpdateRow()
+}
 
 /**
- * 构建values值
+ * 构建 values 
  *
- * @return  values列表
+ * @return values 列表
  */
 private fun fieldValue(obj: Any, field: Field):  Any? {
-    val accessible = field.isAccessible     //canAccess(obj)
+    val accessible = field.isAccessible
     field.isAccessible = true
     val value = field.get(obj)
     field.isAccessible = accessible
     return value
-} // Fun fieldValue()
+}

+ 83 - 83
persagy-kotlin-mysql/src/main/kotlin/com/persagy/mysql/SMySqlDriver.kt

@@ -39,22 +39,22 @@ import org.apache.ibatis.jdbc.SQL
 import org.slf4j.LoggerFactory
 
 /**
- * MySQL驱动
+ * MySQL 驱动
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SMySqlDriver : SAbstractDriver() {
     /** 静态对象 */
     companion object {
         /** 日志记录器 */
         private val logger = LoggerFactory.getLogger(SMySqlDriver::class.java)
-    } // companion object
+    }
 
     /**
      * 在数据库中插入实体
      *
-     * @param   argsMap         注入参数
-     * @return  插入SQL语句
+     * @param argsMap         注入参数
+     * @return 插入 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     override fun insert(argsMap: Map<String, Any?>): String {
@@ -83,33 +83,33 @@ class SMySqlDriver : SAbstractDriver() {
         logger.debug("INSERT SQL= $sql")
 
         return sql
-    } // Fun insert()
+    }
 
     /**
      * 在数据库中替换实体
      *
-     * @param   argsMap         注入参数
-     * @param   insertSql       插入SQL语句
-     * @return  替换SQL语句
+     * @param argsMap         注入参数
+     * @param insertSql       插入 SQL 语句
+     * @return 替换 SQL 语句
      */
     override fun replace(argsMap: Map<String, Any?>, insertSql: String): String {
         val sql = insertSql.replace("INSERT INTO", "REPLACE INTO")
         logger.debug("REPLACE SQL= $sql")
         return sql
-    } // Fun replace()
+    }
 
     /**
      * 根据条件删除
      *
-     * @param   argsMap         注入参数
-     * @return  删除SQL语句
+     * @param argsMap         注入参数
+     * @return 删除 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     override fun delete(argsMap: Map<String, Any?>): String {
         val entityClass = argsMap["entityClass"] as Class<*>
-        // 从入参中获得过虑条件
+        /** 从入参中获得过虑条件 */
         val filterArgs = argsMap["filterArgs"] as List<SFilter>
-        // 转换后的where语句参数
+        /** 转换后的where语句参数 */
         val whereArgs = argsMap["whereArgs"] as HashMap<String, Any>
         val clause = buildWhereArgList(entityClass, filterArgs, whereArgs)
 
@@ -124,11 +124,12 @@ class SMySqlDriver : SAbstractDriver() {
 
         logger.debug("SQL= $sql")
         return sql
-    } // Fun delete()
+    }
 
     /**
      * 删除所有记录
      *
+     * @param argsMap         注入参数
      * @return  删除SQL语句
      */
     @Suppress("UNCHECKED_CAST")
@@ -142,38 +143,38 @@ class SMySqlDriver : SAbstractDriver() {
 
         logger.debug("SQL= $sql")
         return sql
-    } // Fun deleteAll()
+    }
 
     /**
      * 获得表名,取实体类@Table注解的名称,如果没有注解,则取实体类类名。
      *
-     * @param   clz         mapper类类型
-     * @return  表名
+     * @param clz         mapper 类类型
+     * @return 表名
      */
     override fun tableName(clz: Class<*>): String {
         val tableAnno = clz.getAnnotation(javax.persistence.Table::class.java)
-        // 如果有@Table注解,则取注解的表名;否则使用类名做为表名
+        /** 如果有@Table注解,则取注解的表名;否则使用类名做为表名 */
         val tableName = tableAnno?.name ?: clz.simpleName
         val name = tableName.replace(".", "`.`")
         return "`$name`"
-    } // Fun tableName()
+    }
 
     /**
      * 将 name 加上引用符号
      *
-     * @param   name    名称
-     * @return  加上引用符号的名称
+     * @param name    名称
+     * @return 加上引用符号的名称
      */
     override fun escName(name: String): String {
         return "`$name`"
-    } // Fun escName()
+    }
 
     /**
      * 实体类的值,如果不是基本类型,则转换为json
      *
-     * @param   entity      实体类
-     * @param   name        名称
-     * @return  加上引用符号的名称
+     * @param entity      实体类
+     * @param name        名称
+     * @return 加上引用符号的名称
      */
     override fun entityValue(entity: HashMap<String, Any?>, name: String): String {
         val value = entity[name] ?: return "null"
@@ -181,40 +182,40 @@ class SMySqlDriver : SAbstractDriver() {
             return "#{entity.$name}"
         }
         return "'${value.toJson()}'"
-    } // Fun entityValue()
+    }
 
     /**
-     * 生成limit语句
+     * 生成 limit 语句
      *
-     * @param   offset      偏移位置
-     * @param   count       取得的记录数
-     * @return  LIMIT子句
+     * @param offset      偏移位置
+     * @param count       取得的记录数
+     * @return LIMIT 子句
      */
     override fun limit(offset: Int?, count: Int?): String {
         return " LIMIT ${offset ?: 0}, ${count ?: 1}"
-    } // Fun limit()
+    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // 函数
     /**
      * 处理函数支持
      *
-     * @param   func        函数对象
-     * @param   colName     字段名
-     * @return  生成的SQL语句
+     * @param func        函数对象
+     * @param colName     字段名
+     * @return 生成的 SQL 语句
      */
     override fun processFunction(func: SAbstractFunction, colName: String): String {
         func.colName = colName
         return func.toSql(SDatabaseType.MySQL)
-    } // Fun processFunction()
+    }
 //----------------------------------------------------------------------------------------------------------------------
     /**
      * 转换where字句参数
      *
-     * @param   argName     参数名
-     * @param   argValue    参数值
-     * @param   ops         运算符
-     * @return  转换后的SQL
+     * @param argName     参数名
+     * @param argValue    参数值
+     * @param ops         运算符
+     * @return 转换后的 SQL
      */
     override fun whereArg(argName: String, argValue: String, ops: SOps): String {
 //        var name = obj as String
@@ -230,48 +231,48 @@ class SMySqlDriver : SAbstractDriver() {
 //        }
 
         when (ops) {
-            SOps.EQ -> {     // 等于
+            SOps.EQ -> {     /** 等于 */
                 return "$argName = $argValue"
             }
-            SOps.NE -> {     // 不等于
+            SOps.NE -> {     /** 不等于 */
                 return "$argName <> $argValue"
             }
-            SOps.GT -> {     // 大于
+            SOps.GT -> {     /** 大于 */
                 return "$argName > $argValue"
             }
-            SOps.GTE -> {    // 大于等于
+            SOps.GTE -> {    /** 大于等于 */
                 return "$argName >= $argValue"
             }
-            SOps.LT -> {     // 小于
+            SOps.LT -> {     /** 小于 */
                 return "$argName < $argValue"
             }
-            SOps.LTE -> {    // 小于等行
+            SOps.LTE -> {    /** 小于等行 */
                 return "$argName <= $argValue"
             }
-            SOps.CONTAIN -> {    // 包含
+            SOps.CONTAIN -> {    /** 包含 */
                 return "$argName LIKE CONCAT(\"%\" , $argValue, \"%\")"
             }
-            SOps.STARTWITH -> {    // 以指定字符串开始
+            SOps.STARTWITH -> {    /** 以指定字符串开始 */
                 return "$argName LIKE CONCAT($argValue, \"%\")"
             }
-            SOps.ENDWITH -> {    // 以指定字符串结束
+            SOps.ENDWITH -> {    /** 以指定字符串结束 */
                 return "$argName LIKE CONCAT(\"%\" , $argValue)"
             }
-            SOps.ISNULL -> {     // 为空
+            SOps.ISNULL -> {     /** 为空 */
                 return "ISNULL($argName)"
             }
             else -> {
             }
         }
         return ""
-    } // Fun whereArg()
+    }
 
     /**
-     * 转换参数名SQL语句
+     * 转换参数名 SQL 语句
      *
-     * @param   name        字段名
-     * @param   path        json路径。如果不是json对象,则该值为空
-     * @return  转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果不是 json 对象,则该值为空
+     * @return 转换后的 SQL
      */
     override fun argName(name: String, path: String?): String {
         return if (path == null) {
@@ -279,14 +280,14 @@ class SMySqlDriver : SAbstractDriver() {
         } else {
             "JSON_EXTRACT(`$name`, '\$.$path')"
         }
-    } // Fun argName()
+    }
 
     /**
-     * 转换参数值SQL语句
+     * 转换参数值 SQL 语句
      *
-     * @param   argName     参数名
-     * @param   isJson      是否Json对象
-     * @return  转换后的SQL
+     * @param argName     参数名
+     * @param isJson      是否 Json 对象
+     * @return 转换后的 SQL
      */
     override fun argValue(argName: String, isJson: Boolean): String {
         return if (isJson) {
@@ -294,15 +295,15 @@ class SMySqlDriver : SAbstractDriver() {
         } else {
             "#{whereArgs.$argName}"
         }
-    } // Fun argValue()
+    }
 
     /**
-     * 转换IN条件表达式
+     * 转换 IN 条件表达式
      *
-     * @param   name        字段名
-     * @param   path        json路径,如果字段不为json,则path为null
-     * @param   inArg       in操作参数
-     * @return  转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果字段不为 json,则 path  null
+     * @param inArg       in 操作参数
+     * @return 转换后的 SQL
      */
     override fun inArg(name: String, path: String?, inArg: String): String {
         return if (path == null) {
@@ -310,14 +311,14 @@ class SMySqlDriver : SAbstractDriver() {
         } else {
             "JSON_EXTRACT(`$name`,'\$.$path') IN ($inArg)"
         }
-    } // Fun inArg()
+    }
 
     /**
-     * 将名称及json路径转换为SQL
+     * 将名称及 json 路径转换为 SQL
      *
-     * @param   name        字段名
-     * @param   path        json路径,如果字段不为json,则path为null
-     * @return   转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果字段不为 json,则 path  null
+     * @return 转换后的 SQL
      */
     override fun columnName(name: String, path: String?): String {
         return if (path == null) {
@@ -328,26 +329,25 @@ class SMySqlDriver : SAbstractDriver() {
     }
 
     /**
-     * 将参数值转换为SQL语句
+     * 将参数值转换为 SQL 语句
      *
-     * @param   value       值
-     * @param   isJson      值是否转换为json格式
-     * @return  转换后的SQL
+     * @param value       值
+     * @param isJson      值是否转换为 json 格式
+     * @return 转换后的 SQL
      */
     override fun argValueToJson(value: String, isJson: Boolean): String {
         return value
-    } // Fun argValueToJson()
+    }
 
     /**
-     * 更新Json类型字段
+     * 更新 Json 类型字段
      *
-     * @param   name        字段名
-     * @param   value       值
-     * @return  更新SQL字符串
+     * @param name        字段名
+     * @param value       值
+     * @return 更新 SQL 字符串
      */
     override fun updateJson(name: String, value: Any): String {
         return "JSON_MERGE(IFNULL(`$name`,'{}'), '${value.toJsonAll()}')"
-    } // Fun updateJson()
-
+    }
 
-} // Class SMySqlDriver
+}

+ 85 - 85
persagy-kotlin-postgresql/src/main/kotlin/com/persagy/postgresql/SPostgreSqlDriver.kt

@@ -39,9 +39,9 @@ import org.apache.ibatis.jdbc.SQL
 import org.slf4j.LoggerFactory
 
 /**
- * PostgreSQL驱动
+ * PostgreSQL 驱动
  *
- * @author  庞利祥 <sybotan@126.com>
+ * @author 庞利祥 <sybotan@126.com>
  */
 class SPostgreSqlDriver : SAbstractDriver() {
 
@@ -49,13 +49,13 @@ class SPostgreSqlDriver : SAbstractDriver() {
     companion object {
         /** 日志记录器 */
         private val logger = LoggerFactory.getLogger(SPostgreSqlDriver::class.java)
-    } // companion object
+    }
 
     /**
      * 在数据库中插入实体
      *
-     * @param   argsMap         注入参数
-     * @return  插入SQL语句
+     * @param argsMap       注入参数
+     * @return 插入 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     override fun insert(argsMap: Map<String, Any?>): String {
@@ -88,14 +88,14 @@ class SPostgreSqlDriver : SAbstractDriver() {
         logger.debug("INSERT SQL= $sql")
 
         return sql
-    } // Fun insert()
+    } /
 
     /**
      * 在数据库中替换实体
      *
-     * @param   argsMap         注入参数
-     * @param   insertSql       插入SQL语句
-     * @return  替换SQL语句
+     * @param argsMap         注入参数
+     * @param insertSql       插入 SQL 语句
+     * @return 替换 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     override fun replace(argsMap: Map<String, Any?>, insertSql: String): String {
@@ -144,20 +144,20 @@ class SPostgreSqlDriver : SAbstractDriver() {
         sql = "$insertSql ON conflict ( $confict ) DO UPDATE SET $upSqlBuilder"
         logger.debug("REPLACE SQL= $sql")
         return sql
-    } // Fun replace()
+    }
 
     /**
      * 根据条件删除
      *
-     * @param   argsMap         注入参数
-     * @return  删除SQL语句
+     * @param argsMap         注入参数
+     * @return 删除 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     override fun delete(argsMap: Map<String, Any?>): String {
         val entityClass = argsMap["entityClass"] as Class<*>
-        // 从入参中获得过虑条件
+        /** 从入参中获得过虑条件 */
         val filterArgs = argsMap["filterArgs"] as List<SFilter>
-        // 转换后的where语句参数
+        /** 转换后的where语句参数 */
         val whereArgs = argsMap["whereArgs"] as HashMap<String, Any>
         val clause = buildWhereArgList(entityClass, filterArgs, whereArgs)
 
@@ -172,12 +172,13 @@ class SPostgreSqlDriver : SAbstractDriver() {
 
         logger.debug("SQL= $sql")
         return sql
-    } // Fun delete()
+    }
 
     /**
      * 删除所有记录
      *
-     * @return  删除SQL语句
+     * @param argsMap         注入参数
+     * @return 删除 SQL 语句
      */
     @Suppress("UNCHECKED_CAST")
     override fun deleteAll(argsMap: Map<String, Any?>): String {
@@ -190,13 +191,13 @@ class SPostgreSqlDriver : SAbstractDriver() {
 
         logger.debug("SQL= $sql")
         return sql
-    } // Fun deleteAll()
+    }
 
     /**
-     * 获得表名,取实体类@Table注解的名称,如果没有注解,则取实体类类名。
+     * 获得表名,取实体类 @Table 注解的名称,如果没有注解,则取实体类类名。
      *
-     * @param   clz         mapper类类型
-     * @return  表名
+     * @param clz         mapper 类类型
+     * @return 表名
      */
     override fun tableName(clz: Class<*>): String {
         val tableAnno = clz.getAnnotation(javax.persistence.Table::class.java)
@@ -204,24 +205,24 @@ class SPostgreSqlDriver : SAbstractDriver() {
         val tableName = tableAnno?.name ?: clz.simpleName
         val name = tableName.replace(".", "\".\"")
         return "\"$name\""
-    } // Fun tableName()
+    }
 
     /**
      * 将 name 加上引用符号
      *
-     * @param   name    名称
-     * @return  加上引用符号的名称
+     * @param name    名称
+     * @return 加上引用符号的名称
      */
     override fun escName(name: String): String {
         return "\"$name\""
-    } // Fun escName()
+    }
 
     /**
-     * 实体类的值,如果不是基本类型,则转换为json
+     * 实体类的值,如果不是基本类型,则转换为 json
      *
-     * @param   entity      实体类
-     * @param   name        名称
-     * @return  加上引用符号的名称
+     * @param entity      实体类
+     * @param name        名称
+     * @return 加上引用符号的名称
      */
     override fun entityValue(entity: HashMap<String, Any?>, name: String): String {
         val value = entity[name] ?: return "null"
@@ -229,14 +230,14 @@ class SPostgreSqlDriver : SAbstractDriver() {
             return "#{entity.$name}"
         }
         return "'${value.toJson()}'"
-    } // Fun entityValue()
+    }
 
     /**
-     * 生成limit语句
+     * 生成 limit 语句
      *
-     * @param   offset      偏移位置
-     * @param   count       取得的记录数
-     * @return  LIMIT子句
+     * @param offset      偏移位置
+     * @param count       取得的记录数
+     * @return LIMIT 子句
      */
     override fun limit(offset: Int?, count: Int?): String {
         if (count == null){
@@ -247,88 +248,88 @@ class SPostgreSqlDriver : SAbstractDriver() {
             return " OFFSET ${offset ?: 0} LIMIT ${count ?: 1}"
         }
 //        return " OFFSET ${offset ?: 0} LIMIT ${count ?: 1}"
-    } // Fun limit()
+    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // 函数
     /**
      * 处理函数支持
      *
-     * @param   func        函数对象
-     * @param   colName     字段名
-     * @return  生成的SQL语句
+     * @param func        函数对象
+     * @param colName     字段名
+     * @return 生成的 SQL 语句
      */
     override fun processFunction(func: SAbstractFunction, colName: String): String {
         func.colName = colName
         return func.toSql(SDatabaseType.PostgreSQL)
-    } // Fun processFunction()
+    }
 
 //----------------------------------------------------------------------------------------------------------------------
     /**
      * 转换where字句参数
      *
-     * @param   argName     参数名
-     * @param   argValue    参数值
-     * @param   ops         运算符
-     * @return  转换后的SQL
+     * @param argName     参数名
+     * @param argValue    参数值
+     * @param ops         运算符
+     * @return 转换后的 SQL
      */
     override fun whereArg(argName: String, argValue: String, ops: SOps): String {
 
         when (ops) {
-            SOps.EQ -> {     // 等于
+            SOps.EQ -> {     /** 等于 */
                 return "$argName = $argValue"
             }
-            SOps.NE -> {     // 不等于
+            SOps.NE -> {     /** 不等于 */
                 return "$argName <> $argValue"
             }
-            SOps.GT -> {     // 大于
+            SOps.GT -> {     /** 大于 */
                 return "$argName > $argValue"
             }
-            SOps.GTE -> {    // 大于等于
+            SOps.GTE -> {    /** 大于等于 */
                 return "$argName >= $argValue"
             }
-            SOps.LT -> {     // 小于
+            SOps.LT -> {     /** 小于 */
                 return "$argName < $argValue"
             }
-            SOps.LTE -> {    // 小于等行
+            SOps.LTE -> {    /** 小于等行 */
                 return "$argName <= $argValue"
             }
-            SOps.CONTAIN -> {    // 包含
+            SOps.CONTAIN -> {    /** 包含 */
                 return if (argName.indexOf("#") > 0) {
                     "($argName)::TEXT LIKE ('%' || $argValue || '%')"
                 } else {
                     "$argName LIKE ('%' || $argValue || '%')"
                 }
             }
-            SOps.STARTWITH -> {    // 以指定字符串开始
+            SOps.STARTWITH -> {    /** 以指定字符串开始 */
                 return if (argName.indexOf("#") > 0) {
                     "($argName)::TEXT LIKE ($argValue || '%')"
                 } else {
                     "$argName LIKE ($argValue || '%')"
                 }
             }
-            SOps.ENDWITH -> {    // 以指定字符串结束
+            SOps.ENDWITH -> {    /** 以指定字符串结束 */
                 return if (argName.indexOf("#") > 0) {
                     "($argName)::TEXT LIKE ('%' || $argValue)"
                 } else {
                     "$argName LIKE ('%' || $argValue)"
                 }
             }
-            SOps.ISNULL -> {     // 为空
+            SOps.ISNULL -> {     /** 为空 */
                 return "$argName ISNULL"
             }
             else -> {
             }
         }
         return ""
-    } // Fun whereArg()
+    }
 
     /**
-     * 转换参数名SQL语句
+     * 转换参数名 SQL 语句
      *
-     * @param   name        字段名
-     * @param   path        json路径。如果不是json对象,则该值为空
-     * @return  转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径。如果不是 json 对象,则该值为空
+     * @return 转换后的 SQL
      */
     override fun argName(name: String, path: String?): String {
         return if (path == null) {
@@ -337,14 +338,14 @@ class SPostgreSqlDriver : SAbstractDriver() {
             val p = path.replace(".", ",")
             "\"$name\"#>'{$p}'"
         }
-    } // Fun argName()
+    }
 
     /**
-     * 转换参数值SQL语句
+     * 转换参数值 SQL 语句
      *
-     * @param   argName     参数名
-     * @param   isJson      是否Json对象
-     * @return  转换后的SQL
+     * @param argName     参数名
+     * @param isJson      是否 Json 对象
+     * @return 转换后的 SQL
      */
     override fun argValue(argName: String, isJson: Boolean): String {
         return if (isJson) {
@@ -352,15 +353,15 @@ class SPostgreSqlDriver : SAbstractDriver() {
         } else {
             "#{whereArgs.$argName}"
         }
-    } // Fun argValue()
+    }
 
     /**
-     * 转换IN条件表达式
+     * 转换 IN 条件表达式
      *
-     * @param   name        字段名
-     * @param   path        json路径,如果字段不为json,则path为null
-     * @param   inArg       in操作参数
-     * @return  转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果字段不为 json,则 path  null
+     * @param inArg       in 操作参数
+     * @return 转换后的 SQL
      */
     override fun inArg(name: String, path: String?, inArg: String): String {
         return if (path == null) {
@@ -369,14 +370,14 @@ class SPostgreSqlDriver : SAbstractDriver() {
             val p = path.replace(".", ",")
             "\"$name\"#>'{$p}' IN ($inArg)"
         }
-    } // Fun inArg()
+    }
 
     /**
-     * 将名称及json路径转换为SQL
+     * 将名称及 json 路径转换为 SQL
      *
-     * @param   name        字段名
-     * @param   path        json路径,如果字段不为json,则path为null
-     * @return   转换后的SQL
+     * @param name        字段名
+     * @param path        json 路径,如果字段不为 json,则 path  null
+     * @return 转换后的 SQL
      */
     override fun columnName(name: String, path: String?): String {
         return if (path == null) {
@@ -388,11 +389,11 @@ class SPostgreSqlDriver : SAbstractDriver() {
     }
 
     /**
-     * 将参数值转换为SQL语句
+     * 将参数值转换为 SQL 语句
      *
-     * @param   value       值
-     * @param   isJson      值是否转换为json格式
-     * @return  转换后的SQL
+     * @param value       值
+     * @param isJson      值是否转换为 json 格式
+     * @return 转换后的 SQL
      */
     override fun argValueToJson(value: String, isJson: Boolean): String {
         return if (isJson) {
@@ -400,18 +401,17 @@ class SPostgreSqlDriver : SAbstractDriver() {
         } else {
             value
         }
-    } // Fun argValueToJson()
+    }
 
     /**
-     * 更新Json类型字段
+     * 更新 Json 类型字段
      *
-     * @param   name        字段名
-     * @param   value       值
-     * @return  更新SQL字符串
+     * @param name        字段名
+     * @param value       值
+     * @return 更新 SQL 字符串
      */
     override fun updateJson(name: String, value: Any): String {
         return "COALESCE(\"$name\", '{}') || '${value.toJsonAll().replace("'", "''")}'"
-    } // Fun updateJson()
-
+    }
 
-} // Class SMySqlDriver
+}