How to select just a string value using NamedJdbcTemplate

Viewed 227

There is a table

employees
id    name
1     Alex
2     Mike

And how to write a query that returns a string value using NamedJdbcTemplate

fun getPersonNameById(id: Int): String =
   // jdbcTemplate.guery("select name from employees as e where e.id = :id,
2 Answers

I solved it like this - but with the jdbcTemplate. The routine can handle several rows and also can manage an empty result set.

     @Autowired
     lateinit var jdbcTemplate: JdbcTemplate

     val empRowMapper: RowMapper<Employee> = RowMapper { rs, _ ->        
                                            Employee(rs.getInt("id"), rs.getString("name")) }                                                                             
                                                             
                                                             

     fun findEmployeeById(empNumber: Int): Employee? {
         val employees = jdbcTemplate.query<Employee>("""  select id
                                                                , name
                                                             from employees 
                                                            where id = :empNumber
                                                      """, empRowMapper, empNumber)

         return employees.firstOrNull()
    }

The data class:

   data class Employee(val employeeNumber: Int, val name: String)

Even if you only need a string, I would use objects. With objects, the code is much easier to extend. And with Kotlin, that's not a big problem either.

While your own answer solves your problem, the one asked in the question can be solved even simpler.

@Autowired
lateinit var jdbcTemplate: JdbcTemplate

fun findEmployeeById(empNumber: Int): String? {
    return jdbcTemplate.queryForObject("select name from employees where id = ?", String::class.java, empNumber)
}
Related