Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit 9c7f7c6

Browse files
authored
Merge pull request #13 from k163377/feature
Improved memory usage efficiency and update libraries.
2 parents f5c5fac + 81f2e74 commit 9c7f7c6

File tree

5 files changed

+61
-50
lines changed

5 files changed

+61
-50
lines changed

.idea/KRowMapper.iml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/compiler.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.gradle.kts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
plugins {
22
id("maven")
33
id("java")
4-
id("org.jetbrains.kotlin.jvm") version "1.3.71"
4+
id("org.jetbrains.kotlin.jvm") version "1.3.72"
55
id("org.jlleitschuh.gradle.ktlint") version "9.2.1"
66
}
77

88
group = "com.mapk"
9-
version = "0.8"
9+
version = "0.9"
1010

1111
java {
1212
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -18,7 +18,7 @@ buildscript {
1818
}
1919

2020
dependencies {
21-
classpath(kotlin("gradle-plugin", version = "1.3.71"))
21+
classpath(kotlin("gradle-plugin"))
2222
}
2323
}
2424

@@ -30,7 +30,7 @@ repositories {
3030
dependencies {
3131
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
3232
implementation(kotlin("reflect"))
33-
api("com.github.ProjectMapK:Shared:0.10")
33+
api("com.github.ProjectMapK:Shared:0.11")
3434
// 使うのはRowMapperのみなため他はexclude、またバージョンそのものは使う相手に合わせるためcompileOnly
3535
compileOnly(group = "org.springframework", name = "spring-jdbc", version = "5.2.4.RELEASE") {
3636
exclude(module = "spring-beans")
@@ -39,7 +39,7 @@ dependencies {
3939
}
4040

4141
// https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter
42-
testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.1") {
42+
testImplementation(group = "org.junit.jupiter", name = "junit-jupiter", version = "5.6.2") {
4343
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
4444
}
4545
// https://mvnrepository.com/artifact/io.mockk/mockk

src/main/kotlin/com/mapk/krowmapper/ParameterForMap.kt

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,55 +19,64 @@ import kotlin.reflect.full.staticFunctions
1919
import kotlin.reflect.jvm.isAccessible
2020
import kotlin.reflect.jvm.jvmName
2121

22-
internal class ParameterForMap private constructor(
23-
val param: KParameter,
24-
name: String,
25-
parameterKClazz: KClass<*>
26-
) {
27-
private val objectGetter: (ResultSet) -> Any?
28-
29-
init {
30-
val deserializerFromParameter = param.getDeserializer()
31-
if (deserializerFromParameter != null) {
32-
val deserialize = deserializerFromParameter::deserialize
33-
34-
objectGetter = {
35-
deserialize.call(it.getObject(name, deserializerFromParameter.srcClass))
36-
}
37-
} else {
38-
val deserializer = parameterKClazz.getDeserializer()
39-
40-
if (deserializer != null) {
41-
val targetClass = deserializer.parameters.single().type.classifier as KClass<*>
22+
internal sealed class ParameterForMap {
23+
abstract val param: KParameter
24+
abstract val name: String
25+
abstract val clazz: Class<*>
26+
abstract fun getObject(rs: ResultSet): Any?
27+
28+
private class Plain(
29+
override val param: KParameter,
30+
override val name: String,
31+
override val clazz: Class<*>
32+
) : ParameterForMap() {
33+
override fun getObject(rs: ResultSet): Any? = rs.getObject(name, clazz)
34+
}
4235

43-
objectGetter = {
44-
deserializer.call(it.getObject(name, targetClass.javaObjectType))
45-
}
46-
} else {
47-
val clazz = parameterKClazz.javaObjectType
48-
49-
objectGetter = if (clazz.isEnum) {
50-
{
51-
EnumMapper.getEnum(clazz, it.getString(name))
52-
}
53-
} else {
54-
{
55-
it.getObject(name, clazz)
56-
}
57-
}
58-
}
59-
}
36+
private class Enum(
37+
override val param: KParameter,
38+
override val name: String,
39+
override val clazz: Class<*>
40+
) : ParameterForMap() {
41+
override fun getObject(rs: ResultSet): Any? = EnumMapper.getEnum(clazz, rs.getString(name))
6042
}
6143

62-
fun getObject(rs: ResultSet): Any? = objectGetter(rs)
44+
private class Deserializer(
45+
override val param: KParameter,
46+
override val name: String,
47+
override val clazz: Class<*>,
48+
private val deserializer: KFunction<*>
49+
) : ParameterForMap() {
50+
constructor(
51+
param: KParameter,
52+
name: String,
53+
deserializer: AbstractKColumnDeserializer<*, *, *>
54+
) : this(param, name, deserializer.srcClass, deserializer::deserialize)
55+
56+
override fun getObject(rs: ResultSet): Any? = deserializer.call(rs.getObject(name, clazz))
57+
}
6358

6459
companion object {
6560
fun newInstance(param: KParameter, parameterNameConverter: (String) -> String): ParameterForMap {
66-
return ParameterForMap(
67-
param,
68-
parameterNameConverter(param.getAliasOrName()!!),
69-
param.type.classifier as KClass<*>
70-
)
61+
val name = parameterNameConverter(param.getAliasOrName()!!)
62+
63+
param.getDeserializer()?.let {
64+
return Deserializer(param, name, it)
65+
}
66+
67+
val parameterKClazz = param.type.classifier as KClass<*>
68+
69+
parameterKClazz.getDeserializer()?.let {
70+
val targetClass = (it.parameters.single().type.classifier as KClass<*>).javaObjectType
71+
return Deserializer(param, name, targetClass, it)
72+
}
73+
74+
return parameterKClazz.javaObjectType.let {
75+
when (it.isEnum) {
76+
true -> Enum(param, name, it)
77+
false -> Plain(param, name, it)
78+
}
79+
}
7180
}
7281
}
7382
}

0 commit comments

Comments
 (0)