不同的数据库拥有不同的数据类型,就想不通的语言拥有不同的词汇表。但就像不通语言可以等同部分,不通数据库通常有他们之间的相同数据类型。OFBiz通过定义标准的”OFBiz数据类型“——对OFBiz来说的类型,来获得数据库独立性(连接不同数据库转换的能力)。这些OFBiz数据类型的每一种,OFBiz都有一个映射到等同数据库指定类型。这样,OFBiz代码只需处理一个单一的数据类型集合——OFBiz数据类型。OFBiz 翻译它自己的数据类型为指定数据库的类型。
数据类型的映射在${component:entity}\fieldtype文件夹中。支持的数据库有:Derby、PostgreSQL, MySQL, MSSQL, Oracle, MaxDB以及许多其它类型。目录为每个OFBiz支持的数据库包含一个映射文件 fieldtype<database-name>.xml(例如 fieldtypederby.xml)。每个映射文件通过<feld-type>元素加载到 ${component:entity}\config。
下面是mysql数据库和ofbiz数据类型的映射
<fieldtypemodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/fieldtypemodel.xsd">
<!-- ===================== field-type-def ==================== -->
<!-- General Types -->
<field-type-def type="blob" sql-type="LONGBLOB" java-type="java.sql.Blob"/>
<field-type-def type="byte-array" sql-type="LONGBLOB" java-type="byte[]"/>
<field-type-def type="object" sql-type="LONGBLOB" java-type="Object"/>
<field-type-def type="date-time" sql-type="DATETIME" java-type="java.sql.Timestamp"/>
<field-type-def type="date" sql-type="DATE" java-type="java.sql.Date"/>
<field-type-def type="time" sql-type="TIME" java-type="java.sql.Time"/>
<field-type-def type="currency-amount" sql-type="DECIMAL(18,2)" java-type="java.math.BigDecimal"/>
<field-type-def type="currency-precise" sql-type="DECIMAL(18,3)" java-type="java.math.BigDecimal"/>
<field-type-def type="fixed-point" sql-type="DECIMAL(18,6)" java-type="java.math.BigDecimal"/>
<field-type-def type="floating-point" sql-type="DOUBLE" java-type="Double"/>
<field-type-def type="numeric" sql-type="DECIMAL(20,0)" java-type="Long"/>
<field-type-def type="id" sql-type="VARCHAR(20)" java-type="String"/>
<field-type-def type="id-long" sql-type="VARCHAR(60)" java-type="String"/>
<field-type-def type="id-vlong" sql-type="VARCHAR(250)" java-type="String"/>
<field-type-def type="indicator" sql-type="CHAR(1)" java-type="String"/>
<field-type-def type="very-short" sql-type="VARCHAR(10)" java-type="String"/>
<field-type-def type="short-varchar" sql-type="VARCHAR(60)" java-type="String"/>
<field-type-def type="long-varchar" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="very-long" sql-type="LONGTEXT" java-type="String"/>
<field-type-def type="comment" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="description" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="name" sql-type="VARCHAR(100)" java-type="String"/>
<field-type-def type="value" sql-type="VARCHAR(255)" java-type="String"/>
<!-- Specialized Types -->
<field-type-def type="credit-card-number" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="credit-card-date" sql-type="VARCHAR(7)" java-type="String"/>
<field-type-def type="email" sql-type="VARCHAR(320)" java-type="String"/>
<field-type-def type="url" sql-type="VARCHAR(2000)" java-type="String"/>
<field-type-def type="id-ne" sql-type="VARCHAR(20)" java-type="String"/>
<field-type-def type="id-long-ne" sql-type="VARCHAR(60)" java-type="String"/>
<field-type-def type="id-vlong-ne" sql-type="VARCHAR(250)" java-type="String"/>
<field-type-def type="tel-number" sql-type="VARCHAR(60)" java-type="String"/>
</fieldtypemodel>