小技巧:Mybatis当查询一个数据库时,需要返回许多数据,平时我们都是使用定义一个实体类,来进行数据的封装,而如今我们可以使用一个Map类型,来作为返回值,比如:resultType="java.util.LinkedHashMap"。最后使用List来对map集合进行接收。
<select id="selectByParams" parameterType="java.util.Map" resultType="java.util.LinkedHashMap"> // 映射xml
// mybatis在运行时会将其转为map进行存放,映射层接口
public List<Map> selectByParams(@Param("pf_state") String pfState,
@Param("pf_operator_id") Long pfOperatorId);
最近我使用mybatis查询数据库中的时间时发现返回的数据中包含有T,如图:
而数据库中的数据却是这个样子的,如图:
我经过不断的上网搜索,发现这个是因为,MyBatis会将MySQL中的datetime类型转化成Java中的LocalDateTime类型造成的,这个时候们就可以添加一个方法,用于进行时间转换。
public Long toTimestamp(LocalDateTime localDateTime) {
// 通过LocalDateTime.atZone方法,使用系统默认时区ZonId.systemDefault()获取Instant实例
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
Instant instant = zonedDateTime.toInstant();
// 获取时间戳
long timeStamp = instant.toEpochMilli(); // 1669392000000
// 如果想要进行日期格式化 2022-11-26 00:00
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(time);
return timeStamp;
}
注意,这种转换出来的数据,是一个时间戳,具体来说返回来的数据就是1970年到现在查询的时间,距离的毫秒数。如果想要将其转换为年月日,这个时候调用SimpleDateFomat方法,进行日期格式化。