|
@@ -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
|
|
|
+ }
|
|
|
+}
|