Package cn.cloudself.query.util.ext
Class EntityProxy.Parser
- java.lang.Object
-
- cn.cloudself.query.util.ext.EntityProxy.Parser
-
- Enclosing class:
- EntityProxy<RES>
public static class EntityProxy.Parser extends Object
Entity or Bean's parser
参考Jvm
Introspector.getBeanInfo(Class)相比jvm.beans更适合解析Entity对象
注意点:
内置一个HashMap<Class, Parsed>实现的缓存,该缓存不会自动回收,常规场景(例如SpringBoot)下不会存在问题,因为本身Entity.class对象和Parsed不会占用很多内存。
但是以下场景需要手动清空缓存:
- Entity是动态生成的,而且很多
- 单Tomcat存在多个应用,且应用存在退出行为,而此时,Tomcat容器仍在运行。该场景可以实现ServletContextListener,在contextDestroyed时调用Parser.removeCaches(k -> true)清空缓存
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classEntityProxy.Parser.MapParserstatic classEntityProxy.Parser.Parsed
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description EntityProxy.ParseraddIgnoreFields(String[] fields)EntityProxy.ParserdefaultClassNameToDbName(Function<String,String> classNameToDbName)EntityProxy.ParserdefaultPropertyNameToDbName(Function<String,String> propertyNameToDbName)static EntityProxy.Parserof(Class<?> clazz)解析一个JavaBean,
获取它的字段名,字段类型,各字段的Getter和Setter的代理方法等信息。static EntityProxy.Parser.MapParserof(Map<?,?> map)Deprecated.不建议使用Parser.of(map),可以尝试解析具体的Bean,解析结果的Getter和Setter是同时支持map类型的:Parser.of(BeanClass.class).parse().getColumnByDbFieldName("create_by").setter().set(map, username)EntityProxy.Parser.Parsedparse()static voidremoveCaches(Class<?>... classes)static voidremoveCaches(Predicate<? super Class<?>> filter)
-
-
-
Method Detail
-
of
public static EntityProxy.Parser of(Class<?> clazz)
解析一个JavaBean,
获取它的字段名,字段类型,各字段的Getter和Setter的代理方法等信息。
对于一个符合的JPA规范的Entity,还可以额外获得:
- id字段, 默认是id或者@
Id注解标注的字段,不支持复合主键。- 数据库字段名(如无@
Column注解,默认给出下划线风格的字段名)等信息,你可以配置:defaultPropertyNameToDbName(Function)}更改这一行为。- Parameters:
clazz- 不能为Map.class
- id字段, 默认是id或者@
-
of
@Deprecated public static EntityProxy.Parser.MapParser of(Map<?,?> map)
Deprecated.不建议使用Parser.of(map),可以尝试解析具体的Bean,解析结果的Getter和Setter是同时支持map类型的:Parser.of(BeanClass.class).parse().getColumnByDbFieldName("create_by").setter().set(map, username)解析一个mapExamples:
Parser.of(User.class).parse().getColumnByDbFieldName("name").setter().set(map, "hb");- See Also:
of(Class)
-
parse
public EntityProxy.Parser.Parsed parse()
-
removeCaches
public static void removeCaches(Class<?>... classes)
-
defaultClassNameToDbName
public EntityProxy.Parser defaultClassNameToDbName(Function<String,String> classNameToDbName)
-
defaultPropertyNameToDbName
public EntityProxy.Parser defaultPropertyNameToDbName(Function<String,String> propertyNameToDbName)
-
addIgnoreFields
public EntityProxy.Parser addIgnoreFields(String[] fields)
-
-