如何在Exposed DAO中使用NOW()函数设置timestamp字段实现数据插入
解决方案
要实现让数据库自动插入当前时间(对应SQL里的NOW()),在Exposed框架里有两种简洁的方式,看你更倾向哪种:
方法1:给表字段设置默认值(推荐,一劳永逸)
直接修改你的表定义,给created_date字段加上数据库层面的默认值,这样每次插入数据时如果不指定该字段,数据库会自动填充当前时间:
object AsdTable : IntIdTable("asd") { val created_date = timestamp("created_date").default(CurrentDateTime) val code = varchar("code", 64) }
对应的插入代码就可以简化成(不用手动设置createdDate):
transaction { AsdEntity.new { code = "oook" } }
当然如果你想显式指定用当前时间,也可以在new块里写上createdDate = CurrentDateTime,效果是一样的。
方法2:插入时显式指定当前时间表达式
如果不想修改表结构,直接在插入代码里使用Exposed提供的CurrentDateTime表达式,它会自动转换成对应数据库的NOW()(或CURRENT_TIMESTAMP等适配函数):
transaction { AsdEntity.new { createdDate = CurrentDateTime code = "oook" } }
为什么用CurrentDateTime而不是手动生成时间?
CurrentDateTime是Exposed的内置数据库表达式,它会让数据库层面生成当前时间,比你在Kotlin代码里用LocalDateTime.now()更准确(避免应用服务器和数据库服务器的时间差),同时还能自动适配不同数据库的语法,不用操心MySQL、PostgreSQL等的函数差异。
内容的提问来源于stack exchange,提问作者Alex Bashkatov
相关产品推荐
相关产品推荐

