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对象
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。