用切面实现
package com.yang.storage.aspect;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateFormatUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import java.sql.Timestamp;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@Component
@Slf4j
@Aspect
public class MybatisPlusAspect {
@Pointcut("execution(* com.yang.storage.mapper.*.select*Map*(..))")
public void convertDatePointCut() {
}
/**
* 转换map日期
*/
@Around("convertDatePointCut()")
public Object convertDate(ProceedingJoinPoint joinPoint) throws Throwable {
Object result = joinPoint.proceed();
if (result instanceof List){
List<Map<String,Object>> mapList = (List<Map<String, Object>>) result;
for (Map<String, Object> map : mapList) {
this.convertMapDate(map);
}
}else if (result instanceof Map){
Map<String,Object> map = (Map<String, Object>) result;
this.convertMapDate(map);
}else if (result instanceof Page){
Page<Map<String,Object>> page = (Page<Map<String, Object>>) result;
List<Map<String, Object>> mapList = page.getRecords();
for (Map<String, Object> map : mapList) {
this.convertMapDate(map);
}
}
return result;
}
//转换timestamp为字符串
//考虑到遍历来判断字段是否为timestamp类型可能费性能,所以根据业务需要对字段转换,哟需要可以自己遍历判断
private void convertMapDate(Map<String,Object> map){
Timestamp createTime = (Timestamp) map.get("createTime");
Timestamp updateTime = (Timestamp) map.get("updateTime");
Timestamp uploadTime = (Timestamp) map.get("uploadTime");
if (createTime!=null){
String createTimeStr = format(createTime);
map.put("createTime",createTimeStr);
}
if (updateTime!=null){
String updateTimeStr = format(updateTime);
map.put("updateTime",updateTimeStr);
}
if (uploadTime!=null){
String uploadTimeStr = format(uploadTime);
map.put("uploadTime",uploadTimeStr);
}
}
private String format(Timestamp timestamp){
String timeStr = DateFormatUtils.format(timestamp, "yyyy-MM-dd HH:mm:ss", Locale.CHINESE);
return timeStr;
}
}