java8在JSR 310提案中,引入了新的时间日期类型java.time.*
,这个包下的类借鉴了joda-time
的设计,是线程安全的,提供很多方便的格式化与转换的方案。总之,java8以后官方强烈推荐使用新的java.time.*
替代老旧的java.util.Calendar
与java.util.Date
。
但是对于Grails 3框架来说,由于需要最低支持java 7,因此对于java8的一些特性并非开箱即用,而且官方文档至今的domain范例中,依旧使用Date
类型。
grails 官方有一个名为grails-java8的plugin,这个插件在官方文档并未提及,甚至插件本身没有任何文档。但是看插件的包名和测试代码,的确是测试JSR 310的支持,具体的插件效果可以参考测试代码。
这个比较特殊,hibernate本身是支持java.time
的(需hibernate5以上版本),在grails的domain中使用java.time类型,需要同时引入上述grails-java8 plugin和hibernate-java8两个依赖才可以。这样在Domain中就可以使用java.time类型了,JDBC这一层会自动转换为timestamp
类型。具体的类型对照表参考hibernate的官方文档: https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#basic-provided
在grails中使用java.time类型,在依赖中需要引入两个:
dependencies {
compile 'org.grails.plugins:grails-java8:1.2.2'
compile 'org.hibernate:hibernate-java8:5.2.13.Final'
}
就可以在grails3中使用java.time类型了。
如果想使用timestamptz
类型的时间日期格式,如: OffsetDateTime
,需要在mapping
配置中指明sqlType
为timestamptz
,如:
OffsetDateTime dateCreated
static mapping = {
dateCreated comment: '创建时间', sqlType: 'timestamptz', index: 'idx_date_created'
}
觉得有帮助的话,不妨考虑购买付费文章来支持我们 🙂 :
付费文章