Spring JdbcTemplate.queryForObject()
July 25, 2022
Spring JdbcTemplate
is the central class in the JDBC core package. It simplifies the use of JDBC with Spring and helps to avoid common errors. On this page we will learn using its queryForObject
method.
Find the
JdbcTemplate.queryForObject
method with different arguments.
1.
<T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException
2.
<T> T queryForObject(String sql, Class<T> requiredType, @Nullable Object... args) throws DataAccessException
3.
<T> T queryForObject(String sql, Object[] args, int[] argTypes, Class<T> requiredType) throws DataAccessException
4.
<T> T queryForObject(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) throws DataAccessException
RowMapper
.
5.
<T> T queryForObject(String sql, RowMapper<T> rowMapper) throws DataAccessException
RowMapper
.
6.
<T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException
RowMapper
.
Parameters: The sql is the the SQL query to execute.
The requiredType is the type that the result object is expected to match.
The args is the arguments to bind to the query.
The argTypes is the SQL types of the arguments from
java.sql.Types
.
The rowMapper is a callback that will map one object per row
Returns:
The result object, or null in case of SQL NULL.
Throws:
If there is any problem executing the query, method throws
DataAccessException
.
Example using Spring Boot
PersonDAO.javapackage com.concretepage; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; @Repository public class PersonDAO { @Autowired private JdbcTemplate jdbcTemplate; // queryForObject(String sql, Class<T> requiredType) public int getPersonCount() { String sql = "select count(*) from person"; return jdbcTemplate.queryForObject(sql, Integer.class); } // queryForObject(String sql, Class<T> requiredType, Object... args) public String getNameById(int id) { String sql = "select name from person where id = ?"; return jdbcTemplate.queryForObject(sql, String.class, 1); } // queryForObject(String sql, Object[] args, int[] argTypes, Class<T> requiredType) public int getPersonCountByNameAndAge(String name, int age) { String sql = "select count(*) from person where name = ? and age = ?"; Object[] args = { name, age }; int[] argTypes = { java.sql.Types.CHAR, java.sql.Types.INTEGER }; return jdbcTemplate.queryForObject(sql, args, argTypes, Integer.class); } // queryForObject(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) public Person getPersonsById(int id) { String sql = "select * from person where id = ?"; Object[] args = { id }; int[] argTypes = { java.sql.Types.INTEGER }; return jdbcTemplate.queryForObject(sql, args, argTypes, new RowMapper<Person>() { @Override public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person p = new Person(rs.getString(2), rs.getInt(3)); p.setId(rs.getInt(1)); return p; } }); } // queryForObject(String sql, RowMapper<T> rowMapper) public Person getAdmin() { String sql = "select * from person where id = 1"; return jdbcTemplate.queryForObject(sql, new RowMapper<Person>() { @Override public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person p = new Person(rs.getString(2), rs.getInt(3)); p.setId(rs.getInt(1)); return p; } }); } // queryForObject(String sql, RowMapper<T> rowMapper, Object... args) public int getPersonCount2(String name, int age) { String sql = "select count(*) from person where name = ? and age = ?"; return jdbcTemplate.queryForObject(sql, new RowMapper<Integer>() { @Override public Integer mapRow(ResultSet rs, int rowNum) throws SQLException { return rs.getInt(1); } }, name, age); } }
package com.concretepage; public class Person { private int id; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public int getAge() { return age; } }
spring.datasource.url=jdbc:mysql://localhost:3306/concretepage spring.datasource.username=root spring.datasource.password=cp spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.5</version> </dependency> </dependencies>
package com.concretepage; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; @SpringBootApplication public class MyApplication { public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(MyApplication.class, args); PersonDAO personDAO = ctx.getBean(PersonDAO.class); System.out.println("Total Count: " + personDAO.getPersonCount()); System.out.println(personDAO.getNameById(1)); System.out.println("Count: " + personDAO.getPersonCountByNameAndAge("Mohan", 25)); Person p = personDAO.getPersonsById(1); System.out.println(p.getId() + " - " + p.getName() + " - " + p.getAge()); Person admin = personDAO.getAdmin(); System.out.println(admin.getId() + " - " + admin.getName() + " - " + admin.getAge()); System.out.println("Count: " + personDAO.getPersonCount2("Mohan", 25)); } }
Total Count: 3 Rakesh Count: 2 1 - Rakesh - 30 1 - Rakesh - 30 Count: 2