model structure entity - jmr-source/doc GitHub Wiki

模型结构 - entity(数据库、Java类)


目录


###例子位置:###

  • demo/model/model.jmr.xml 任务中的 model/entity

本章子内容

阅读前需要了解的知识

模型


entity类别

entity模型包含了2种类型数据库和Java类,其中数据库类型又包括表模型和类模型,它们的结构如下。

  • 数据库
    • 表(table)
    • 视图(view)
  • java类

表(table)

数据库中有张表book,id是主键,包括name,type,regist_time等字段。

转换成模型后的结构如下(如何转换模型请阅读:模型转换

结构说明

Property(属性)

  • 默认
  • name:从表(table)名转换而来,和表名一致,可修改。
  • relation:模型在组中的关系,由用户自己填写,用来在模板中获取模型,可修改。

  • 特性
  • from:因为模型来自数据库,所以from的值为db。
  • type:因为模型是表(table)类型,所以type的值为table。

  • 新设

新设是用户自己定义属性的地方,可以在此定义额外的属性。

我们可在此新设修改属性,或者在预设中设置属性,更详细的内容,请阅读:property - 属性

Field(字段)

  • 默认

  • id:字段id,和数据库表的(table)字段名一致,作为唯一标识,不可修改。

  • name:字段名,和数据库表的(table)字段名一致,不同于id,可以修改。

  • isUsed:字段是否被使用,默认为true。

我们可以新设修改属性,其中name可以通过转换和预设得到新的值,更详细的内容,请阅读:field - 字段

  • 类型:type和fullType用作语言的类型和完整类型,jdbcType和dbType为数据库类型的映射。

  • type:字段类型,默认为null。如Stirng、int、Integer。

  • fullType:字段完整类型,默认为null。如java.lang.String、java.util.Date。

  • jdbcType:jdbcType是jdbc统一标准的类型,我们通过jdbcType类型映射到实际的类型。

  • dbType:dbType是数据库实际类型,它也是按jdbc标准得到的,但是每个数据库都有自己的类型规则。

我们可以新设修改属性,其中type和fullType以jdbcType为原型,通过转换和预设得到新的值,更详细的内容,请阅读:field - 字段

关于jdbcType:

不同数据库所支持的SQL类型之间有很大的不同,比如Oracle中有DECIMAL类型,
Mysql中则没有,Mysql的varchar类型对应到Oracle却是varchar2。类似的,
大部分数据库都有自己的类型规则。

幸运的是,各大数据库厂商都为自家的数据库提供了jdbc驱动包,它会按照jdbc标准,
把自己的SQL类型转换成对应的jdbc类型,而这些jdbc类型都来自java.sql.Types中。

以下是所有的类型:

ARRAY, BIGINT, BINARY, BIT, BLOB, BOOLEAN, CHAR, CLOB,
DATALINK, DATE, DECIMAL, DISTINCT, DOUBLE, FLOAT,
INTEGER, JAVA_OBJECT, LONGNVARCHAR, LONGVARBINARY, LONGVARCHAR,
NCHAR, NCLOB, NULL, NUMERIC, NVARCHAR,
OTHER, REAL, REF, ROWID, SMALLINT, SQLXML, STRUCT,
TIME, TIMESTAMP, TINYINT, VARBINARY, VARCHAR
  • 数据库:数据库表和视图所包含的一些固有属性。

  • isNull:字段是否为空,如果在数据库中,表的字段设置了非空,则为true,否则为false。

  • defaultValue:字段默认值,如果在数据库中,表的字段设置了默认值赋予defaultValue,否则为null。

  • isAutoIncrement:字段是否自动增长,如果在数据库中,表字段设置了自动增长,则为true,否则为false,一般多见于主键。

  • size:字段的长度,在数据库中,得到表的字段的长度赋予size。

  • 表:数据库中表独有的属性(视图不包括)
  • isPk:字段是否为主键,如果数据库中字段为主键,则为true,否则为false。
  • isFk:字段是否为外键,如果数据库中字段为外键,则为true,否则为false。
  • fkEntityName:外键对应的主表。
  • fkFieldName:外键对应的主表字段。

book表除了自己本身,还有一张从表chapter,它的book_id是外键,关联的是book表的id。

book表的字段id、name、type、regist_time,id是主键,所以isPk为true。

chapter表的字段id、name、book_id,主键是id,所以isPk为true,book_id是外键,所以isFk为true,外键对应的主表fkEntityName为book,对应的字段fkFieldName为id。

Column(列)

除了id、name、type这些固定的列,用户还可以根据自己的需要新加列。新设列相当于给每个字段都添加了新的属性,在具体的业务需求中,我们还需要加入一些列来完善我们的模型。

比如在界面中,我们需要新设fieldName、controlType、isQuery三个列。

  • fieldName列:字段的名称,在新增和修改页面中使用到。
  • controlType列:控件的类型,有text、select和date,在新增和修改页面中使用到。
  • isQuery列:字段是否被查询,在查询页面使用到。

关于新设和修改Column,更详细的内容,请阅读:column - 列

Data(字段数据)

字段除了Column这样的公共属性外,每个字段自己还有私有的属性,它就是data。在data中,我们可以设定多个键值。

选中任何字段后,都可以设置它的data。

选中后可以设置字段的私有属性。

类型字段是一个下拉框select,select的option有2项,novel和magazine,value为0和1。

关于新设和修改Data,更详细的内容,请阅读:data - 字段数据

视图(view)

数据库中有张视图vw_book_chapter,它是book表和chapter的关联查询,查询的结果是2个字段 name和chapter_name。

转换成模型后的结构如下(如何转换模型请阅读:模型转换), 我们可以看到视图模型和数据库模型不同的一点在于,视图模型的Field中没有表的部分。

为什么没有表这个部分呢,很好理解,因为视图和表不同,它没有isPk(主键)、isFk(外键)、fkEntityName(外键对应的主表)、fkFieldName(外键对应的主表字段)。

视图模型其它部分的内容同表模型,请参考表模型。

Java类

此类有4个属性id、name、type、registTime,还有默认构造方法,带参数构造方法和所有属性的get/set方法。

从Java类转换而来,转换成模型后的结构如下(如何转换模型请阅读:模型转换

Property(属性)

  • 默认
  • name:从类名转换而来,和类名一致。
  • relation:模型在组中的关系,由用户自己填写,用来在模板中获取模型。

  • 特性
  • from:因为模型来java类,所以from的值为java。
  • type:无。

  • 新设

新设是用户自己定义属性的地方,可以在此定义额外的属性。

我们可在此新设修改属性,或者在预设中设置属性,更详细的内容,请阅读:property - 属性

Field(字段)

  • 默认

  • id:字段id,和Java类的字段名一致,作为唯一标识,不可修改。

  • name:字段名,和Java类的字段名一致,不同于id,可以修改。

  • isUsed:字段是否被使用,默认为true。

我们可以新设修改属性,其中name可以通过转换和预设得到新的值,更详细的内容,请阅读:field - 字段

  • 类型:type和fullType用作语言的类型和完整类型,jdbcType和dbType为数据库类型的映射。

  • type:字段类型,和java字段类型一致。如Stirng、int、Integer。

  • fullType:字段完整类型,和java字段完整类型一致。如java.lang.String,java.util.Date。

  • jdbcType:默认为null,jdbcType是jdbc统一标准的类型,我们通过jdbcType类型映射到实际的类型。

  • dbType:默认为null,dbType是数据库实际类型,它也是按jdbc标准得到的,但是每个数据库都有自己的类型规则。

我们可以新设修改属性,其中type和fullType以jdbcType为原型,通过转换和预设得到新的值,更详细的内容,请阅读:field - 字段

区别于数据库模型,java类模的字段只有默认和类型2个部分。

entity的应用

在模板中,使用<entity>标签调用模型。

<entity>有2个属性

  • var:设置新变量名,在模板中指向这个entity模型。
  • relation:模型的关系,用户自定义,比如上面的book和chapter是一对多的关系,我们设置book的relation为one,chapterd的relation为many。

在模板中,选择对应的模型,就可以得到entity的提示。

模板中,relation指定many,即book,var新设变量名object,这个object将指向这个entity模型。

运行结果

<entity>标签需要和其他标签配合使用:

更具体的使用方法,请阅读以下实战模板中的<entity>标签。

⚠️ **GitHub.com Fallback** ⚠️