很长一段时间以来,我没有使用Spring,并且使用此JdbcTemplate行映射器映射日期字段时发现了一些困难。
我试图详细解释我的情况。
在我的数据库(MariaDB)上,此表名为TREND002:
+-----------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------+------+-----+---------+-------+
| Time_Stamp | datetime | NO | PRI | NULL | |
| Time_Stamp_ms | int(11) | NO | PRI | NULL | |
| Sensor001DV | double | YES | | NULL | |
| Sensor002DV | double | YES | | NULL | |
| Sensor003DV | double | YES | | NULL | |
..............................................................
..............................................................
..............................................................
| Sensor00NDV | double | YES | | NULL | |
NOTE-1: Time_Stamp字段包含值为[[2010-10-22 16:50:12]]然后,我有这个DTO类映射上一个表的字段:
public class TrendDTO {
private Date dateTime;
private int timeStampMs;
private String sensorValue;
public TrendDTO() {
super();
}
public TrendDTO(Date dateTime, int timeStampMs, String sensorValue) {
super();
this.dateTime = dateTime;
this.timeStampMs = timeStampMs;
this.sensorValue = sensorValue;
}
public Date getDateTime() {
return dateTime;
}
public void setDateTime(Date dateTime) {
this.dateTime = dateTime;
}
public int getTimeStampMs() {
return timeStampMs;
}
public void setTimeStampMs(int timeStampMs) {
this.timeStampMs = timeStampMs;
}
public String getSensorValue() {
return sensorValue;
}
public void setSensorValue(String sensorValue) {
this.sensorValue = sensorValue;
}
@Override
public String toString() {
return "TrendDTO [dateTime=" + dateTime + ", timeStampMs=" + timeStampMs + ", sensorValue=" + sensorValue + "]";
}
}
很容易在这个DTO课程中:
repository
@Override
public List<TrendDTO> findTrendListBySensorName(String tableName, String columnName) {
List<TrendDTO> result = null;
String RETRIEVE_TREND_BY_SENSOR_NAME = "SELECT Time_Stamp, Time_Stamp_ms, Sensor240DV FROM Delphys.TREND003";
//result = jdbcTemplate.query(RETRIEVE_TREND_BY_SENSOR_NAME, BeanPropertyRowMapper.newInstance(TrendDTO.class));
result = jdbcTemplate.query(
RETRIEVE_TREND_BY_SENSOR_NAME,
(rs, rowNum) ->
new TrendDTO(
new java.util.Date(rs.getTimestamp("Time_Stamp").getTime()),
rs.getInt("Time_Stamp_ms"),
String.valueOf(rs.getDouble(columnName))
)
);
return result;
}
它工作正常,但通过这种方式,我获得了包含以下[[dateTime字段值的
TrendDTO
实例的列表:dateTime =星期五2010年10月22日星期五16:50:12日期是完全正确的,但我认为这是错误的格式。我必须将此JSON格式的DTO对象返回到前端,并且我需要以下格式的日期:
2010-10-22 16:50:12
我也尝试使用此方法更改我的映射器代码:
result = jdbcTemplate.query(
RETRIEVE_TREND_BY_SENSOR_NAME,
(rs, rowNum) ->
new TrendDTO(
//new java.util.Date(rs.getTimestamp("Time_Stamp").getTime()),
rs.getTimestamp("Time_Stamp"),
rs.getInt("Time_Stamp_ms"),
String.valueOf(rs.getDouble(columnName))
)
);
您可以看到,我只是在使用
rs.getTimestamp(“ Time_Stamp”),但通过这种方式,我正在获得
dateTime
的初始化,如下所示:2010-10-22 16:50 :12.0如您所见,它以。0结尾,它应该代表我不需要的毫秒数。我可以指定格式来避免在结尾毫秒部分也放吗?解决我的问题的另一种可能的方法(也许是最好的解决方案)是:在这个非常恐怖的数据库表中,毫秒信息包含在Time_Stamp_ms
列中,此列目前与我的timeStampMs]映射> DTO字段。
我可以修改以前的代码以将该信息直接封装到DTO对象的dateTime字段中吗?我绝对不确定使用这种语法(它是lambda表达式吗?)。我可以使用这种语法吗?还是可以实现行映射器类来实现此行为?
很长一段时间以来,我没有使用Spring,并且使用此JdbcTemplate行映射器映射日期字段时发现了一些困难。我试图详细解释我的情况。在我的数据库上(...