【问题标题】:How to fetch record from db by ID?如何通过ID从数据库中获取记录?
【发布时间】:2021-11-27 09:45:27
【问题描述】:

我得到了这段代码,但我认为这是不好的方法,如果有 100k 个结果,它会返回 100k 个新人怎么办?是否有任何其他方法可以用于例如ResultSetExtractor,但我不太确定如何实现它。另外,我应该使用try catch 块吗?

   public Optional<Person> getPerson(int id) {
        String sql = "SELECT id, name FROM people WHERE id = ?";
        List<Person> people = jdbcTemplate.query(sql, (result, index) -> {
            return new Person(
                    result.getInt("id"),
                    result.getString("name")
            );
        }, id);

        return people.stream().findFirst();
    }

【问题讨论】:

  • 它不会返回您拥有的 100k 人 WHERE id = ? 它只会返回 1 个 ID id 应该对每个人都是唯一的
  • 去掉spring-boot标签,没有什么特殊的技术可以最快获得100k记录。如果您想以最快的速度搜索数据,可以使用binary-search
  • @FaeemazazBhanej,我不希望获得 10 万条记录,我的问题是,我的代码是否最适合通过 GET 请求按 ID 获取用户,我收到反馈说我的代码不好,并且我应该使用ResultSetExtractor 而不是行映射器。我想听听人们在这里的想法
  • 我认为RowMapper 是在spring jdbc 中提取数据的最佳解决方案

标签: java jdbc


【解决方案1】:

在正确的设计中,每个人的 id 字段应该是唯一的,因此此代码应该只能找到 1 个人。 如果 id 字段不是唯一的,那么它不是一个好的设计,但您编写的代码是正确的。您不需要 try - catch,因为您正在使用列表来存储结果,因此即使有超过 1 个结果,它也不会产生异常。但这也没有意义,因为最终该方法只返回 1 个人 (people.stream.findFirst())。

【讨论】:

  • 一个人告诉我这是我做的很糟糕的方法,我应该使用ResultSetExtractor
  • 可以添加一些代码文件
【解决方案2】:

如果您将查询从

"SELECT id, name FROM people WHERE id = ?"

"SELECT id, name FROM people WHERE id = ? LIMIT 1"

它只会返回匹配id的第一个人。

但是,id 对于每个人来说最好是唯一的,在这种情况下,原始查询最多会返回一个结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多