通过Java定义数据模型
模型定义必看:
- Class以OC开头命名,遵循驼峰格式
- 在应用项目中,如某个Class为Hibernate的可持久化对象(entity),则需继承OCBase Class。如该Class中的信息仅用来展示,不会被用来进行数据过滤,则可考虑按JSON格式来存储,需实现IBaseJsonObject接口。
- Class上需添加Lombok @Data注解
针对日期类型字段,需依据实际业务场景显示的设置如下注解(此处设置两个工具类库的注解,是因为Spring Boot默认使用的是Jackson框架,平台内部采用了Gson框架,为了避免开发时出现一些兼容问题,故设置两个注解)
注解说明@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
此注解为Jackson提供,用来规定日期字段的接收和响应格式 @JsonAdapter(OCDateTimeTypeAdapter.class)
此注解为Gson提供,用来反序列化日期字段格式。目前只有两个可选值: OCDateTimeTypeAdapter.class: 将日期转换为 yyyy-MM-dd HH:mm:ss
OCDateTypeAdapter.class:将日期转换为 yyyy-MM-dd
- 实体中的字段如需被用在前端UI页面中,则需添加平台提供的注解:@OcColumn(title = '字段中文含义')
- 针对设置了双向关联的实体(比如A实体关联了B实体,B实体中又关联了A实体),在某些场景调用ToString()的时候会出现StackOverFlow错误,参见:https://blog.csdn.net/qq_38425719/article/details/110503206 此文方法处理。
设置注解规则:
- 平台目前采用了Hibernate框架做OR Mapping映射,开发者只需定义POJO Class即可,不需显示的在Class中添加Hibernate JPA相关注解。平台会通过字节码增强的方式为Class添加Hibernate JPA注解。
如下几种场景需开发者手工配置添加注解的规则,详细配置参见:为Entity模型增加Annotation相关配置
场景描述注解配置说明A与B实体是OneToMany和ManyToOne的关系 getOneToManyAndManyToOnePairList 通过设置OneToMany和ManyToOne注解,在关系型数据库中会少生成一张中间表。 A与B实体是ManyToMany的关系 getManyToManyFieldsForCollectionType
平台针对实体中的集合类型字段,默认的注解是OneToMany。此时针对关系型数据库来说,会创建一个A与B的中间表,该中间表中指向B实体的字段上会有唯一性约束限制。 如果是ManyToMany的关系,就须设置@ManyToMany注解。这样A与B的中间表上不再会有唯一性约束。 针对一些特定字段,设置该字段在关系型数据库表中的名字、类型等信息 getCustomFields
1、实体中定义的字段,默认是按照字段名来创建数据库表中的字段名。各数据库中有一些保留关键字是不允许在创建表时被使用的,例如:MySQL数据库中 key 这个字符串就是一个关键字。 2、针对String类型的字段,Hibernate框架做ORMapping映射时,在关系型数据库中的默认类型及长度为varchar(255),如需显示的设置该字段的类型和长度,就需手工配置注解规则 3、Oracle11G规定字段名不能大于30位, 定义OneToMany、ManyToMany的中间表名 getJoinTableNames
1、目前平台默认生成的中间表的表名格式为:A实体的SimpleName + "_" + A实体中指向B实体的字段名 + "_" + B实体的SimpleName 2、Oracle11G规定数据库表名不能大于30位,Postgresql、Mysql不能大于64位。故在使用某些数据库时,需手工配置中间表的名称。 定义实体在关系型数据库中的表名、索引、唯一键 getClassAndTableNameAndIndexNameAndUniqueNameListPairs
1、定义实体在关系型数据库中的表名 2、定义表中的索引 3、定义表上的唯一键 断开实体之间的级联关系 getAssociationsForNotCascade
1、目前平台针对实体中关联其他实体的字段上默认设置了 @Cascade({CascadeType.ALL})
2、某些场景不需设置级联关系的,需手工配置规则,将级联关系去掉(目前平台只支持将所有的级联关系去掉,暂不支持只移除某种级联关系)
针对平台提供的通用业务数据模型进行扩展:
平台目前提供了如下几类业务的通用业务数据模型,如开发者觉得字段不足、想添加新的数据模型,则可按如下方式进行配置:
通用业务数据模型 | 对应的JAR | AnnotationContext文件 |
---|---|---|
客户 | open-care-customer-entity.jar | CustomerAnnotationContext.java |
产品 | open-care-product-entity.jar | ProductAnnotationContext.java |
订单 | open-care-order-entity.jar | OrderAnnotationContext.java |
库存 | open-care-stock-entity.jar | StockAnnotationContext.java |
医疗 | open-care-medical-entity.jar | MedicalAnnotationContext.java |
问卷 | open-care-survey-entity.jar | SurveyAnnotationContext.java |
扩展既有实体中的字段:
1、在对应微服务的AnnotationContext.getExtendFields方法中添加配置
范例 | |
---|---|
添加基本类型字段 | organizationFieldDTOS.add(new OcFieldDTO("organizationNo", String.class, "机构编号")); |
添加集合类型字段 | supplerFieldDTOS.add(new OcFieldDTO("interfaceSetting", new TypeToken<List<OCInterfaceSetting>>() { |
添加Map类型字段 | policyRiskDTOs.add(new OcFieldDTO("tags", new TypeToken<Map<String, String>>() { |
自定义实体:
在open-care-app-entity-micro-annotated工程中的 src/main/com.open_care目录下各微服务目录下添加实体