Ler usuários que tem empréstimos próximo do retorno (numero de dias para retornar - 1 dia)
O nome será do reader será: readUsersWithLoansCloseToReturnReaderConfig
Inicialmente, criaremos um método para a classe que irá receber como parâmetro o data source. Usaremos o banco de dados library. Este método, retornará um ItemReader do tipo UserBookLoan.
Quando gostaríamos de obter dados do banco de dados, existe uma classe que estende o ItemReader, ela se chama: JdbcCursorItemReaderBuilder. Passaremos dentro dele, o UserBookLoan.
Como o método ficará inicialmente:
@Bean
public ItemReader<UserBookLoan> readUsersWithLoansCloseToReturnReader(@Qualifier("appDS")DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<UserBookLoan>()
}
Dentro do JdbcCursor, começaremos toda a lógica, veja:
@Bean
public ItemReader<UserBookLoan> readUsersWithLoansCloseToReturnReader(@Qualifier("appDS")DataSource dataSource) {
return new JdbcCursorItemReaderBuilder<UserBookLoan>()
//mesmo nome do metodo
.name("readUsersWithLoansCloseToReturnReader")
//passamos dataSource
.dataSource(dataSource)
//query SQL
.sql("SELECT user.id as user_id, " +
"user.name as user_name, " +
"user.email as user_email, " +
"book.id as book_id, " +
"book.name as book_name, " +
"loan.loan_date " +
"FROM tb_user_book_loan as loan " +
"INNER JOIN tb_user as user ON loan.user_id = user.id " +
"INNER JOIN tb_book as book ON loan.book_id = book.id " +
"WHERE DATE_ADD(loan_date, INTERVAL " + numDaysToNofityReturn + " DAY) = DATE(NOW());")
.rowMapper(rowMapper())
.build();
}