Spring JdbcTemplate.queryForObject()

这篇具有很好参考价值的文章主要介绍了Spring JdbcTemplate.queryForObject()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring JdbcTemplate 是JDBC核心包中的中心类。它简化了 JDBC 与 Spring 的使用,并有助于避免常见错误。在此页面上,我们将学习使用queryForObject 方法。
JdbcTemplate.queryForObject不同参数的方法。
1. 

<T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException 

执行给定的 SQL 并返回所需类型的对象。
2.

<T> T queryForObject(String sql, Class<T> requiredType, @Nullable Object... args) throws DataAccessException 

查询给定的 SQL 以从 SQL 创建预准备语句和要绑定到查询的参数列表,需要一个结果对象。
3.

<T> T queryForObject(String sql, Object[] args, int[] argTypes, Class<T> requiredType) throws DataAccessException 

查询给定的 SQL 以从 SQL 创建预准备语句和要绑定到查询的参数列表,需要一个结果对象。
4.

<T> T queryForObject(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) throws DataAccessException 

查询给定的 SQL,用于从 SQL 创建预准备语句和要绑定到查询的参数列表,通过 RowMapper将单个结果行映射到结果对象

5.

<T> T queryForObject(String sql, RowMapper<T> rowMapper) throws DataAccessException 

执行给定静态 SQL 的查询,通过RowMapper将单个结果行映射到结果对象

6.

<T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException 

查询给定 SQL 以从 SQL 创建预准备语句和要绑定到查询的参数列表,通过RowMapper将单个结果行映射到结果对象

参数:

sql是要执行的 SQL 查询。
requiredType 是结果对象应匹配的类型。
args 是要绑定到查询的参数
argType是参数的 SQL 类型java.sql.Types。
rowMapper是一个回调,它将每行映射一个对象

返回:
结果对象,如果是 SQL NULL,则为 null。

抛出:
如果执行查询时遇到任何问题,则抛出DataAccessException。
 

使用Spring Boot的示例

PersonDAO.java

package 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&lt;T&gt; requiredType)
    public int getPersonCount() {
        String sql = "select count(*) from person";
        return jdbcTemplate.queryForObject(sql, Integer.class);
    }

    // queryForObject(String sql, Class&lt;T&gt; 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&lt;T&gt; 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&lt;T&gt; 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&lt;T&gt; 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&lt;T&gt; 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);
    }
}

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

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.concretepage</groupId>
    <artifactId>soap-ws</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>spring-demo</name>
    <description>Spring Demo Application</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.4</version>
        <relativePath />
    </parent>
    <properties>
        <java.version>16</java.version>
    </properties>
    <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>8.0.30</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

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(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));
    }
}

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

jdbctemplate.queryforobject,spring,java,后端

输出。

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

参考

类 Jdbc 模板

下载源代码

spring-jdbctemplate-queryforobject.zip

 文章来源地址https://www.toymoban.com/news/detail-651411.html

到了这里,关于Spring JdbcTemplate.queryForObject()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring:JDBCTemplate

    JDBC(Java DataBase Connectivity,Java 数据库连接) , 一 种用于执行 SQL 语句的 Java API(Application Programming Interface , 应用程序设计接口 ),可以为多种关系数据库提供统一访问,由一组用 Java 语言编写的类和接口组成。 JDBCTemplate ,是一个 JDBC 的模板,Spring 封装了 JDBC 常用的操作

    2024年02月14日
    浏览(32)
  • Spring-JDBCTemplate

    一、引子 我们在JavaWeb阶段向读者介绍过JDBC(请回顾JDBC基本概念),由于JDBC使用上的繁琐,又介绍了MyBatis的使用(请回顾MyBatis基本概念)。现在又写一篇文章用来介绍JDBCTemplate,似乎是翻来覆去讲一些重复的东西。实则不然,虽然只了解一门技术便可完成需求的实现,但是

    2024年02月22日
    浏览(29)
  • Spring JdbcTemplate.queryForList()

    在本文中,我们将学习使用 JdbcTemplate.queryForList()  方法。queryForList()方法执行给定的 SQL 并返回结果 List  对象。 queryForList()方法通过以下方式接受参数。 1.   执行给定的静态查询并返回一个列表。它使用 JDBC Statement语句,而不是 PreparedStatement。结果列表包含映射。一个映射

    2024年02月02日
    浏览(33)
  • 13、Spring之JdbcTemplate

    ++++++++++++++++++++++++++++++分割线++++++++++++++++++++++++++++++ JdbcTemplate的增删改都是用update这个方法 ++++++++++++++++++++++++++++++分割线++++++++++++++++++++++++++++++

    2024年02月11日
    浏览(32)
  • Spring6 JdbcTemplate和事务

    1.1、简介 Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作 1.2、准备工作 ①搭建子模块 搭建子模块:spring-jdbc-tx ②加入依赖 ③创建jdbc.properties ④配置Spring的配置文件 beans.xml ⑤准备数据库与测试表 1.3、实现CURD ①装配 JdbcTemplate 创建测试类,整合JUnit,注入

    2024年02月09日
    浏览(42)
  • javaee spring jdbcTemplate的使用

    spring配置文件 测试类

    2024年02月11日
    浏览(34)
  • 对比Spring Boot中的JdbcClient与JdbcTemplate

    本文我们一起看看Spring Boot中 JdbcClient 和 JdbcTemplate 之间的差异。 以下内容使用的Java和Spring Boot版本为: Java 21 Spring Boot 3.2.1 假设我们有一个 ICustomerService 接口: 其中,涵盖了我们常见的数据CRUD操作。 下面就来一起看看,分别使用 JDBC Client 和 JDBC Template 的实现。 JdbcTemplat

    2024年02月03日
    浏览(40)
  • 6、Spring_Junit与JdbcTemplate整合

    1.1新建项目结构 1.2导入依赖 导入 junit 与 Spring 依赖 1.3正常的写 spring 代码 添加 mapper 添加配置类 1.4通过测试类拿去mapper 先建立测试类 1.5@Runwith 说明 @Runwith 位置 测试类上方 作用 测试类注解,设置 junit 运行器的 属性 使用测试运行的环境,SpringJUnit4ClassRunner.class 1.5@ContextC

    2024年02月11日
    浏览(41)
  • Spring AOP 学习(动态代理、JdbcTemplate、Junit)

    Proxy  jdk动态代理,面向接口 cglib   第三方动态代理,面向父类 在 不修改原有代码 ,或者没有办法修改原有代码的情况下, 增强对象功能 ,使用代理对象代替原来的对象去完成功能,进而达到拓展功能的目的 JDK Proxy 动态代理是 面向接口 的动态代理,一定要有接口和实现

    2024年02月08日
    浏览(43)
  • 设置JdbcTemplate打印sql语句的几种实现方式使用Spring Boot打印SQL语句

    在使用JdbcTemplate执行SQL查询时,可以将其配置为打印SQL语句,以便调试和优化查询。以下是一些方法可以设置JdbcTemplate打印SQL语句: 如果你使用Log4j作为日志框架,可以在log4j.properties或log4j.xml文件中添加以下配置,将JdbcTemplate打印的SQL语句输出到控制台或日志文件中: 这将

    2024年02月15日
    浏览(150)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包