在本文中,我们将学习JdbcTemplate.queryForMap使用方法。它执行给定的SQL,将查询与给定的参数绑定。查询应为单行查询。此方法返回结果为Map。
JdbcTemplate.queryForMap期望参数如下。
Map queryForMap(String sql) throws DataAccessException
执行静态 SQL 并返回Map。
此方法使用 JDBC Statement,而不是 PreparedStatement。查询应为单行查询。
结果将映射到 Map。列名是Map的键和列值是该Map键的值。
Map queryForMap(String sql, @Nullable Object... args) throws DataAccessException
将给定的 SQL 作为PreparedStatement语句进行查询,并将 SQL 与给定的参数列表绑定。查询应为单行查询。结果将映射到Map。
Map queryForMap(String sql, Object[] args, int[] argTypes) throws DataAccessException
将给定的 SQL 作为预准备语句进行查询,并将 SQL 与给定的参数列表绑定。查询应为单行查询。结果将映射到 Map。
参数:
sql是要执行的 SQL 查询。
args 是要绑定到查询的参数。
argType是参数的SQL类型,即java.sql.Types
返回:
返回结果Map (每列一个条目,列名作为键,列值作为该键的映射值)。
抛出:
如果查询没有只返回一行,则会抛出IncorrectResultSizeDataAccessException。
PersonDAO.java
- package com.concretepage;
-
- import java.util.Map;
-
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.stereotype.Repository;
-
- @Repository
- public class PersonDAO {
-
- @Autowired
- private JdbcTemplate jdbcTemplate;
-
- // queryForMap(String sql)
- public long getPersonCount() {
- String sql = "select count(*) as cnt from person";
- Map
map = jdbcTemplate.queryForMap(sql); - return (Long) map.get("cnt");
- }
-
- // queryForMap(String sql, Object... args)
- public long getPersonCountByNameAndAge(String name, int age) {
- String sql = "select count(*) as cnt from person where name = ? and age = ?";
- Map
map = jdbcTemplate.queryForMap(sql, name, age); - return (Long) map.get("cnt");
- }
-
- // queryForMap(String sql, Object[] args, int[] argTypes)
- public Person getPersonsById(int id) {
- String sql = "select * from person where id = ?";
- Object[] args = {id};
- int[] argTypes = {java.sql.Types.INTEGER};
- Map
map = jdbcTemplate.queryForMap(sql, args, argTypes); - Person p = new Person((String) map.get("name"), (Integer) map.get("age"));
- p.setId((Integer) map.get("id"));
- return p;
- }
- }
Person.java
- 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;
- }
- }
application.properties
- spring.datasource.url=jdbc:mysql://localhost:3306/concretepage?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
pom.xml
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
4.0.0 -
com.concretepage -
soap-ws -
0.0.1-SNAPSHOT -
jar -
spring-demo -
Spring Demo Application -
-
org.springframework.boot -
spring-boot-starter-parent -
2.7.4 -
-
-
-
17 -
-
-
-
org.springframework.boot -
spring-boot-starter -
-
-
org.springframework.boot -
spring-boot-starter-jdbc -
-
-
mysql -
mysql-connector-java -
8.0.30 -
-
-
-
-
-
org.springframework.boot -
spring-boot-maven-plugin -
-
-
MyApplication.java
- 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("Count: " + personDAO.getPersonCountByNameAndAge("Mohan", 25));
- Person p = personDAO.getPersonsById(1);
- System.out.println(p.getId() + " - " + p.getName() + " - " + p.getAge());
- }
- }
查找我们的演示中使用的 MySQL 表(人)屏幕截图。

输出。
- Total Count: 3
- Count: 2
- 1 - Rakesh - 30
参考
下载源代码