五月三周技术复盘

2020-05-27  本文已影响0人  剑道_7ffc

postgresql的execute

execute表示执行动态命令,即含有变量的db

更新表的创建时间为timestamptz(3)

CREATE OR REPLACE FUNCTION public.tmp_update_create_modify_time()
  RETURNS VARCHAR AS
$BODY$
DECLARE

tableNameRecordCursor REFCURSOR;
tableNameRecord RECORD;
tablename VARCHAR;

BEGIN
      OPEN tableNameRecordCursor FOR 
            SELECT 
                c.relname tableName
            FROM
                pg_class AS c,
                pg_attribute AS a 
            WHERE a.attrelid = c.oid 
                AND a.attnum > 0 
                AND a.attname in('modify_time');
        LOOP
            FETCH tableNameRecordCursor INTO tableNameRecord;
            IF NOT FOUND THEN
                RAISE NOTICE '没有找到表名';
                EXIT;
            END IF;

            EXECUTE 'ALTER TABLE ' || tableNameRecord.tableName || 
            ' ALTER COLUMN "modify_time" TYPE timestamptz(3)';
     END LOOP;

    RETURN '成功';
END 
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

spring默认的集合绑定大小

spring默认的值

org.springframework.validation.DataBinder#setAutoGrowCollectionLimit默认是256

/** Default limit for array and collection growing: 256 */
public static final int DEFAULT_AUTO_GROW_COLLECTION_LIMIT = 256;

手动修改

DataBinder是PropertyEditorRegistry的实现类,所以通过实现PropertyEditorRegistrar来编辑DataBinder的值

public class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar {
    @Override
    public void registerCustomEditors(PropertyEditorRegistry registry) {
        //当对象属性有集合时修改数据绑定的List的默认值256
        if(registry instanceof DataBinder){
            ((DataBinder)registry).setAutoGrowCollectionLimit(3000);
        }
    }
}

fastjson的空异常的问题

在json时get方法中报空指针异常

public boolean isGroupBuild(){
        return super.getParentHospitalId().equals(super.getGroupHospitalId());
}

源码分析

com.fasterxml.jackson.databind.ser.BeanSerializerBuilder#build

创建序列化的对象

com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector#collectAll

收集所有的属性

protected void collectAll()
{
    LinkedHashMap<String, POJOPropertyBuilder> props = new LinkedHashMap<String, POJOPropertyBuilder>();

    // First: gather basic data
    _addFields(props);
    _addMethods(props);
}
com.fasterxml.jackson.databind.util.BeanUtil#okNameForRegularGetter

如将getStudentName变成studentName

com.fasterxml.jackson.databind.util.BeanUtil#okNameForIsGetter

如将isGroupBuild变成groupBuild

com.fasterxml.jackson.databind.ser.std.BeanSerializerBase#serializeFields

循环获取值

解决办法

修改方法名

因为fastJson会把get开头和字段当做属性,所以若不想反射调用可以改为其他名称如fetch

使用注解不序列化改字段

@Transient:针对所有的序列化,不序列化改方法
@JsonIgnore:针对fastJson

上一篇下一篇

猜你喜欢

热点阅读