使用spring结果集创建列表

使用spring结果集创建列表,spring,postgresql,java-8,Spring,Postgresql,Java 8,我需要使用ResultSet和Java 8创建联系人列表的帮助 我需要按名称筛选列表,仅当名称合适时,才将其添加到列表中。并将fetchSize设置为处理来自Postgres的一百万行 例如: public List <Contact> getAll (String nameFilter) {         Pattern pattern = Pattern.compile (nameFilter);         List <Contact> contacts =

我需要使用
ResultSet
和Java 8创建联系人列表的帮助

我需要按名称筛选列表,仅当名称合适时,才将其添加到列表中。并将
fetchSize
设置为处理来自Postgres的一百万行

例如:

public List <Contact> getAll (String nameFilter) {
        Pattern pattern = Pattern.compile (nameFilter);

        List <Contact> contacts = new ArrayList <> ();

        JdbcTemplate.query ("SELECT * FROM contacts", rs -> {
// here it is necessary maybe to do something like this !pattern.matcher(name).matches()
// and maybe jdbcTemplate.setFetchSize (*how many rows will be better to read from
// postgres? (5,5000,50000 ???) *)
            Contacts.add (new Contact (rs.getInt ("id"), rs.getString ("name")));
        });

        return contacts;

    }
public List getAll(字符串名称过滤器){
Pattern=Pattern.compile(nameFilter);
List contacts=new ArrayList();
JdbcTemplate.query(“从联系人中选择*”,rs->{
//在这里,可能需要这样做!pattern.matcher(name.matches())
//也许jdbcTemplate.setFetchSize(*读取多少行更好
//博士后?(5500050000???)
Contacts.add(新联系人(rs.getInt(“id”)、rs.getString(“name”));
        });
返回联系人;
    }

如何执行此操作?

在运行查询之前,需要设置提取大小。请记住,如果使用单例对象,它将影响所有查询,您应该在创建
JdbcTemplate
对象时设置此配置

关于使用功能界面创建列表,类似的操作应该可以:

springJdbcTemplate.query ("SELECT * FROM contacts", rs -> {
  while(rs.next()) {
    if (pattern.matcher(rs.getString("name")).matches())
      contacts.add (new Contact (rs.getInt ("id"), rs.getString ("name")));
  }
  return null;
});

只需说,如果您可以将模式转换为sql查询,它将更快。

较大的提取大小意味着当行集耗尽时,您对数据库的请求次数会更少,但需要更多的内存来保留它。使用较小的fetch大小,您将更频繁地询问数据库,但需要的内存更少。所以这取决于你期望的结果有多大以及你需要什么。速度记忆?这是你的决定。