跳至主要內容

对象映射规则

xuejmnet大约 2 分钟

对象映射规则

eq 2.4.1+版本提供mapping-strategy提供三个选择,默认(之前版本)是COLUMN_ONLY,新版本提供了额外两种选择PROPERTY_FIRSTPROPERTY_ONLYCOLUMN_AND_PROPERTY

如果你无法理解那么请在新项目的时候选择PROPERTY_FIRST❗️

如果你无法理解那么请在新项目的时候选择PROPERTY_FIRST❗️

如果你无法理解那么请在新项目的时候选择PROPERTY_FIRST❗️

convert函数表示映射的列名,值为propertyName+nameConversion如果属性添加@Column(value="xx")则结果为xx

方法描述
COLUMN_ONLYconvert(A.property)==convert(AVO.property)
PROPERTY_ONLYA.property==AVO.property
PROPERTY_FIRSTA.property == AVO.property 如果匹配不到并且AVO是函数则通过 convert(A.property)==convert(AVO.property)再次匹配比
COLUMN_AND_PROPERTYfindNull(convert(A.property),A.property)==findNull(convert(AVO.property),AVO.property)

实体和结果

public class A{
    @Column(value="c")
    private String a;
    private String b;
}

COLUMN_ONLY(默认)

表示实体的对应的列名和映射对象的列名相同能映射

A.a->AVO.d

A.b->AVO.b

N/A->AVO.a

PROPERTY_FIRST

表示实体的对应的属性名和映射对象的属性名相同能映射,和PROPERTY_ONLY的区别就是如果是函数式片段没有property通过alias来匹配

A.a->AVO.a

A.b->AVO.b

N/A->AVO.d

PROPERTY_ONLY

表示实体的对应的属性名和映射对象的属性名相同能映射

A.a->AVO.a

A.b->AVO.b

N/A->AVO.d

COLUMN_AND_PROPERTY

表示先使用实体对应的列名匹配如果无法映射则使用属性名进行匹配

A.a->AVO.d

A.b->AVO.b

N/A->AVO.a

Solon 下如何全局修改

public static void main(String[] args) {

    Solon.start(Main.class, args, app -> {

        app.onEvent(EasyQueryBuilderConfiguration.class, configuration -> {

            // COLUMN_ONLY: 默认策略, 表示实体的对应的列名和映射对象的列名相同能映射
            configuration.replaceService(EntityMappingRule.class, ColumnEntityMappingRule.class);
            // PROPERTY_ONLY: 表示实体的对应的属性名和映射对象的属性名相同能映射
            configuration.replaceService(EntityMappingRule.class, PropertyEntityMappingRule.class);
            // COLUMN_AND_PROPERTY: 表示先使用实体对应的列名匹配如果无法映射则使用属性名进行匹配
            configuration.replaceService(EntityMappingRule.class, TryColumnAndPropertyEntityMappingRule.class);
            // PROPERTY_FIRST: 推荐策略, 表示实体的对应的属性名和映射对象的属性名相同能映射,和PROPERTY_ONLY的区别就是如果是函数式片段没有property通过alias来匹配
            configuration.replaceService(EntityMappingRule.class, PropertyFirstEntityMappingRule.class);
        });

    });

}
上次编辑于:
贡献者: xuejiaming,link2fun