mysql日期存储为int,mybatis做ORM映射与java.util.Date的转换问题

原创 2016年08月29日 16:26:05

在mysql做数据库的应用中,日期类型经常回存储为int(10)类型。方便排序和计算。但是在java中用Date.getTime返回的是13位的Long。并且在实体中我们如果用long来存储会有诸多不便。所以涉及到了转换问题。在我的项目中,用的是mybatis做持久性框架。对于这个问题用了以下方法处理。

  1. 用mybatis generate时,配置实体中用date来覆盖数据库中的int类型。
<columnOverride column="birthday" javaType="java.util.Date" jdbcType="INTEGER" />  
  1. 自定义TypeHandler实现TypeHandler接口
@MappedTypes({ Date.class })  
@MappedJdbcTypes({ JdbcType.INTEGER })  
public class DateIntTypeHandler implements TypeHandler<Date> {  

    @Override  
    public void setParameter(PreparedStatement ps, int i, Date parameter,  
            JdbcType jdbcType) throws SQLException {  
        if (parameter == null) {  
            if (jdbcType == null) {  
                throw new TypeException(  
                        "JDBC requires that the JdbcType must be specified for all nullable parameters.");  
            }  
            try {  
                ps.setNull(i, jdbcType.TYPE_CODE);  
            } catch (SQLException e) {  
                throw new TypeException(  
                        "Error setting null for parameter #"  
                                + i  
                                + " with JdbcType "  
                                + jdbcType  
                                + " . "  
                                + "Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. "  
                                + "Cause: " + e, e);  
            }  
        } else {  
            int time = (int) (parameter.getTime() / 1000);  
            ps.setInt(i, time);  
        }  
    }  

    @Override  
    public Date getResult(ResultSet rs, String columnName) throws SQLException {  
        int res = rs.getInt(columnName);  
        long time = res * 1000L;  
        return new Date(time);  
    }  

    @Override  
    public Date getResult(ResultSet rs, int columnIndex) throws SQLException {  
        int res = rs.getInt(columnIndex);  
        long time = res * 1000L;  
        return new Date(time);  
    }  

    @Override  
    public Date getResult(CallableStatement cs, int columnIndex)  
            throws SQLException {  
        int res = cs.getInt(columnIndex);  
        long time = res * 1000L;  
        return new Date(time);  
    }  
}  
  1. 在mybatis的配置中引用自定义的转换处理类
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自动扫描mapping.xml文件 -->  
        <property name="mapperLocations" value="classpath:sqlmap/mysql/module/*/*.xml"></property>  
        <strong><property name="typeHandlers">  
            <array>  
                <bean name="dateIntTypeHandler" class="*.utils.mybatis.DateIntTypeHandler" />  
            </array>  
        </property></strong>  
    </bean>  

相关文章推荐

mybatis中Date和DateTime字段的插入

最近公司使用MyBatis3做数据持久层,在字段中有Date和DateTime类型,在插入数据时只要将实体的属性设置成Timestamp就会对应mysql的DateTime类型,Date会对应mysq...

Mybatis 入门之resultMap与resultType讲解实例

resultMap:适合使用返回值是自定义实体类的情况 resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型 resultMap :  type:映射实体类的数据类型 id...
  • hao947
  • hao947
  • 2014年06月26日 00:49
  • 2769

Mybatis和Mysql的Datetime的一些问题

Mysql的时间类型时间类型有time, date, datetime, timestamp 如Mysql官方文档所述:time 没有date,date没有time,datetime是date和ti...

如何通过 Mybatis 向Mysql 插入Date 或者DateTime

MyBatis3做数据持久层,在字段中有Date和DateTime类型,在插入数据时只要将实体的属性设置成Timestamp就会对应mysql的DateTime类型,Date会对应mysql的Date...

Mybatis 插入date类型报错解决方案

Mybatis 插入 数据库是为了防止插入空时报错, Mybatis 提供了一套机制,只要给定插入的字段的类型,如果为空,则它会自动处理为相应类型的默认值: #{orderc...

mybatis中Date和DateTime字段的插入

最近公司使用MyBatis3做数据持久层,在字段中有Date和DateTime类型,在插入数据时只要将实体的属性设置成Timestamp就会对应mysql的DateTime类型,Date会对应mysq...

myBatis之java.util.Date类型如何映射到mysql的datetime类型

理论上不用显示的定义jdbcType,只有当字段可为N

JavaEE_Mybatis_SpringMVC SpringMVC日期类型转换问题三大处理方法归纳

原址: http://blog.csdn.net/chenleixing/article/details/45190371 前言         我们在SpringMVC开发中,可能遇到比较多的问...

mybatis常用jdbcType数据类型以及对应的JavaType

1、MyBatis 通过包含的jdbcType类型BIT、FLOAT、CHAR 、TIMESTAMP 、 OTHER 、UNDEFINEDTINYINT 、REAL 、VARCHAR 、BINA...
  • Elenal
  • Elenal
  • 2016年12月12日 15:46
  • 8420

mysql数据库日期设计以及mybatis映射文件和实体属性的关系

日期和时间分为两个字段 实体属性为 private Date occurDate; private Date occurTime; mybaits映射文件 result column= "OCCUR_...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql日期存储为int,mybatis做ORM映射与java.util.Date的转换问题
举报原因:
原因补充:

(最多只允许输入30个字)