mybatis 3.45版本不做任何處理就可以支持,以上版本可能不能支持。
package com.pasc.medical.esb.pmp.db.handle;
import org.apache.ibatis.type.LocalDateTimeTypeHandler;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
public class MLocalDateTimeTypeHandler extends LocalDateTimeTypeHandler{
@Override
public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
Timestamp timestamp = rs.getTimestamp(columnName);
Long remindTime = timestamp.getTime();
return LocalDateTime.ofEpochSecond(remindTime,0, ZoneOffset.ofHours(8));
}
}
package com.pasc.medical.esb.pmp.config;
import com.pamc.mute.idworker.mybatis.GeneratorIdInterceptor;
import com.pasc.medical.esb.pmp.db.handle.MLocalDateTimeTypeHandler;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
/**
* mybatis的自定義配置,添加id-worker自動注入
*
*/
@org.springframework.context.annotation.Configuration
public class MybatisConfig implements ConfigurationCustomizer {
@Override
public void customize(Configuration configuration) {
// 設置null也返回
configuration.setCallSettersOnNulls(true);
// 設置一行都爲null也返回
configuration.setReturnInstanceForEmptyRow(true);
configuration.setJdbcTypeForNull(JdbcType.NULL);
//id自動注入攔截器
configuration.addInterceptor(new GeneratorIdInterceptor());
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
typeHandlerRegistry.register(MLocalDateTimeTypeHandler.class);
}
}
LocalDateTimeTypeHandler 內置的LocalDateTime類型處理。3.45和其它版本不一致
/**
* Copyright 2009-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ibatis.type;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
/**
* @since 3.4.5
* @author Tomas Rohovsky
*/
public class LocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType)
throws SQLException {
ps.setObject(i, parameter);
}
@Override
public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
return rs.getObject(columnName, LocalDateTime.class);
}
@Override
public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
//這裏調用的是連接池的方法,像druid就是直接拋出異常
return rs.getObject(columnIndex, LocalDateTime.class);
}
@Override
public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return cs.getObject(columnIndex, LocalDateTime.class);
}
}