怎樣在mybatis裏向mysql中插入毫秒數的時間?
阿新 • • 發佈:2017-10-27
問題 gin 開始 myba table 使用 可讀性 null tab
由於業務場景需求,需要記錄精準的時間,但是呢,又不要想使用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 或者 dubble 或者使用整數來記錄,然後在代碼中轉換格式,因為decimal會更精確。
由於特殊需求場景出現,記錄一下當留戀吧。
怎樣在mybatis裏向mysql中插入毫秒數的時間?