java8以前的日期處理有多噁心,相信不少人都深有體會。與mabatis集成查詢數據庫中的日期字段映射爲java日期類型或者字符型的時候,會多出一個".0"。當然可以自行處理。但是顯得太不優雅。可以通過自定義一個數據類型轉換器,來格式化。
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,在配置文件里加入
<typeHandlers> <typeHandler handler="your.package.TimeTypeHandler"/> </typeHandlers>
如果是和spring集成
先創建一個自定義轉換器的bean
<bean id="typeHandler" class="yourpackage.TimeTypeHandler" />
然後在注入
<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的方式引進項目中
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.0</version> </dependency>
如果mybatis是3.4以上的版本,就可以直接使用了。如果是3.4以下的版本,那麼還需要參照剛纔上面的做法,將轉換器注入mybatis中。
得到轉換器的bean
<bean id="typeHandler" class="org.apache.ibatis.type.LocalDateTimeTypeHandler" />
然後注入
<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>