怎样在mybatis里向mysql中插入毫秒数的时间?

怎样在mybatis里向mysql中插入毫秒数的时间?,第1张

概述由于业务场景需求,需要记录精准的时间,但是呢,又不要想使用int类型来存储时间,因为这样的可读性比较差了。怎样在mybatis中向数据库插入毫秒级别的时间呢?首先,先来看看怎样向数据库中插入毫秒时间。这是关键问题,如果直接向数据库插入时间都无法完成,那就不要想借助其他工具能完成了。可以使用mysql客户端工具,插入一个时间,设置为datetime,尝试一下:CREATE TABLE `t_job_record` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',`job_name` varchar(50) NOT NULL DEFAULT '' COMMENT 'job的名称,建议使用job方法名',`status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态,0:未执行,1:正在执行,2:执行中断,5:执行完成',`exec_date_start` varchar(30) NOT NULL DEFAULT '' COMMENT '执行的开始日期',`exec_date_end` varchar(30) NOT NULL DEFAULT '' COMMENT '执行的结束日期',`req_params` varchar(1000) NOT NULL DEFAULT '' COMMENT '原始请求参数',`job_params` varchar(500) NOT NULL DEFAULT '' COMMENT '执行job的参数',`remark` varchar(500) NOT NULL DEFAULT '' COMMENT '备注,如执行中的简要描述',`update_times` int(11) NOT NULL DEFAULT '0' COMMENT '更新该记录的次数',`add_ip` varchar(32) NOT NULL DEFAULT '' COMMENT '请求的原始ip',`exec_server_ip` varchar(32) NOT NULL DEFAULT '' COMMENT '执行任务的ip',`req_server_ip` varchar(32) NOT NULL DEFAULT '' COMMENT '请求执行机器ip',`job_end_time` datetime() NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT 'job执行的结束时间,开始时间为create_time',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`),KEY `exec_date` (`exec_date_start`,`job_name`),KEY `idx_create_time` (`create_time`),KEY `idx_update_time` (`update_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO t_job_record SET job_name = '999', job_end_time = '2017-10-27 12:15:42.664' ;发现插入后,job_end_time ='2017-10-27 12:15:43';不满足需求,于是更改时间格式为datetime(3),保留3位小数ALTER TABLE t_job_exec_record CHANGE `job_end_time` `job_end_time` DATETIME(3) DEFAULT '1970-01-01 00:00:00.000' NOT NULL COMMENT 'job执行的结束时间,开始时间为create_time';然后再进行相同插入,即可完成毫秒数时间的写入。可以使用直接插入的方式进行记录后,就是考虑怎样使用工具进行完成插入了。//得到毫秒时间字符串,然后插入String dateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(new Date());//插入数据库<insert id="addJobExecRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">INSERT INTO t_job_record SET job_name = #{jobName}<if test="jobEndTime != null">,job_end_time = #{jobEndTime}</if></insert>如此,便可以记录准确的时间了。当然,还有另外的法子,那就是将该时间设置为 varchar 或者 char, 然后再以字符串形式写入即可。另附注: 记录金额时,一定要使用 decimal 而非 float 或者 double 或者使用整数来记录,然后在代码中转换格式,因为decimal会更精确。由于特殊需求场景出现,记录一下当留恋吧。

  由于业务场景需求,需要记录精准的时间,但是呢,又不要想使用int类型来存储时间,因为这样的可读性比较差了。

  怎样在mybatis中向数据库插入毫秒级别的时间呢?

  首先,先来看看怎样向数据库中插入毫秒时间。这是关键问题,如果直接向数据库插入时间都无法完成,那就不要想借助其他工具能完成了。   可以使用MysqL客户端工具,插入一个时间,设置为datetime,尝试一下:

() unsigned auto_INCREMENT COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT () COMMENT COMMENT COMMENT InnoDB CHARSET t_job_record job_name ,job_end_time ;

  发现插入后,job_end_time ='2017-10-27 12:15:43';不满足需求,于是更改时间格式为datetime(3),保留3位小数

t_job_exec_record CHANGE `job_end_time` `job_end_time` () COMMENT ;

  然后再进行相同插入,即可完成毫秒数时间的写入。

  可以使用直接插入的方式进行记录后,就是考虑怎样使用工具进行完成插入了。

String dateStr = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format( Date());

  如此,便可以记录准确的时间了。

  当然,还有另外的法子,那就是将该时间设置为 varchar 或者 char,然后再以字符串形式写入即可。

  另附注: 记录金额时,一定要使用 decimal 而非 float 或者 double 或者使用整数来记录,然后在代码中转换格式,因为decimal会更精确。

  由于特殊需求场景出现,记录一下当留恋吧。

总结

以上是内存溢出为你收集整理的怎样在mybatis里向mysql中插入毫秒数的时间?全部内容,希望文章能够帮你解决怎样在mybatis里向mysql中插入毫秒数的时间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1169099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存