Skip to content

Commit ce7a3e3

Browse files
authored
Merge pull request mybatis#479 from jeffgbutler/kotlin-improvements
Add Kotlin utility functions for Spring RowMapper SAM conversions
2 parents 04dd80f + 37e8e8c commit ce7a3e3

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/spring/NamedParameterJdbcTemplateExtensions.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import org.mybatis.dynamic.sql.util.kotlin.MyBatisDslMarker
3737
import org.mybatis.dynamic.sql.util.kotlin.SelectCompleter
3838
import org.mybatis.dynamic.sql.util.kotlin.UpdateCompleter
3939
import org.springframework.dao.EmptyResultDataAccessException
40+
import org.springframework.jdbc.core.RowMapper
4041
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource
4142
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource
4243
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
@@ -193,6 +194,11 @@ fun NamedParameterJdbcTemplate.selectDistinct(
193194
fun <T> NamedParameterJdbcTemplate.selectList(
194195
selectStatement: SelectStatementProvider,
195196
rowMapper: (rs: ResultSet, rowNum: Int) -> T
197+
): List<T> = selectList(selectStatement, RowMapper(rowMapper))
198+
199+
fun <T> NamedParameterJdbcTemplate.selectList(
200+
selectStatement: SelectStatementProvider,
201+
rowMapper: RowMapper<T>
196202
): List<T> =
197203
query(selectStatement.selectStatement, selectStatement.parameters, rowMapper)
198204

@@ -217,10 +223,15 @@ fun NamedParameterJdbcTemplate.selectOne(
217223
this
218224
)
219225

220-
@SuppressWarnings("SwallowedException")
221226
fun <T> NamedParameterJdbcTemplate.selectOne(
222227
selectStatement: SelectStatementProvider,
223228
rowMapper: (rs: ResultSet, rowNum: Int) -> T
229+
): T? = selectOne(selectStatement, RowMapper(rowMapper))
230+
231+
@SuppressWarnings("SwallowedException")
232+
fun <T> NamedParameterJdbcTemplate.selectOne(
233+
selectStatement: SelectStatementProvider,
234+
rowMapper: RowMapper<T>
224235
): T? = try {
225236
queryForObject(selectStatement.selectStatement, selectStatement.parameters, rowMapper)
226237
} catch (e: EmptyResultDataAccessException) {
@@ -251,6 +262,9 @@ class SelectListMapperGatherer(
251262
) {
252263
fun <T> withRowMapper(rowMapper: (rs: ResultSet, rowNum: Int) -> T): List<T> =
253264
template.selectList(selectStatement, rowMapper)
265+
266+
fun <T> withRowMapper(rowMapper: RowMapper<T>): List<T> =
267+
template.selectList(selectStatement, rowMapper)
254268
}
255269

256270
@MyBatisDslMarker
@@ -260,6 +274,9 @@ class SelectOneMapperGatherer(
260274
) {
261275
fun <T> withRowMapper(rowMapper: (rs: ResultSet, rowNum: Int) -> T): T? =
262276
template.selectOne(selectStatement, rowMapper)
277+
278+
fun <T> withRowMapper(rowMapper: RowMapper<T>): T? =
279+
template.selectOne(selectStatement, rowMapper)
263280
}
264281

265282
@MyBatisDslMarker

src/test/kotlin/examples/kotlin/spring/canonical/CanonicalSpringKotlinTemplateDirectTest.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -621,12 +621,10 @@ open class CanonicalSpringKotlinTemplateDirectTest {
621621

622622
@Test
623623
fun testAutoMapping() {
624-
val rm = DataClassRowMapper.newInstance(AddressRecord::class.java)
625-
626624
val rows = template.select(address.id.`as`("id"), address.streetAddress, address.city, address.state) {
627625
from(address)
628626
orderBy(address.id)
629-
}.withRowMapper(rm::mapRow)
627+
}.withRowMapper(DataClassRowMapper(AddressRecord::class.java))
630628

631629
assertThat(rows).hasSize(2)
632630
with(rows[0]) {
@@ -637,6 +635,23 @@ open class CanonicalSpringKotlinTemplateDirectTest {
637635
}
638636
}
639637

638+
@Test
639+
fun testAutoMappingOneRow() {
640+
val row = template.selectOne(address.id.`as`("id"), address.streetAddress, address.city, address.state) {
641+
from(address)
642+
where { address.id isEqualTo 1 }
643+
orderBy(address.id)
644+
}.withRowMapper(DataClassRowMapper(AddressRecord::class.java))
645+
646+
assertThat(row).isNotNull
647+
with(row!!) {
648+
assertThat(id).isEqualTo(1)
649+
assertThat(streetAddress).isEqualTo("123 Main Street")
650+
assertThat(city).isEqualTo("Bedrock")
651+
assertThat(state).isEqualTo("IN")
652+
}
653+
}
654+
640655
@Test
641656
fun testSelectWithJoin() {
642657
val rows = template.select(

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy