Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

shuhaoc/auto-assembler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

85 Commits

Repository files navigation

概览

核心概念

Auto assembler,自动装载器,用于自动完成domain object与pojo之间或pojo之间的转换。

AutoAssembler主要有两类转换方法,即assemble和disassemble。 assemble是将源对象装载为目标对象,源对象一般是domain object或POJO,目标对象一定是POJO; 相反地,disassemble是指目标对象反装载为源对象。

AutoAssembler对POJO的约束是:

  • 具有公开的无参构造方法
  • 使用公开的setter/getter访问属性
  • 允许使用继承,但是所有fields的setter和getter和该field在同一个类中定义

对于不支持空参构造的非POJO对象,主要是domain object,可以使用ConvertibleBuilder作为装载或反装载的中介类。 ConvertibleBuilder实现类必须符合POJO相同的setter/getter的约束。

主要API

Auto assembler提供的API除了AutoAssembler类以外,还包括一系列注解、接口和工具类,注解包括:

  • FieldMapping 配置字段映射
  • Convertible 配置嵌套转换
  • RuntimeType & MappedClass 配置多态类型
  • SkippedField 配置字段跳过转换

接口包括:

  • ConvertibleEnum 定义可转换枚举,实现枚举与其他类型比如Integer互转
  • ConvertibleBuilder 定义转换对象的Builder,用于解决无参构造问题和封装构造复杂性
  • ClassifiedConverter 定义字段转换器,或者使用Guava的Converter

工具类包括:

  • AutoAssemblers 提供已构造好的单例对象
  • AutoAssemblerBuilder 用于自定义AutoAssembler

AutoAssembler对象比较重,使用时建议使用单例,比如AutoAssemblers.getDefault()。

功能说明

基本转换功能

转换器

转换器(ClassifiedConverter)是AutoAssembler用于进行字段类型转换的"元器件"。 默认的AutoAssembler(使用AutoAssemblers.getDefault()获取的单例)拥有一组内建的转换器,支持以下类型的互相转换:

类型1 类型2 备注
String Integer
String Long
String Float
String Double
String Boolean
String BigDecimal
String Date
String LocalDateTime
String LocalDate
String LocalTime
Date LocalDateTime yyyy-MM-dd HH:mm:ss
Date LocalDate yyyy-MM-dd
Date LocalTime HH:mm:ss
Date java.sql.Date
Date java.sql.Time
Date java.sql.Timestamp
String Enum
ConvertibleEnum T
int Integer
long Long
float Float
double Double
BigDecimal Integer
BigDecimal Long
BigDecimal Float
BigDecimal Double

AutoAssembler内部持有一个转换器表,在转换字段时使用"instanceof"规则查找合适转换器,其中越是后面注册的转换器优先级越高。 比如类型A和B已经注册有转换器,那么A的实例,可以是子类的实例,就可以与B的实例互相转换。

除了内建的转换器以外,还可以在构造时使用AutoAssemblerBuilder注册ClassifiedConverter或com.google.common.base.Converter作为转换器。 另外,针对特定的字段,还可以使用@FieldMapping注解的customConverterClass属性注册自定义转换器。

逐字段转换

字段映射

多态转换

转换Builder

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /