1. 自定义日期类型处理器
继承mybatis提供的BaseTypeHandler覆写方法,
来转换Java和数据库中的字段
package cn.bitqian.config;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
/**
* 日期类型处理器
* 将日期类型转换为long/long转换为util.date
* 将Util.date 转换为数据库中的bigint(long)
* @author echo lovely
* @date 2020/9/11 21:15
*/
public class DateTypeHandler extends BaseTypeHandler<Date> {
// util.date ==> 插入数据库中的变为bigint类型
@Override
public void setNonNullParameter(PreparedStatement preparedStatement,
int i, Date date, JdbcType jdbcType) throws SQLException {
if (date != null) {
long time = date.getTime();
preparedStatement.setLong(i, time);
}
}
// 下面三个重载 用于查询数据库中的字段,转换为日期
@Override
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
System.out.println("obj========" + resultSet.getObject(s));
long birthdayTime = resultSet.getLong(s);
if (birthdayTime != 0)
return new Date(birthdayTime);
return null;
}
@Override
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
long birthdayTime = resultSet.getLong(i);
System.out.println(birthdayTime);
if (birthdayTime != 0)
return new Date(birthdayTime);
return null;
}
@Override
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long birthdayTime = callableStatement.getLong(i);
if (birthdayTime != 0)
return new Date(birthdayTime);
return null;
}
}
2. 配置自定义日期处理器
<!-- 指定额、日期类型处理器 -->
<typeHandlers>
<typeHandler handler="cn.bitqian.config.DateTypeHandler"/>
</typeHandlers>
3. 新增,查询
// 测试新增 日期转换为长整型
@Test
public void test1() {
SqlSession session = getSession();
if (session != null) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User(null, "lucy", "999", new Date());
int count = mapper.save(user);
System.out.println(count);
session.close();
}
}
@Test
public void test2() {
SqlSession session = getSession();
if (session != null) {
UserMapper mapper = session.getMapper(UserMapper.class);
// long int -> util.date
System.out.println(mapper.selectUserById(6));
session.close();
}
}
log4j debug如下