# GnervToolsEntityExtendStarter **Repository Path**: gnerv_admin/GnervToolsEntityExtendStarter ## Basic Information - **Project Name**: GnervToolsEntityExtendStarter - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 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用于注入扩展对象 默认扩展属性名称为 extend 可在配置 application.yml 配置中自定义 (如果设置的名称在原实体中已经被sql赋值,则会覆盖原值) ```$xslt 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 roleIds; private Map 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 menuIds; } ``` 在启动类上添加扫描地址(com.gnerv.tools.entity.extend) 在查询UserDTO对象时 会自动注入OrgDTO 和 RoleDTO对象