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

Commit 460831b

Browse files
committed
基本の呼び出し処理を実装
1 parent f0fdfaa commit 460831b

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed
Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
package com.mapk.krowmapper
22

3-
import com.mapk.annotations.KPropertyAlias
3+
import com.mapk.core.EnumMapper
44
import com.mapk.core.KFunctionForCall
55
import java.sql.ResultSet
66
import kotlin.reflect.KParameter
7-
import kotlin.reflect.full.findAnnotation
87
import org.springframework.jdbc.core.RowMapper
98

109
class KRowMapper<T>(
1110
private val function: KFunctionForCall<T>,
1211
propertyNameConverter: (String) -> String = { it }
1312
) : RowMapper<T> {
14-
private val parameterMap: Map<String, KParameter> = function.parameters
13+
private val parameters: List<ParameterForMap<*>> = function.parameters
1514
.filter { it.kind != KParameter.Kind.INSTANCE }
16-
.associateBy { (it.findAnnotation<KPropertyAlias>()?.value ?: propertyNameConverter(it.name!!)) }
15+
.map { ParameterForMap.newInstance(it, propertyNameConverter) }
1716

18-
override fun mapRow(rs: ResultSet?, rowNum: Int): T {
17+
override fun mapRow(rs: ResultSet, rowNum: Int): T {
1918
val argumentBucket = function.getArgumentBucket()
2019

21-
/* TODO: 実装 */
20+
parameters.forEach { param ->
21+
argumentBucket.setArgument(when {
22+
param.clazz.isEnum -> EnumMapper.getEnum(param.clazz, rs.getObject(param.name, stringClazz))
23+
else -> rs.getObject(param.name, param.clazz)
24+
}, param.index)
25+
}
2226

2327
return function.call(argumentBucket)
2428
}
29+
30+
companion object {
31+
private val stringClazz = String::class.java
32+
}
2533
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,18 @@
11
package com.mapk.krowmapper
22

3+
import com.mapk.annotations.KPropertyAlias
4+
import kotlin.reflect.KParameter
5+
import kotlin.reflect.full.findAnnotation
6+
7+
class ParameterForMap<T : Any> private constructor(
8+
val name: String,
9+
val index: Int,
10+
val clazz: Class<T>
11+
) {
12+
companion object {
13+
fun newInstance(param: KParameter, propertyNameConverter: (String) -> String = { it }): ParameterForMap<*> {
14+
val name: String = (param.findAnnotation<KPropertyAlias>()?.value ?: propertyNameConverter(param.name!!))
15+
return ParameterForMap(name, param.index, param.type.javaClass)
16+
}
17+
}
18+
}

0 commit comments

Comments
 (0)