zoukankan      html  css  js  c++  java
  • mybatis实现自定义typeHandler

    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>
  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/eryuan/p/7944713.html
Copyright © 2011-2022 走看看