1 Star 0 Fork 0

李根 / GnervToolsEntityExtendStarter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 3.12 KB
一键复制 编辑 原始数据 按行查看 历史
李根 提交于 2020-05-08 00:01 . 修改动态扩展参数为map类型

GnervBoot

entity-extend-spring-boot-starter

https://gitee.com/gnerv_admin/GnervToolsEntityExtendStarter


实体动态属性扩展插件 可以在不修改sql原始返回对象的基础上 动态添加扩展属性

此功能用于 集成第三方jar提供的controller service mapper方法时 无需修改源码或者重写接口方法 直接将指定属性注入自己的扩展对象

通过拦截mybatis的invocation对象 修改 MappedStatement 的xml映射对象, 先使用ResultMapUtils动态构建一个ResultMap对象(就是xml文件中的ResultMap对象映射器,返回参数设置为Map) 再在其中使用ResultMappingUtils添加ResultMapping映射对象 设置property值为注解中的key,其他属性按照配置设置 使用ConfigurationUtils将其注入mybatis全局xml映射配置

然后动态设置extend属性的ResultMap对象映射器,返回参数类型设置为上面动态注入的ResultMap 即可实现动态注入

返回数据结构为

{
user: {
    name: "admin"
    extend: {
        org: {
            name: "一级机构"
        },
        role: {
            name: "管理员"
        }
    }
}

依赖 版本
spring-boot-configuration-processor 2.2.6.RELEASE
spring-boot-autoconfigure 2.2.6.RELEASE
spring-boot-autoconfigure-processor 2.2.6.RELEASE
mybatis 2.1.1
lombok 1.18.10

在UserDTO中添加一个扩展属性 extend , 类型为 Map<String, Object>用于注入扩展对象

默认扩展属性名称为 extend 可在配置 application.yml 配置中自定义 (如果设置的名称在原实体中已经被sql赋值,则会覆盖原值)

spring.boot.extend.name = extend
public class UserDTO extends BaseDTO {

    private String ukId;
    private String account;
    private String username;
    private Integer status;
    private Integer sort;

    private String orgId;
    private List<String> roleIds;

    private Map<String, Object> extend;
}

为UserDTO对象扩展一个OrgDTO 在扩展类上添加 EntityExtend 注解 (可为同一个对象扩展多个扩展类 或者就将同一个扩展类扩展给多个对象)

@EntityExtend(
        masterEntity = {UserDTO.class, UserInfoDTO.class},
        selectMethod = "com.gnerv.boot.platform.mapper.OrgMapper.seletcOrgByUserId",
        column = "userId=uk_id",
        resultType = OrgDTO.class,
        mapKey = "org"
)
public class OrgDTO extends BaseDTO {

    private String ukId;
    private String parentId;
    private String code;
    private String name;
    private Integer status;
    private Integer sort;

}

@EntityExtend(
        masterEntity = {UserDTO.class},
        selectMethod = "com.gnerv.boot.platform.mapper.RoleMapper.selectRoleByUserId",
        column = "userId=uk_id",
        resultType = List.class,
        mapKey = "roles"
)
public class RoleDTO extends BaseDTO {

    private String ukId;
    private String code;
    private String name;
    private Integer status;
    private Integer sort;

    private List<String> menuIds;
}

在启动类上添加扫描地址(com.gnerv.tools.entity.extend)

在查询UserDTO对象时 会自动注入OrgDTO 和 RoleDTO对象

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/gnerv_admin/GnervToolsEntityExtendStarter.git
git@gitee.com:gnerv_admin/GnervToolsEntityExtendStarter.git
gnerv_admin
GnervToolsEntityExtendStarter
GnervToolsEntityExtendStarter
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891