mybatis實現自定義typeHandler

java8之前的日期處理有多噁心,相信很多人都深有體會。與mabatis集成查詢數據庫中的日期字段映射爲java日期類型或者字符型的時候,會多出一個".0"。固然能夠自行處理。可是顯得太不優雅。能夠經過自定義一個數據類型轉換器,來格式化。java

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

@MappedJdbcTypes(JdbcType.TIMESTAMP)
@MappedTypes(String.class)
public class TimeTypeHandler extends BaseTypeHandler<String>{

    @Override
    public String getNullableResult(ResultSet arg0, String arg1) throws SQLException {
        Timestamp timestamp = arg0.getTimestamp(arg1);
        return DateFormatUtils.format(timestamp, "yyyy-MM-dd HH:mm:ss");
    }

    @Override
    public String getNullableResult(ResultSet arg0, int arg1) throws SQLException {
        return arg0.getString(arg1);
    }

    @Override
    public String getNullableResult(CallableStatement arg0, int arg1) throws SQLException {
        return arg0.getString(arg1);
    }

    @Override
    public void setNonNullParameter(PreparedStatement arg0, int arg1, String arg2, JdbcType arg3) throws SQLException {
        arg0.setString(arg1, arg2);
    }

}

若是是單獨使用mybatis,在配置文件里加入spring

<typeHandlers>
  <typeHandler handler="your.package.TimeTypeHandler"/>
</typeHandlers>

若是是和spring集成sql

先建立一個自定義轉換器的bean數據庫

<bean id="typeHandler" class="yourpackage.TimeTypeHandler" />

而後在注入apache

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath*:mybatis/xxx/*Mapper.xml"/>
    <property name="typeHandlers" ref="typeHandler"/>
</bean>

 

可是,因爲java中的時間格式實在太噁心了。因此想把Date類型所有轉換爲LocatDate,LocalTime,LocalDateTime。對於LocalDateTime類型的數據,一樣須要專門的轉換器來處理。你固然能夠本身實現一個。不過mybatis官方已經實現了。經過maven的方式引進項目中mybatis

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-typehandlers-jsr310</artifactId>
  <version>1.0.0</version>
</dependency>

若是mybatis是3.4以上的版本,就能夠直接使用了。若是是3.4如下的版本,那麼還須要參照剛纔上面的作法,將轉換器注入mybatis中。app

獲得轉換器的beanmaven

<bean id="typeHandler" class="org.apache.ibatis.type.LocalDateTimeTypeHandler" />

而後注入ide

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath*:mybatis/xxx/*Mapper.xml"/>
    <property name="typeHandlers" ref="typeHandler"/>
</bean>
相關文章
相關標籤/搜索