1. 程式人生 > >怎樣在mybatis裏向mysql中插入毫秒數的時間?

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

問題 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中插入毫秒數的時間?