mybatisPlus 구덩이 밟 기 -- 자동 충전

이틀 동안 인 터 페 이 스 를 만 들 고 데이터베이스 층 은 mubatisPlus 를 사용 합 니 다. 데 이 터 를 삽입 할 때 정상 적 인 논 리 는 create 등 정 보 를 삽입 하 는 것 이지 만 updateTime 도 자동 으로 삽 입 됩 니 다.두 시간 을 생각 했 지만 문제 의 소 재 를 찾 지 못 해 공사 기한 에 영향 을 주지 않 고 마지막 에 SQL 을 직접 썼 다.
오늘 또 비슷 한 기능 개발 이 있 기 때문에 저 는 게 으 름 을 피 우 고 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 가 어떤 차이 가 있 는 지 여러분 이 설명해 주세요.

좋은 웹페이지 즐겨찾기