怎樣在mybatis里向mysql中插入毫秒數的時間?


  由於業務場景需求,需要記錄精准的時間,但是呢,又不要想使用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會更精確。

  由於特殊需求場景出現,記錄一下當留戀吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM