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>
  • 相关阅读:
    OSPF LSA过滤简述 转自 huawei企业论坛
    distribute-list分发列表 转自 红茶三杯sina blog
    rip 协议号
    Ping命令的工作过程及单向Ping通的原因
    Cisco路由器故障诊断技术专题
    self-introduction for bleum (not in use)
    智能手环是什么情况
    页面置换算法 FIFO NUR LRU LFU
    慢慢来----由易语言想到的一点点
    ssh免密登录
  • 原文地址:https://www.cnblogs.com/eryuan/p/7944713.html
Copyright © 2011-2022 走看看