All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zys.mybatis.crud.Update Maven / Gradle / Ivy

There is a newer version: 0.2.7
Show newest version
package com.zys.mybatis.crud;

import com.zys.mybatis.annotation.*;
import com.zys.mybatis.dto.UpdateDto;
import com.zys.mybatis.utils.FieldUtils;
import com.zys.mybatis.utils.QueryUtils;
import com.zys.mybatis.utils.StringUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zys
 * @version 1.0
 * @date 2021/1/26 10:06
 */
public class Update extends AbstractQuery> {
    /**
     * 需要修改的map
     * key 字段名
     * value 修改的值
     */
    private Map updateMap = new HashMap<>();

    Update(){}

    public Update(T entity){
        this.table = QueryUtils.getTableName(entity.getClass());
        this.update(entity);
    }

    public Map getUpdateMap(){
        return updateMap;
    }



    private void update(T entity) {
        Class aClass = entity.getClass();
        MetaObject metaObject = SystemMetaObject.forObject(entity);
        while(!aClass.isAssignableFrom(Object.class)){
            for (Field field : aClass.getDeclaredFields()) {
                if (Modifier.isStatic(field.getModifiers())) {
                    //跳过静态字段
                    continue;
                }
                Id id = field.getDeclaredAnnotation(Id.class);
                if (id != null) {
                    //跳过主键
                    continue;
                }
                Ignore ignore = field.getDeclaredAnnotation(Ignore.class);
                if (ignore != null) {
                    continue;
                }
                Default aDefault = field.getDeclaredAnnotation(Default.class);
                Object value = metaObject.getValue(field.getName());
                if(aDefault != null){
                    boolean b = FillEnum.UPDATE.equals(aDefault.fill()) || FillEnum.INSERT_UPDATE.equals(aDefault.fill());
                    if (b) {
                        updateMap.put(new UpdateDto(FieldUtils.toUnderline(field.getName()), true), value == null ? QueryUtils.setDefault(metaObject.getGetterType(field.getName()), aDefault.value(),aDefault.defaultValue()) : value);
                    }
                    if (value != null) {
                        updateMap.put(new UpdateDto(FieldUtils.toUnderline(field.getName()), true), value);
                    }
                    continue;
                }
                Column column = field.getDeclaredAnnotation(Column.class);
                if (column == null && value != null) {
                    notNullUpdate(FieldUtils.toUnderline(field.getName()),value,true);
                } else if (column != null) {
                    String fieldName = StringUtils.isNotBlank(column.value()) ? column.value() : FieldUtils.toUnderline(field.getName());
                    boolean update = StringUtils.isNotBlank(column.update());
                    if (!column.notNull()) {
                        //可以为空
                        updateMap.put(new UpdateDto(fieldName, !update),update ? String.format(column.update(),fieldName,value) : value);
                        continue;
                    }
                    if(update){
                        if (value != null) {
                            notNullUpdate(fieldName,String.format(column.update(),fieldName,value),false);
                        }
                        continue;
                    }
                    if(value != null){
                        updateMap.put(new UpdateDto(fieldName),value);
                    }
                }
            }
            aClass = aClass.getSuperclass();
        }
    }

    /**
         //先判断是否设置了默认,如果设置了默认值,再判断原始值是不是null是null就是使用默认值,否则使用设置的值.没有设置默认值,使用原始值
         StringUtils.isNotBlank(column.defaultValue()) ? (
         value == null?setDefault(metaObject.getGetterType(field.getName()),column.defaultValue()):value
         ) : value
     */

    /**
     * 设置不能为空字段
     * @param fieldName 字段名称
     * @param value 值
     * @param isPoundSign true #{} ,false ${}
     */
    public void notNullUpdate(String fieldName,Object value,boolean isPoundSign){
        if (value instanceof CharSequence) {
            CharSequence fieldValue = (CharSequence) value;
            if (StringUtils.isNotBlank(fieldValue)) {
                updateMap.put(new UpdateDto(fieldName,isPoundSign),fieldValue);
            }
        } else {
            updateMap.put(new UpdateDto(fieldName,isPoundSign),value);
        }
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy