mysql資料庫時間欄位相差8個小時解決辦法
阿新 • • 發佈:2018-11-09
資料庫->mysql
持久層框架->mybatis
解決思路:使用mybatis提供的型別轉換器功能
建立DateHandler,指定泛型為Date
package cn.nsu.edu.web.four.handler.mybatis; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.*; import java.util.Calendar; import java.util.Date; /** * @author 墨盒 * @version 1.0 * @Date 2017/10/23 * @Time 18:19 * @Descorption */ public class DateHandler extends BaseTypeHandler<Date> { Log log = LogFactory.getLog(getClass()); @Override public void setParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException { // super.setParameter(ps, i, parameter, jdbcType); Timestamp timestamp = new Timestamp(parameter.getTime()); log.info("插入的時間 "+new Date(parameter.getTime())+ " "+timestamp); //指定Calendar即可解決時差 ps.setTimestamp(i,timestamp, Calendar.getInstance()); } @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException { preparedStatement.setString(i, date.toString()); } @Override public Date getNullableResult(ResultSet resultSet, String s) throws SQLException { return resultSet.getTimestamp(s, Calendar.getInstance()); } @Override public Date getNullableResult(ResultSet resultSet, int i) throws SQLException { // log.info("getNullableResult(ResultSet resultSet, int i) " + resultSet.getDate(i).toString()); return resultSet.getTimestamp(i, Calendar.getInstance()); } @Override public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException { return callableStatement.getTime(i, Calendar.getInstance()); } }
配置mybatis typeHandler
<typeAliases> <!--時間handler--> <typeAlias type="cn.nsu.edu.web.four.handler.mybatis.DateHandler" alias="dateHandler"/> </typeAliases> <!-- <typeAliases> 單個別名定義 type:pojo的路徑 alias:別名的名稱 <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> 批量別名定義 name:指定包名,將包下邊的所有pojo定義別名 ,別名為類名(首字母大寫或小寫都行) <package name="com.nsu.bean" /> </typeAliases> --> <typeHandlers> <!--此處只需要指定javaType即可,jdbcType不指定,只要mybatis sql傳入javaType型別即可呼叫該類 <typeHandler handler="cn.nsu.edu.web.four.handler.mybatis.DateHandler" javaType="java.util.Date" /> </typeHandlers>
使用方法——select語句不需要任何修改,insert、update、delete語句,傳參時最好指定typeHandler