mybatisPlus 구덩이 밟 기 -- 자동 충전
오늘 또 비슷 한 기능 개발 이 있 기 때문에 저 는 게 으 름 을 피 우 고 my batisPlus 를 사용 하고 싶 습 니 다. 결 과 는 똑 같은 문제 입 니 다. 저 는 이미 fill 충전 이 잘못 되 었 다 고 생각 했 습 니 다.
@TableField(fill = FieldFill.INSERT_UPDATE)
protected Date updateTime; //
@ TableField (fill = FieldFill. INSERT UPDATE) 를 변경 합 니 다. @TableField(fill = FieldFill.UPDATE)
문제 도 해결 할 수 있 지만 회사 프레임 워 크 의 DataEntity 를 다시 써 야 한다.
뒤에 FieldFill 을 사용 하여 mybatisPlus 공식 문 서 를 찾 았 는데, 마침내 문제 가 발견 되 었 습 니 다: MetaObjectHandler 메타 개체 프로세서 인터페이스 설정 에 문제 가 있 습 니 다. insert 에 도 update 필드 를 설정 하여 데이터 삽입 에 이상 이 생 겼 습 니 다.
직접 코드 올 리 기:
/**
* mybatisplus ,
* @author updateBy
* @version 1.0.2 insert ,
*/
@Component
public class MyMetaObjectHandler extends MetaObjectHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
//
@Override
public void insertFill(MetaObject metaObject) {
UserInfo userInfo = ContextUtils.getUserInfo();
String currentUser = " ";
String currentUserId = "system";
if(userInfo == null) {
ServiceContext context = ServiceContext.getContext();
if(context != null) {
currentUserId = StringUtils.isNotEmpty(context.getUserId()) ? context.getUserId() : "system";
currentUser = StringUtils.isNotEmpty(context.getUserName()) ? context.getUserName() : "system";
}
}else {
currentUser = userInfo.getNickname();
currentUserId = userInfo.getUsername();
}
//LOGGER.info("insert Start");
Date now = new Date();
Object id = getFieldValByName("id", metaObject);
Object createUserId = getFieldValByName("createUserId", metaObject);
Object createTime = getFieldValByName("createTime", metaObject);
Object createUser = getFieldValByName("createUser", metaObject);
// Object updateUser = getFieldValByName("updateUser", metaObject);
// Object updateUserId = getFieldValByName("updateUserId", metaObject);
// Object updateTime = getFieldValByName("updateTime", metaObject);
//SysUser user = (SysUser)SecurityUtils.getSubject().getPrincipal();
if (id == null) {
setFieldValByName("id", UuidUtil.get32UUID(), metaObject); //mybatis-plus 2.0.9+
}
if (createUserId == null) {
setFieldValByName("createUserId", currentUserId, metaObject); //mybatis-plus 2.0.9+
}
if (createTime == null) {
setFieldValByName("createTime", now, metaObject); //mybatis-plus 2.0.9+
}
if (createUser == null) {
setFieldValByName("createUser", currentUser, metaObject); //mybatis-plus 2.0.9+
}
// if (updateUser == null) {
// setFieldValByName("updateUser", currentUser, metaObject); //mybatis-plus 2.0.9+
// }
// if (updateUserId == null) {
// setFieldValByName("updateUserId", currentUserId, metaObject); //mybatis-plus 2.0.9+
// }
// if (updateTime == null) {
// setFieldValByName("updateTime", now, metaObject); //mybatis-plus 2.0.9+
// }
LOGGER.info(" end");
}
//
@Override
public void updateFill(MetaObject metaObject) {
UserInfo userInfo = ContextUtils.getUserInfo();
if(userInfo == null) {
ServiceContext context = ServiceContext.getContext();
userInfo = new UserInfo();
userInfo.setUsername(context.getUserId());
userInfo.setNickname(context.getUserName());
}
String currentUser = userInfo != null ? userInfo.getNickname() : "system";
String currentUserId = userInfo != null ? userInfo.getUsername() : "system";
//LOGGER.info("update Start");
Object updateUser = getFieldValByName("updateUser", metaObject);
Object updateUserId = getFieldValByName("updateUserId", metaObject);
Object updateTime = getFieldValByName("updateTime", metaObject);
if (updateUser == null) {
setFieldValByName("updateUser", currentUser, metaObject); //mybatis-plus 2.0.9+
}
if (updateUserId == null) {
setFieldValByName("updateUserId", currentUserId, metaObject); //mybatis-plus 2.0.9+
}
if (updateTime == null) {
setFieldValByName("updateTime", new Date(), metaObject); //mybatis-plus 2.0.9+
}
//LOGGER.info("update end");
}
}
update 필드 를 주석 하여 문 제 를 완벽 하 게 해결 합 니 다.
결어:
1. 문제 해결, 키워드 검색 중요
2. INSERT_UPDATE 와 UPDATE 가 어떤 차이 가 있 는 지 여러분 이 설명해 주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx websocket ip_해시 규칙프로젝트 를 다운로드 한 후 서로 다른 네트워크 에 각각 이 demo 프로젝트 를 배치 합 니 다. 프로젝트 에서 환경 변수 에 따라 시스템 변 수 를 설정 합 니 다. spring.profiles.active=de...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.