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
网友评论