From e6fc970b25d27a309d965c8f7dd3f97398b24b83 Mon Sep 17 00:00:00 2001 From: tursom Date: Tue, 11 Aug 2020 00:50:29 +0800 Subject: [PATCH] add TypeAdapter --- .../main/kotlin/cn/tursom/database/Table.kt | 47 +------------------ .../cn/tursom/database/TypeAdapterFactory.kt | 18 ++++++- 2 files changed, 18 insertions(+), 47 deletions(-) diff --git a/database/src/main/kotlin/cn/tursom/database/Table.kt b/database/src/main/kotlin/cn/tursom/database/Table.kt index 13b01e3..0245fb6 100644 --- a/database/src/main/kotlin/cn/tursom/database/Table.kt +++ b/database/src/main/kotlin/cn/tursom/database/Table.kt @@ -1,26 +1,15 @@ package cn.tursom.database import cn.tursom.core.cast -import cn.tursom.database.annotations.Json import cn.tursom.utils.clone.Property import cn.tursom.utils.clone.inject import cn.tursom.utils.clone.instance import me.liuwj.ktorm.dsl.QueryRowSet import me.liuwj.ktorm.schema.BaseTable -import me.liuwj.ktorm.schema.EnumSqlType -import java.math.BigDecimal -import java.sql.Date -import java.sql.Time -import java.sql.Timestamp -import java.time.* -import java.util.* import kotlin.reflect.KClass import kotlin.reflect.KProperty import kotlin.reflect.KProperty1 -import kotlin.reflect.full.findAnnotation -import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.memberProperties -import kotlin.reflect.jvm.jvmErasure open class Table( entityClass: KClass, @@ -28,45 +17,12 @@ open class Table( alias: String? = null, val unsafe: Boolean = true ) : BaseTable(tableName, alias, entityClass) { - private enum class EnumType - private val fieldMap: Map> init { fieldMap = entityClass.memberProperties.associateBy { SqlUtils { it.tableField } } entityClass.memberProperties.forEach { - when (val kClass = it.returnType.jvmErasure) { - Boolean::class -> boolean(it.cast()) - //Byte::class->registerColumn(SqlUtils { it.tableField }, ByteSqlType) - //Short::class->registerColumn(SqlUtils { it.tableField }, ShortSqlType) - Int::class -> int(it.cast()) - Long::class -> long(it.cast()) - Float::class -> float(it.cast()) - Double::class -> double(it.cast()) - BigDecimal::class -> decimal(it.cast()) - String::class -> varchar(it.cast()) - ByteArray::class -> bytes(it.cast()) - Timestamp::class -> jdbcTimestamp(it.cast()) - Date::class -> jdbcDate(it.cast()) - Time::class -> jdbcTime(it.cast()) - Instant::class -> timestamp(it.cast()) - LocalDateTime::class -> datetime(it.cast()) - LocalDate::class -> date(it.cast()) - LocalTime::class -> time(it.cast()) - MonthDay::class -> monthDay(it.cast()) - YearMonth::class -> yearMonth(it.cast()) - Year::class -> year(it.cast()) - UUID::class -> uuid(it.cast()) - else -> { - if (kClass.isSubclassOf(Enum::class)) { - registerColumn(SqlUtils { it.tableField }, EnumSqlType(kClass.java.cast())) - } else { - if (it.findAnnotation() != null) { - json(it.cast()) - } - } - } - } + TypeAdapterFactory.register(this, it) } } @@ -81,4 +37,3 @@ open class Table( operator fun get(property: KProperty1) = this[SqlUtils { property.tableField }] } - diff --git a/database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt b/database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt index 4c0c73b..1bae34d 100644 --- a/database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt +++ b/database/src/main/kotlin/cn/tursom/database/TypeAdapterFactory.kt @@ -2,8 +2,11 @@ package cn.tursom.database import cn.tursom.core.cast import cn.tursom.core.getClassByPackage +import me.liuwj.ktorm.schema.BaseTable +import me.liuwj.ktorm.schema.Column import java.util.concurrent.ConcurrentLinkedQueue import java.util.concurrent.ConcurrentSkipListMap +import kotlin.reflect.KProperty1 import kotlin.reflect.full.createInstance import kotlin.reflect.full.isSubclassOf @@ -41,5 +44,18 @@ object TypeAdapterFactory { getAdapterQueue(adapter.level).add(adapter) } - + fun register( + table: BaseTable<*>, + field: KProperty1<*, *> + ): Column<*>? { + adapterMap.forEach { (_, queue) -> + queue.forEach { + val column = it.register(table.cast(), field.cast()) + if (column != null) { + return column + } + } + } + return null + } } \ No newline at end of file