模型定义在数据库中的映射
Oinone中通过定义模型来建立数据表,使用注解的方式来使多张表之间的关联。
-
数据库字段与模型定义字段映射
package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.core.common.enmu.DataStatusEnum; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; import pro.shushi.pamirs.meta.enmu.DateFormatEnum; import pro.shushi.pamirs.meta.enmu.DateTypeEnum; import pro.shushi.pamirs.meta.enmu.MimeTypeEnum; import java.math.BigDecimal; import java.util.Date; @Model.model(PamirsDemo.MODEL_MODEL) @Model(displayName = "PamirsDemo") public class PamirsDemo extends IdModel { public static final String MODEL_MODEL = "top.PamirsDemo"; @Field.Binary(mime = MimeTypeEnum.html) @Field(displayName = "二进制类型") private Byte[] byteType; @Field.Integer @Field(displayName = "整数") private Long longType; @Field.Float @Field(displayName = "浮点数") private BigDecimal floatType; @Field.Boolean @Field(displayName = "布尔类型") private Boolean booleanType; @Field.Enum @Field(displayName = "枚举") private DataStatusEnum enumType; @Field.String @Field(displayName = "字符串") private String stringType; @Field.Text @Field(displayName = "多行文本") private String textType; @Field.Html @Field(displayName = "富文本") private String richText; @Field.Date(type = DateTypeEnum.DATE, format = DateFormatEnum.DATE) @Field(displayName = "日期类型") private Date dataType; @Field.Date(type = DateTypeEnum.DATETIME, format = DateFormatEnum.DATETIME) @Field(displayName = "日期时间类型") private Date dataTimeType; @Field.Money @Field(displayName = "金额") private BigDecimal amount; }
更多字段基础请参考文档字段基础与复合
-
多对一的关系映射
例:设计一张教师表,一张科目表,教师表对科目表属于多对一的关系,在教师表中使用科目id管理关联关系。
教师表teacher
科目表professional
那么在Oinone的模型定义中,这两张表定义是这样的;
教师模型
package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; @Model.model(Teacher.MODEL_MODEL) @Model(displayName = "教师", summary = "教师") public class Teacher extends IdModel { public static final String MODEL_MODEL = "top.Teacher"; @Field.String @Field(displayName = "教师名字") private String teacherName; @Field.Integer @Field(displayName = "科目id") private Long professionalId; @Field(displayName = "关联科目") @Field.many2one @Field.Relation(relationFields = {"professionalId"},referenceFields = {"id"}) private Professional professional; }
该模型创建的数据库如下:
科目模型
package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; import java.util.List; @Model.model(Professional.MODEL_MODEL) @Model(displayName = "科目", summary = "科目") public class Professional extends IdModel { public static final String MODEL_MODEL = "top.Professional"; @Field.String @Field(displayName = "科目名称") private String professionalName; }
该模型创建的数据库如下:
使用@Field.many2one注解管理教师与科目的多对一关系,在表操作时会自动维护关联关系。如果业务上是一对一的关系,在模型定义中建议使用多对一进行关联。
-
一对多的关系映射
例:设计一张学生表,一张科目表,学生表对科目表属于一对多的关系,在科目表里使用学生ID与学生表进行关联。
学生表student
科目表professional
那么在Oinone的模型定义中,这两张表定义是这样的;
学生模型package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; @Model.model(Student.MODEL_MODEL) @Model(displayName = "学生", summary = "学生") public class Student extends IdModel { public static final String MODEL_MODEL = "top.Student"; @Field(displayName = "学生名字") @Field.String private String studentName; @Field(displayName = "学生ID") @Field.Integer private Long studentId; }
该模型创建的数据库如下:
科目模型
package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; import java.util.List; @Model.model(Professional.MODEL_MODEL) @Model(displayName = "科目", summary = "科目") public class Professional extends IdModel { public static final String MODEL_MODEL = "top.Professional"; @Field.String @Field(displayName = "科目名称") private String professionalName; @Field(displayName = "关联学生") @Field.one2many @Field.Relation(relationFields = {"id"},referenceFields = {"studentId"}) private List<Student> studentList; }
在科目模型中建立@Field.one2many来管理学生和科目的关联关系。该模型创建的数据库如下:
-
多对多关系的关系映射
例:设计一张教师表,一张学生表,教师表对学生表属于多对多的关系,使用中间表管理教师和学生的关联关系。
教师表teacher
学生表student
教师学生中间表teacher_rel_student
那么在Oinone的模型定义中,多对多关系是这样定义的;
教师模型
package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; import java.util.List; @Model.model(Teacher.MODEL_MODEL) @Model(displayName = "教师", summary = "教师") public class Teacher extends IdModel { public static final String MODEL_MODEL = "top.Teacher"; @Field.String @Field(displayName = "教师名字") private String teacherName; @Field(displayName = "教师关联学生") @Field.many2many(through = TeacherRelStudent.MODEL_MODEL, relationFields = {"teacherId"}, referenceFields = {"studentId"}) @Field.Relation(relationFields = {"id"}, referenceFields = {"id"}) private List<Student> studentList; }
该模型创建的数据库如下:
学生模型
package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; @Model.model(Student.MODEL_MODEL) @Model(displayName = "学生", summary = "学生") public class Student extends IdModel { public static final String MODEL_MODEL = "top.Student"; @Field(displayName = "学生名字") @Field.String private String studentName; }
该模型创建的数据库如下:
教师学生关系模型
package pro.shushi.pamirs.top.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.BaseRelation; @Model.model(TeacherRelStudent.MODEL_MODEL) @Model(displayName = "教师学生关系表", summary = "教师学生关系表") public class TeacherRelStudent extends BaseRelation { public static final String MODEL_MODEL = "top.TeacherRelStudent"; @Field.Integer @Field(displayName = "教师ID") private Long teacherId; @Field.Integer @Field(displayName = "学生ID") private Long studentId; }
该模型创建的数据库如下:
使用@Field.many2many注解以及中间管理关联关系,在表操作时自动维护关联关系。
- 关联字段的使用详见O2M、M2O、M2M关系字段
Oinone社区 作者:yexiu原创文章,如若转载,请注明出处:https://doc.oinone.top/dai-ma-shi-jian/16109.html
访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验