☰
Current Page
Main Menu
Home
Home
Editing
06.新建模型和属性
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
--- title: 新建模型和属性 date: 2023-09-25 17:31:34 permalink: /pages/81496a/ --- 基于元模型驱动的引擎,核心在于不用理会机械的CRUD,而只需要将主要经历专注在业务领域建模上,当模型建完后,crud的能力会自动具备。以下是三个demo模型: #### 2.6.1.1. **组织** 通过@Model注解定义模型名称,@Property声明属性, @ManyToOne和@OneToMany声明er关系: ```java @Model(name = "TestOrg",description = "测试组织") public class TestOrg extends BaseModel { @Property(displayName = "名称",displayForModel=true ) private String name; @ManyToOne @JoinColumn(name = "parent_id") private TestOrg parent; @OneToMany private List<TestUser> userList; public TestOrg getParent() { return (TestOrg) this.get("parent"); } public TestOrg setParent(TestOrg parent) { this.set("parent", parent); return this; } public List<TestUser> getUserList() { return (List<TestUser>) this.get("userList"); } public TestOrg setUserList(List<TestUser> userList) { this.set("userList", userList); return this; } public String getName() { return (String) this.get("name"); } public TestOrg setName(String name) { this.set("name", name); return this; } } ``` #### 2.6.1.2. **用户** 也可以只增加@Model,引擎会将类名作为模型名称以及表名。通过@Validate可以增加各类校验,get和set方法可以通过idea模板自动生成: ```js @Model public class TestUser extends BaseModel { @Property(columnName = "name", displayName = "名称",displayForModel = true) //@Validate.NotBlank private String name; @Validate.Email(message = "邮箱格式不正确") @Property(columnName = "email", displayName = "邮箱",dataType = DataType.TEXT) private String email; @Property(columnName = "status", displayName = "状态", dataType = DataType.ENUM, values = { @ModelEnum(label = "启用", value = "1"), @ModelEnum(label = "禁用", value = "0")}, defaultValue = "1") private Boolean status; @Property(columnName = "phone", displayName = "电话号码") @Validate.Phone(message = "手机号格式不正确") private String phone; @Validate.Max(110) @Property(columnName = "age", displayName = "年龄") private Integer age; @Validate.NotBlank @Property(columnName = "password", displayName = "密码") private String password; @Property(columnName = "test", displayName = "测试") private String test; @Property(columnName = "method", computeMethod = "method", displayName = "计算方法") private String method; @Property(columnName = "script", computeScript = "3+100", displayName = "计算脚本") private String script; @ManyToOne(displayName = "组织机构", cascade = {CascadeType.DEL_SET_NULL}) @JoinColumn(name = "org_id", referencedColumnName = "id") private TestOrg org; @Property(displayName = "selectStatus", defaultValue = "1") @Selection(values = { @Option(label = "启用", value = "1"), @Option(label = "禁用", value = "2"), @Option(label = "已删除", value = "3") }) private String selectStatus; @Property(displayName = "selectMetod") @Selection(method = "selectMetod") private String selectMetod; @Property(displayName = "selectModel") @Selection(model = "TestOrg", properties = "name", orderBy = "name desc") private String selectModel; public Date getCreate() { return getDate("create"); } public void setCreate(Date create) { this.set("create", create); } public String getPhone() { return getStr("phone"); } public void setPhone(String phone) { this.set("phone", phone); } public String getEmail() { return getStr("email"); } public void setEmail(String email) { this.set("email", email); } public void setPassword(String password) { this.set("password", password); } public String getPassword() { return getStr("password"); } public String getName() { return getStr("name"); } public void setName(String name) { this.set("name", name); } public Integer getAge() { return getInt("age"); } public void setAge(Integer age) { this.set("age", age); } public TestOrg getOrg() { return (TestOrg) this.get("org"); } public TestUser setOrg(TestOrg org) { this.set("org", org); return this; } } ``` get模板为: ``` #if($field.modifierStatic) static ## #end $field.type ## #if($field.recordComponent) ${field.name}## #else #set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))) #if ($field.boolean && $field.primitive) is## #else get## #end ${name}## #end () { #if($field.type == "java.util.Date") return getDate("$field.name"); #elseif($field.type == "java.sql.Timestamp") return getTimestamp("$field.name"); #elseif($field.type == "java.time.LocalDateTime") return getLocalDateTime("$field.name"); #elseif($field.type == "java.sql.Time") return getTime("$field.name"); #elseif($field.type == "java.lang.Integer") return getInt("$field.name"); #elseif($field.type == "java.lang.Long") return getLong("$field.name"); #elseif($field.type == "java.lang.Double") return getDouble("$field.name"); #elseif($field.type == "java.lang.Float") return getFloat("$field.name"); #elseif($field.type == "java.lang.Short") return getShort("$field.name"); #elseif($field.type == "java.lang.Byte") return getByte("$field.name"); #elseif($field.type == "java.lang.Boolean") return getBoolean("$field.name"); #elseif($field.type == "java.lang.String") return getStr("$field.name"); #elseif($field.type == "java.lang.Number") return getNumber("$field.name"); #elseif($field.type == "java.math.BigDecimal") return getBigDecimal("$field.name"); #elseif($field.type == "java.math.BigInteger") return getBigInteger("$field.name"); #else return ($field.type)this.get("$field.name"); #end } ``` set模板为: ``` #set($paramName = $helper.getParamName($field, $project)) #if($field.modifierStatic) static ## #end $classname set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) { #if ($field.name == $paramName) #if (!$field.modifierStatic) this.## #else $classname.## #end #end set("$field.name", $paramName); return this; } ``` ### 2.6.2. **属性校验说明** TestUser的password通过@Validate.NotBlank设置不能为空的校验 ,呈现效果:  TestUser的email通过@Validate.Phone(message = "手机号格式不正确")设置手机格式的校验,呈现效果:  ### 2.6.3. **ER关系说明** ● OneToMany 一对多 ```java @OneToMany private List<TestUser> userList; ``` ● ManyToOne 多对一 ``` @ManyToOne(displayName = "组织机构")@JoinColumn(name = "org_id", referencedColumnName = "id") private TestOrg org; ``` ● ManyToMany 多对多 ``` @ManyToMany @JoinTable(name = "role_user", joinColumns = @JoinColumn(name = "role_id", nullable = false), inverseJoinColumns = @JoinColumn(name = "user_id", nullable = false)) private List<TestUser> userList; ```
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel