ActiveRecord中的数据类型映射 - shuzheng/etmvc GitHub Wiki

etmvc中的ActiveRecord将数据表中的字段映射成模型类的字段,相应的将数据表中的字段类型映射成模型类的字段类型。

在多数情况下,ActiveRecord能够自动处理从JDBC类型到Java Object类型的映射,此种映射如下表所示:

JDBC 类型 Java Object 类型
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT Boolean
TINYINT Integer
SMALLINT Integer
INTEGER Integer
BIGINT Long
REAL Float
FLOAT Double
DOUBLE Double
BINARY byte.md
VARBINARY byte.md
LONGVARBINARY byte.md
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp

在类型的映射上可能存在一些需要转换的,比如在MSSQL数据库中定义了一个datetime的字段类型,而在模型类中定义了java.sql.Date类型。按照上表中的映射关系,将无法直接从datetime映射成java.sql.Date,所以需要作些转换。

我们需要为上面的这种转换编写一个转换器,转换器必须实现com.et.ar.Converter接口:

public class DateConverter implements Converter {
	@Override
	public Object convert(Object value) {
		if (value == null) {
			return null;
		}
		String s = value.toString().substring(0, 10);	//取yyyy-mm-dd
		return java.sql.Date.valueOf(s);
	}
}

这个转换器将对象value转换成java.sql.Date类型的对象,在上面的转换实现中,我们仅是简单地取前十个字符串,然后调用valueOf进行转换。

最后将这个转换器进行注册登记:

static{
	ConvertUtil.register(new DateConverter(), java.sql.Date.class);
}

好了,ActiveRecord在处理到需要映射成java.sql.Date类型的字段时会调用我们自定义的转换器进行处理。