• Spring JdbcTemplate.queryForMap()


    在本文中,我们将学习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。
     

    使用Spring Boot的示例

    PersonDAO.java

    1. package com.concretepage;
    2. import java.util.Map;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.jdbc.core.JdbcTemplate;
    5. import org.springframework.stereotype.Repository;
    6. @Repository
    7. public class PersonDAO {
    8. @Autowired
    9. private JdbcTemplate jdbcTemplate;
    10. // queryForMap(String sql)
    11. public long getPersonCount() {
    12. String sql = "select count(*) as cnt from person";
    13. Map map = jdbcTemplate.queryForMap(sql);
    14. return (Long) map.get("cnt");
    15. }
    16. // queryForMap(String sql, Object... args)
    17. public long getPersonCountByNameAndAge(String name, int age) {
    18. String sql = "select count(*) as cnt from person where name = ? and age = ?";
    19. Map map = jdbcTemplate.queryForMap(sql, name, age);
    20. return (Long) map.get("cnt");
    21. }
    22. // queryForMap(String sql, Object[] args, int[] argTypes)
    23. public Person getPersonsById(int id) {
    24. String sql = "select * from person where id = ?";
    25. Object[] args = {id};
    26. int[] argTypes = {java.sql.Types.INTEGER};
    27. Map map = jdbcTemplate.queryForMap(sql, args, argTypes);
    28. Person p = new Person((String) map.get("name"), (Integer) map.get("age"));
    29. p.setId((Integer) map.get("id"));
    30. return p;
    31. }
    32. }

    Person.java

    1. package com.concretepage;
    2. public class Person {
    3. private int id;
    4. private String name;
    5. private int age;
    6. public Person(String name, int age) {
    7. this.name = name;
    8. this.age = age;
    9. }
    10. public int getId() {
    11. return id;
    12. }
    13. public void setId(int id) {
    14. this.id = id;
    15. }
    16. public String getName() {
    17. return name;
    18. }
    19. public int getAge() {
    20. return age;
    21. }
    22. }

    application.properties

    1. spring.datasource.url=jdbc:mysql://localhost:3306/concretepage?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    2. spring.datasource.username=root
    3. spring.datasource.password=root
    4. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

    pom.xml

    1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    3. 4.0.0
    4. com.concretepage
    5. soap-ws
    6. 0.0.1-SNAPSHOT
    7. jar
    8. spring-demo
    9. Spring Demo Application
    10. org.springframework.boot
    11. spring-boot-starter-parent
    12. 2.7.4
    13. 17
    14. org.springframework.boot
    15. spring-boot-starter
    16. org.springframework.boot
    17. spring-boot-starter-jdbc
    18. mysql
    19. mysql-connector-java
    20. 8.0.30
    21. org.springframework.boot
    22. spring-boot-maven-plugin

    MyApplication.java

    1. package com.concretepage;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.context.ApplicationContext;
    5. @SpringBootApplication
    6. public class MyApplication {
    7. public static void main(String[] args) {
    8. ApplicationContext ctx = SpringApplication.run(MyApplication.class, args);
    9. PersonDAO personDAO = ctx.getBean(PersonDAO.class);
    10. System.out.println("Total Count: " + personDAO.getPersonCount());
    11. System.out.println("Count: " + personDAO.getPersonCountByNameAndAge("Mohan", 25));
    12. Person p = personDAO.getPersonsById(1);
    13. System.out.println(p.getId() + " - " + p.getName() + " - " + p.getAge());
    14. }
    15. }

    查找我们的演示中使用的 MySQL 表(人)屏幕截图。

    输出。

    1. Total Count: 3
    2. Count: 2
    3. 1 - Rakesh - 30

    参考

    类 Jdbc 模板

    下载源代码

     

  • 相关阅读:
    安装elasticsearch8.0.1之后无法访问9200Empty reply from server
    通信网络从4G升级到5G,核心网融合至关重要
    二战字节跳动成功上岸,准备了小半年,拿27k也算不上很高吧~
    【后端】python2和python3的语法差异
    电脑提速方法:虚拟内存使用固态硬盘
    解析:WMS仓库管理系统是什么,可以提供什么协助
    物联网?快来看 Arduino 上云啦
    va_list 、va_start、va_arg 和 va_end的含义和用法
    仪器仪表制造业采购数字化方案:集中采购系统为供采双方打造更高效运转平台
    mysql 时间字段默认设置为当前时间
  • 原文地址:https://blog.csdn.net/allway2/article/details/127603204