Вла*_*чев 2 java jdbc spring-jdbc jdbctemplate
我需要将参数传递给我的 RowMapper,因为我需要将时区应用于日期字段。目前这是我的代码:
询问:
@Override
public List<GCProjectMember> selectGCMembers(Long jobId,String timezone) {
DataSource dataSource = DataSourceBeanBuilder.getClientDataSource(ClientContextHolder.getCustomerType(),
this.getClass().getName());
this.setDataSource(dataSource);
List<GCProjectMember> membersList = getJdbcTemplate().query(SELECT_GC_MEMBERS, new Object[] { jobId },
new GCProjectMemberRowMapper());
if (membersList.size() > 0) {
return membersList;
} else {
return Collections.emptyList();
}
}
Run Code Online (Sandbox Code Playgroud)
行映射器:
public class GCProjectMemberRowMapper extends BasicRowMapper implements RowMapper<GCProjectMember> {
@Override
public GCProjectMember mapRow(ResultSet rs, int rowNum) throws SQLException {
GCProjectMember member = new GCProjectMember();
...
if (hasColumn(rs, "sign_date")) {
member.setSignDate(rs.getTimestamp("sign_date"));
}
....
return member;
}
}
Run Code Online (Sandbox Code Playgroud)
如何将时区从查询传递到行映射器?
您可以在 GCProjectMemberRowMapper 中创建一个参数化的构造函数,并在初始化对象时将时区值传递给它。
public class GCProjectMemberRowMapper extends BasicRowMapper implements RowMapper<GCProjectMember> {
private TimeZone timezone;
public GCProjectMemberRowMapper(TimeZone timezone) {
this.timezone = timezone
}
@Override
public GCProjectMember mapRow(ResultSet rs, int rowNum) throws SQLException {
GCProjectMember member = new GCProjectMember();
...
if (hasColumn(rs, "sign_date")) {
member.setSignDate(rs.getTimestamp("sign_date"));
}
// use timezone here
....
return member;
}
Run Code Online (Sandbox Code Playgroud)
可以像这样更改调用代码。
@Override
public List<GCProjectMember> selectGCMembers(Long jobId,String timezone) {
DataSource dataSource = DataSourceBeanBuilder.getClientDataSource(ClientContextHolder.getCustomerType(),
this.getClass().getName());
this.setDataSource(dataSource);
List<GCProjectMember> membersList = getJdbcTemplate().query(SELECT_GC_MEMBERS, new Object[] { jobId },
new GCProjectMemberRowMapper(timezone));
if (membersList.size() > 0) {
return membersList;
} else {
return Collections.emptyList();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |