版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33222871/article/details/80168378
数据库->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