Spring批处理读取器中sql查询内部的java调用方法
我有一个枚举,它从性别字符返回性别:
public enum Gender {
FEMALE('F'), MALE('M');
private char gender;
Gender(char gender) {
this.gender = gender;
}
public static Gender getSex(char gender) {
return Arrays.stream(Gender.values())
.filter(s -> s.gender == gender)
.findFirst()
.orElseThrow(NoSuchElementException::new);
}
}
在一份工作中,我有一个带有queryprovider的阅读器,可以从DB中选择sex列(值为F或M)
ItemReader<UserDTO> userDatabaseReader() {
JdbcPagingItemReader<UserDTO> reader = new JdbcPagingItemReader<>();
reader.setDataSource(dataSource);
reader.setPageSize(100);
reader.setRowMapper(new BeanPropertyRowMapper<>(UserDTO.class));
MySqlPagingQueryProvider queryProvider = new MySqlPagingQueryProvider();
queryProvider.setSelectClause("SELECT u.id, " +
"u.firstname as firstName, " +
"u.sex as gender, " +
"u.eliminated ^ 1 as active");
queryProvider.setFromClause("FROM users u");
HashMap<String, Order> sortKeys = new HashMap<>();
sortKeys.put("u.id", Order.DESCENDING);
queryProvider.setSortKeys(sortKeys);
reader.setQueryProvider(queryProvider);
return reader;
}
我有性别枚举字段的UserDTO。
如何从调用getSex()
方法的列char中获取性别枚举,并将其作为枚举传递给UserDTO
# 1 楼答案
可以手动实现行映射器
差不多
而不是你的读者
代码多一点,但你有更多的灵活性