1. 程式人生 > >mysql資料庫時間欄位相差8個小時解決辦法

mysql資料庫時間欄位相差8個小時解決辦法

資料庫->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