JDBC查询时抛出ItemsNotFoundException的实现方法咨询
解决方案:在查询无结果时抛出自定义异常
先给你明确答案:是的,你需要在jdbcTemplate.query()返回空列表时抛出ItemsNotFoundException——Spring的JdbcTemplate在没有匹配查询结果时,会返回一个空的ArrayList而非null,所以你只需要判断列表是否为空即可,不用额外处理null的情况。
步骤1:定义自定义异常类
首先你需要确保已经创建了ItemsNotFoundException这个业务异常类,通常继承自RuntimeException(这样不需要强制调用方捕获,更符合业务异常的处理习惯):
public class ItemsNotFoundException extends RuntimeException { // 带消息的构造方法,方便传递异常信息 public ItemsNotFoundException(String message) { super(message); } }
步骤2:修改仓库方法,添加异常抛出逻辑
在你的getItemsByName方法中,获取查询结果后立即判断列表是否为空,为空则抛出异常:
@Override public List<Item> getItemsByName(String name) { String sql = "SELECT * FROM ITEMS WHERE NAME = :name"; Map<String, Object> params = new HashMap<>(); params.put("name", name); // 执行查询获取结果列表 List<Item> items = jdbcTemplate.query(sql, params, new ItemMapper()); // 无匹配结果时抛出异常 if (items.isEmpty()) { throw new ItemsNotFoundException(String.format("No items found with name: '%s'", name)); } return items; }
补充说明
- JdbcTemplate的
query方法在无结果时不会返回null,所以你不用写if (items == null || items.isEmpty())这样的判断,只需要检查isEmpty()就足够了。 - 这个逻辑完全适配你的需求:当用户传入的商品名称不存在时,明确抛出异常告知调用方,而不是默默返回空列表。如果后续业务允许返回空列表,只需要移除这个判断即可。
内容的提问来源于stack exchange,提问作者cerbin
相关产品推荐
相关产品推荐

