java有java的数据类型,数据库有数据库的数据类型,
那么在往数据库中插入数据的时候是如何把java类型当做数据库类型插入数据库?
在从数据库读取数据的时候又是如何把数据库类型当做java类型来处理呢?
mybatis中jdbcType时间类型
jdbcType = DATE , 只传入年月日 (数据库中的时间为yyyy-MM-dd)
jdbcType = TIME , 只传入时分秒
jdbcType = TIMESTAMP , 年月日+ 时分秒 (数据库中的时间为yyyy-MM-dd HH:mm:ss)
可以在result中设置jdbcType
<result column="modified_date" jdbcType="TIMESTAMP" property="modified_date" javaType="java.sql.Timestamp" />
Ibatis是怎么处理日期类型的
之前碰到过Oracle中的Date字段只剩下日期部分,数据丢失了。(oracle时间类型DATE:它可以保存日期和时间)
一些人的解决方法是将jdbcType指定为datetime。
其实这完全是瞎猫撞上死耗子,那个datetime根本没意义,却歪打正着。
一般的错误都是如下的配置jdbcType="DATE"(或者是pojo的属性为java.sql.Date类型):
<sqlMap namespace="Info" >
<resultMap id="Info" class="pojo.Info" >
<result column="INFO_BEGINTIME" property="begin" jdbcType="DATE" />
<result column="INFO_ENDTIME" property="end" jdbcType="DATE" />
</resultMap>
===========================================================
<result column="date" jdbcType="DATE" property="date" javaType="java.util.Date" />
如果指定jdbcType="Date",此时不论你pojo.date中的字段类型(或者的javaType属性)是java.util.Date还是java.sql.Date,最终都会丢失数据。
实际上,在pojo.Info中的字段类型(或者javaType属性)为java.util.Date时,如果指定jdbcType为DATE或TIME(区分大小写),则将分别得到DateOnlyTypeHandler或TimeOnlyTypeHandler。
如果你不指定jdbcType,或者指定一个错误的值,例如datetime,或者xxxx等,都会得到DateTypeHandler(日期时间都会处理)。
如果pojo.date的字段类型(或者配置中的javaType属性)是java.sql.Date,则选择处理handler类时不会使用jdbcType,而是根据属性类型得到SqlDateTypeHandler(只包含日期)。
jdbcType 是否必须:
使用时不加jdbcType也可以正常运行, 当传入字段值为null时,需要jdbcType,否则报错。
在Ibatis的手册中,指出来jdbcType一般情况下是不用于判断处理方式的,大部分情况下是依据javaType或者pojo属性类型来判断处理方式,只有在少部分无法根据pojo属性类型判断的情况下才使用。(字段为null,或javaType没写)
优先级(jdbcType->javaType->pojo字段类型)
如果你用java.util.Date对应到MySQL则就是这种少数情况之一。
因为MySQL可以将多个数据库字段类型映射到java.util.Date,所以需要指定是DATE还是TIME(必须是大写),如果不指定则默认是完整的日期时间(此时按JDBC的timestamp操作)。
对于Mybatis操作Date/Time/DateTime,总结如下:
将pojo的属性类型设置为java.sql.Date(或java.sql.Time, java.sql.Timestamp),此时会严格遵循这三种类型的语义。但此方法因存在前文中提到的性能问题,在JDK1.6以前的JDK版本中能少使用就少使用。
在JDK1.6之前版本的构造java.sql.{Date|Time|TimeStamp}对象时存在性能问题,尤其是在多线程环境下更严重。这个Bug在这里。其原因是java.util.Date的相关方法调用了TimeZone.getDefaultRef(),而此方法是同步方法。
如果你想在pojo中使用java.util.Date, 则要注意:
完整的日期时间,要确保jdbcType为空,或jdbcType为DATE,TIME以外的值
只需要时间,要指定jdbcType=”TIME”
只需要日期,要指定jdbcType=”DATE”
相关推荐
mybatis常用jdbcType数据类型.txt mybatis常用jdbcType数据类型.txt
经过修改源码的mybatis逆向工程生成器(不生成jdbcType)
NULL 博文链接:https://zw7534313.iteye.com/blog/2221078
mybatis 对clob类型转换,解决clob类型数据插入数据库报异常问题
主要介绍了MyBatis常用的jdbcType数据类型的相关资料,需要的朋友可以参考下
3、mybatis类型的定义方式
mybatis安装包+依赖包+常用配置文件+4-mybatis generator的插件+EHcache+MyBatis 通过包含的jdbcType类型+测试数据脚本
1. boot+mybatis的demo项目 2.mybatis中枚举转换器问题等 3.前后端分离项目统一返回json格式 4.boot集成quraz框架实现定时任务
主要介绍了MyBatis自定义类型转换器实现加解密的相关资料,需要的朋友可以参考下
struts2+mybatis解决longblob字段问题,存读取并下载longblob字段
mybatis逆向工具generator,中文注释,把自动生成的Byte改成了Integer
mybatis数据类型错误及解决方法
1.springbood+mybatis项目demo 2.mybatis自定义枚举类型的转换器以及各种使用场景
MyBatis日志解析工具支持MyBatis3.0以上版本,能够将Mybatis打印的SQL日志转换成SQL语句。 使用方法请查看 https://blog.csdn.net/warehouse666/article/details/90111704
Mybatis 处理 CLOB、BLOB 类型数据
在使用mybatis的时候经常会遇到枚举类型的转换,下面这篇文章主要给大家介绍了关于mybatis中实现枚举自动转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们...
springboot--mybatis枚举自动转换实现--请配合文章使用,效果更佳,枚举的反复横跳,左右横跳,再也不是问题了
搞明白mybatis的参数是如何类型转换以及设置参数的? 搞明白mybatis的结果集是如何类型转换以及结果集映射的? 学会手写框架 搞明白mybatis框架的架构是啥样的? 搞明白mybatis执行流程底层是啥样的? 搞明白mybatis...
Mybatis日志中的SQL解析工具(网页版) 说明:复制日志时,必须注意,日志必须包含Preparing:和Parameters:全部内容,而且日志换行格式要保留,不要复制成纯文本,直接ctrl+c即可。
主要介绍了mybatis使用char类型字段查询oracle数据库时结果返回null问题的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下