如何在 Spring-Data-JDBC 中设置 fetch-size

How to set fetch-size in Spring-Data-JDBC

我使用 Spring-Data-JDBC(不是 JPA)并想设置获取大小。

我知道经典 org.springframwork.jdbc.core.JdbcTemplate 有一个 setFetchSize(int) 方法,但我有 Spring-Data-JDBC 存储库:

org.springframework.data.repository.Repository;
org.springframework.data.jdbc.repository.query.Query;

/** This is a Spring Data <b>JDBC</b> (JDBC not JPA!). */      
public interface UserDao extends  Repository<User, Long> {
  
    @Query(value = UserRowMapper.SELECT_BY_NAME_STATEMENT
           rowMapperClass = UserRowMapper.class)
    Optional<User> findByName(String name);
}

这是配置的相关部分:

@Configuration
@EnableJdbcRepositories 
public class AppConfigSpringDataJdbc extends AbstractJdbcConfiguration {
   @Autowired
   private DataSource dataSource;

   @Bean
   public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
       return new NamedParameterJdbcTemplate(this.dataSource);
   }
}

所以我的问题是:How/Where 在使用 Spring-Data-JDBC 时设置 sql 查询获取大小,或者通过查询还是一般?

(Spring-Data-JPA的常见解决方案不会起作用,因为没有persistence.xmljavax.persistence.QueryHint注解,因为它是JDBC)

您可以使用自定义 JdbcTemplate 创建 NamedParameterJdbcTemplate

@Bean
JdbcOperations jdbcOperations(DataSource dataSource) {
    final var jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.setFetchSize(100);
    return jdbcTemplate;
}

@Bean
NamedParameterJdbcOperations namedParameterJdbcOperations(JdbcOperations operations) {
    return new NamedParameterJdbcTemplate(operations);
}