当前位置: 代码网 > it编程>编程语言>Java > jdbcTemplate.query和queryForObject方法的使用及区别

jdbcTemplate.query和queryForObject方法的使用及区别

2025年12月30日 Java 我要评论
一、问题原因上周再项目上遇到一个信息集权限不足时,输出word功能中报错,查看代码发现该块查询逻辑直接使用了jdbctemplate.queryforobject,根本没考虑信息集权限不足的情况,会出

一、问题原因

上周再项目上遇到一个信息集权限不足时,输出word功能中报错,查看代码发现该块查询逻辑直接使用了jdbctemplate.queryforobject,根本没考虑信息集权限不足的情况,会出现查询不到数据导致报错的问题,下面就针对query() 和 queryforobject()做一下分析。

二、query() 和 queryforobject() 区别

jdbctemplate 的 query() 和 queryforobject() 是 spring 中操作数据库最常用的两个查询方法,核心区别在于返回结果形态、空结果处理、适用场景,以下是详细对比:

特性jdbctemplate.query()jdbctemplate.queryforobject()
返回值类型list(多条结果,无结果则返回空 list)t(单条结果,必须返回且仅返回 1 条)
空结果处理无匹配数据时返回空 list([]),不抛异常无匹配数据时抛 emptyresultdataaccessexception
多结果处理支持 0 条、1 条、多条结果仅支持恰好 1 条结果,多条则抛 incorrectresultsizedataaccessexception
核心参数需指定 rowmapper/resultsetextractor 映射结果需指定 rowmapper/ 返回类型(如 integer.class)
适用场景批量查询(列表查询)、允许无结果的单条查询明确仅需 1 条结果的场景(如根据唯一 id 查单条数据)

三、修改建议

1、使用jdbctemplate.query()替换 jdbctemplate.queryforobject()

beanpropertyrowmapper<person> rowmapper = new beanpropertyrowmapper<>(person.class);
string sql = "select * from person where personid = '12'";
//下面这段代码有问题,当personid中12不存在,则会报异常emptyresultdataaccessexception
//person person = jdbctemplate.queryforobject(sql, rowmapper);
//使用query替换queryforobject
list<person> query = jdbctemplate.query(sql, rowmapper);
if(query != null){
   person person = query.get(0);
}

2、使用mybatis替换 jdbctemplate.queryforobject()

//beanpropertyrowmapper<person> rowmapper = new beanpropertyrowmapper<>(person.class);
string sql = "select * from person where personid = '12'";
//下面这段代码有问题,当personid中12不存在,则会报异常emptyresultdataaccessexception
//person person = jdbctemplate.queryforobject(sql, rowmapper);
//使用mybatis替换queryforobject,mybatis查询不到数据会返回null
person person = rmbreportmapper.querypersonbysql(sql);

四、总结

  • query() 是 “通用查询”,灵活处理任意条数结果,无异常风险;
  • queryforobject() 是 “单结果查询”,强约束结果数量,适合明确仅需 1 条的场景;
  • 日常开发中,除非确认数据必存在,否则优先用 query()处理单条查询,避免空结果异常。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com