先看mybatis官方文档:

http://www.mybatis.org/mybatis-3/apidocs/reference/org/apache/ibatis/type/JdbcType.html

public final enum

JdbcType

extends Enum<E extends Enum<E>>

java.lang.Object
   ↳ java.lang.Enum<E extends java.lang.Enum<E>>
     ↳ org.apache.ibatis.type.JdbcType

Summary

Enum Values
JdbcType  ARRAY   
JdbcType  BIGINT   
JdbcType  BINARY   
JdbcType  BIT   
JdbcType  BLOB   
JdbcType  BOOLEAN   
JdbcType  CHAR   
JdbcType  CLOB   
JdbcType  CURSOR   
JdbcType  DATALINK   
JdbcType  DATE   
JdbcType  DATETIMEOFFSET   
JdbcType  DECIMAL   
JdbcType  DISTINCT   
JdbcType  DOUBLE   
JdbcType  FLOAT   
JdbcType  INTEGER   
JdbcType  JAVA_OBJECT   
JdbcType  LONGNVARCHAR   
JdbcType  LONGVARBINARY   
JdbcType  LONGVARCHAR   
JdbcType  NCHAR   
JdbcType  NCLOB   
JdbcType  NULL   
JdbcType  NUMERIC   
JdbcType  NVARCHAR   
JdbcType  OTHER   
JdbcType  REAL   
JdbcType  REF   
JdbcType  ROWID   
JdbcType  SMALLINT   
JdbcType  SQLXML   
JdbcType  STRUCT   
JdbcType  TIME   
JdbcType  TIMESTAMP   
JdbcType  TINYINT   
JdbcType  UNDEFINED   
JdbcType  VARBINARY   
JdbcType  VARCHAR   
Fields
public final int TYPE_CODE  
Public Methods
static JdbcType forCode(int code)
static JdbcType valueOf(String name)
final static JdbcType[] values()
[Collapse]

Inherited Methods

 From class java.lang.Enum

final Object clone()
final int compareTo(E arg0)
int compareTo(Object arg0)
final boolean equals(Object arg0)
final void finalize()
final Class<E> getDeclaringClass()
final int hashCode()
final String name()
final int ordinal()
String toString()
static <T extends Enum<T>> T valueOf(Class<T> arg0, String arg1)
 From class java.lang.Object

Object clone()
boolean equals(Object arg0)
void finalize()
final Class<?> getClass()
int hashCode()
final void notify()
final void notifyAll()
String toString()
final void wait(long arg0, int arg1)
final void wait(long arg0)
final void wait()
 From interface java.lang.Comparable

abstract int compareTo(T arg0)

Enum Values

public static final JdbcType ARRAY

public static final JdbcType BIGINT

public static final JdbcType BINARY

public static final JdbcType BIT

public static final JdbcType BLOB

public static final JdbcType BOOLEAN

public static final JdbcType CHAR

public static final JdbcType CLOB

public static final JdbcType CURSOR

public static final JdbcType DATALINK

public static final JdbcType DATE

public static final JdbcType DATETIMEOFFSET

public static final JdbcType DECIMAL

public static final JdbcType DISTINCT

public static final JdbcType DOUBLE

public static final JdbcType FLOAT

public static final JdbcType INTEGER

public static final JdbcType JAVA_OBJECT

public static final JdbcType LONGNVARCHAR

public static final JdbcType LONGVARBINARY

public static final JdbcType LONGVARCHAR

public static final JdbcType NCHAR

public static final JdbcType NCLOB

public static final JdbcType NULL

public static final JdbcType NUMERIC

public static final JdbcType NVARCHAR

public static final JdbcType OTHER

public static final JdbcType REAL

public static final JdbcType REF

public static final JdbcType ROWID

public static final JdbcType SMALLINT

public static final JdbcType SQLXML

public static final JdbcType STRUCT

public static final JdbcType TIME

public static final JdbcType TIMESTAMP

public static final JdbcType TINYINT

public static final JdbcType UNDEFINED

public static final JdbcType VARBINARY

public static final JdbcType VARCHAR

Fields

public final int TYPE_CODE

Public Methods

public static JdbcType forCode (int code)

public static JdbcType valueOf (String name)

public static final JdbcType[] values ()

Generated by Doclava.

http://www.mybatis.org/mybatis-3/apidocs/reference/org/apache/ibatis/type/JdbcType.html

https://www.cnblogs.com/lixuwu/p/5916585.html

CS408

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。 人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。

  • 博客园
  • 首页
  • 新随笔
  • 订阅
  • 管理

随笔 - 407  文章 - 1  评论 - 27

(转)mybatis常用jdbcType数据类型

阅读目录

  • 1 MyBatis 通过包含的jdbcType类型
  • 2 Mybatis中javaType和jdbcType对应和CRUD例子
  • 3 Mybatis中javaType和jdbcType对应关系
  • 4  oracle数据类型和对应的java类型

回到顶部

MyBatis 通过包含的jdbcType类型

BIT         FLOAT      CHAR           TIMESTAMP       OTHER       UNDEFINEDTINYINT     REAL       VARCHAR        BINARY          BLOB        NVARCHARSMALLINT    DOUBLE     LONGVARCHAR    VARBINARY       CLOB        NCHARINTEGER     NUMERIC    DATE           LONGVARBINARY   BOOLEAN     NCLOBBIGINT      DECIMAL    TIME           NULL            CURSOR

回到顶部

2 Mybatis中javaType和jdbcType对应和CRUD例子

<resultMap type="java.util.Map" id="resultjcm"><result property="FLD_NUMBER" column="FLD_NUMBER"  javaType="double" jdbcType="NUMERIC"/><result property="FLD_VARCHAR" column="FLD_VARCHAR" javaType="string" jdbcType="VARCHAR"/><result property="FLD_DATE" column="FLD_DATE" javaType="java.sql.Date" jdbcType="DATE"/><result property="FLD_INTEGER" column="FLD_INTEGER"  javaType="int" jdbcType="INTEGER"/><result property="FLD_DOUBLE" column="FLD_DOUBLE"  javaType="double" jdbcType="DOUBLE"/><result property="FLD_LONG" column="FLD_LONG"  javaType="long" jdbcType="INTEGER"/><result property="FLD_CHAR" column="FLD_CHAR"  javaType="string" jdbcType="CHAR"/><result property="FLD_BLOB" column="FLD_BLOB"  javaType="[B" jdbcType="BLOB" /><result property="FLD_CLOB" column="FLD_CLOB"  javaType="string" jdbcType="CLOB"/><result property="FLD_FLOAT" column="FLD_FLOAT"  javaType="float" jdbcType="FLOAT"/><result property="FLD_TIMESTAMP" column="FLD_TIMESTAMP"  javaType="java.sql.Timestamp" jdbcType="TIMESTAMP"/></resultMap>

回到顶部

3 MybatisjavaTypejdbcType对应关系

JDBC Type            Java Type
CHAR                String
VARCHAR                String
LONGVARCHAR            String
NUMERIC                java.math.BigDecimal
DECIMAL                java.math.BigDecimal
BIT                boolean
BOOLEAN                boolean
TINYINT                byte
SMALLINT            short
INTEGER                int
BIGINT                long
REAL                float
FLOAT                double
DOUBLE                double
BINARY                byte[]
VARBINARY            byte[]
LONGVARBINARY                byte[]
DATE                java.sql.Date
TIME                java.sql.Time
TIMESTAMP            java.sql.Timestamp
CLOB                Clob
BLOB                Blob
ARRAY                Array
DISTINCT            mapping of underlying type
STRUCT                Struct
REF                            Ref
DATALINK            java.net.URL[color=red][/color]

回到顶部

4  oracle数据类型和对应的java类型

用mybatis generator生成代码后,执行查询语句时,oracle里的Date类型字段只精确到年月日,后面时分秒都为零。

jdbcType="DATE"时候,存入到数据库中的字段只有年月日!

后来发现是jdbcType问题,改成 jdbcType="TIMESTAMP" 就可以。(原先默认生成时是jdbcType="DATE")

地址:

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm#BHCJBJCC

SQL数据类型 JDBC类型代码 标准的Java类型 Oracle扩展的Java类型
 

1.0标准的JDBC类型:

   

CHAR

java.sql.Types.CHAR

java.lang.String

oracle.sql.CHAR

VARCHAR2

java.sql.Types.VARCHAR

java.lang.String

oracle.sql.CHAR

LONG

java.sql.Types.LONGVARCHAR

java.lang.String

oracle.sql.CHAR

NUMBER

java.sql.Types.NUMERIC

java.math.BigDecimal

oracle.sql.NUMBER

NUMBER

java.sql.Types.DECIMAL

java.math.BigDecimal

oracle.sql.NUMBER

NUMBER

java.sql.Types.BIT

boolean

oracle.sql.NUMBER

NUMBER

java.sql.Types.TINYINT

byte

oracle.sql.NUMBER

NUMBER

java.sql.Types.SMALLINT

short

oracle.sql.NUMBER

NUMBER

java.sql.Types.INTEGER

int

oracle.sql.NUMBER

NUMBER

java.sql.Types.BIGINT

long

oracle.sql.NUMBER

NUMBER

java.sql.Types.REAL

float

oracle.sql.NUMBER

NUMBER

java.sql.Types.FLOAT

double

oracle.sql.NUMBER

NUMBER

java.sql.Types.DOUBLE

double

oracle.sql.NUMBER

RAW

java.sql.Types.BINARY

byte[]

oracle.sql.RAW

RAW

java.sql.Types.VARBINARY

byte[]

oracle.sql.RAW

LONGRAW

java.sql.Types.LONGVARBINARY

byte[]

oracle.sql.RAW

DATE

java.sql.Types.DATE

java.sql.Date

oracle.sql.DATE

DATE

java.sql.Types.TIME

java.sql.Time

oracle.sql.DATE

TIMESTAMP

java.sql.Types.TIMESTAMP

javal.sql.Timestamp

oracle.sql.TIMESTAMP

 

2.0标准的JDBC类型:

   

BLOB

java.sql.Types.BLOB

java.sql.Blob

oracle.sql.BLOB

CLOB

java.sql.Types.CLOB

java.sql.Clob

oracle.sql.CLOB

用户定义的对象

java.sql.Types.STRUCT

java.sql.Struct

oracle.sql.STRUCT

用户定义的参考

java.sql.Types.REF

java.sql.Ref

oracle.sql.REF

用户定义的集合

java.sql.Types.ARRAY

java.sql.Array

oracle.sql.ARRAY

 

Oracle扩展:

   

BFILE

oracle.jdbc.OracleTypes.BFILE

N/A

oracle.sql.BFILE

ROWID

oracle.jdbc.OracleTypes.ROWID

N/A

oracle.sql.ROWID

REF CURSOR

oracle.jdbc.OracleTypes.CURSOR

java.sql.ResultSet

oracle.jdbc.OracleResultSet

TIMESTAMP

oracle.jdbc.OracleTypes.TIMESTAMP

java.sql.Timestamp

oracle.sql.TIMESTAMP

TIMESTAMP WITH TIME ZONE

oracle.jdbc.OracleTypes.TIMESTAMPTZ

java.sql.Timestamp

oracle.sql.TIMESTAMPTZ

TIMESTAMP WITH LOCAL TIME ZONE

oracle.jdbc.OracleTypes.TIMESTAMPLTZ

java.sql.Timestamp

oracle.sql.TIMESTAMPLTZ

u


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,让更多的人能够享受到获取知识的快乐!因为本人初入职场,鉴于自身阅历有限,所以本博客内容大部分来源于网络中已有知识的汇总,欢迎各位转载,评论,大家一起学习进步!如有侵权,请及时和我联系,切实维护您的权益!

分类: MyBatis

好文要顶 关注我 收藏该文  

CS408
关注 - 3
粉丝 - 52

+加关注

0

0

« 上一篇:(转)MyBatis在插入的数据有空值时,可能为空的字段都要设置jdbcType
» 下一篇:(转)maven打包时跳过测试

posted @ 2016-09-28 15:33 CS408 阅读(28124) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部

https://www.cnblogs.com/lixuwu/p/5916585.html

https://www.cnblogs.com/DDgougou/p/8578618.html

记自己在mybatis中设置jdbcType的一个坑

  

  项目是用ssm搭建的。主要是为app数据接口。其中有一个需求就app想要查询一段时间内某个用户的测量信息,所以app给我后端传递了3个参数,分别是appuserId(String),startDate(Date),endDate(Date)。我在controller中验证参数没问题之后我将参数传递给service层,然后在service层传递给dao层,执行真正的sql语句查询。

service层:

1 Map<String, Object> conditionMap = new HashMap<>(3);
2 conditionMap.put("appuserId", appuserId);
3 conditionMap.put("startDate", startDate);
4 conditionMap.put("endDate", endDate);
5
6 List<Map<String, Object>> list1 = ecgAutoAnalysisMapper.getHealthDataList(conditionMap);

  dao层:

1 List<Map<String, Object>> getHealthDataList(Map<String, Object> conditionMap);

  dao层的xml文件:

1 <!--measureStartTime为测量时间,在java中是一个java.util.Date,在mysql中是TIMESTAMP类型-->2 <resultMap id="healthDataMap" type="map">3   <result property="appuserId" column="appuserId" javaType="java.lang.String" jdbcType="CHAR"/>4   <result property="measureStartTime" column="measureStartTime" javaType="java.util.Date" jdbcType="TIMESTAMP"/>5   <result property="measureSecondLength" column="measureSecondLength" javaType="java.lang.Integer" jdbcType="INTEGER"/>6   <result property="hrOverallAvg" column="hrOverallAvg" javaType="java.lang.String" jdbcType="VARCHAR"/>7   <result property="chiefComplaint_symptom" column="chiefComplaint_symptom" javaType="java.lang.String" jdbcType="VARCHAR"/>8   <result property="chiefComplaint_diet" column="chiefComplaint_diet" javaType="java.lang.String" jdbcType="VARCHAR"/>9   <result property="chiefComplaint_activity" column="chiefComplaint_activity" javaType="java.lang.String" jdbcType="VARCHAR"/>
10 </resultMap>
11
12 <select id="getHealthDataList" parameterType="map" resultMap="healthDataMap">
13   select
14       ea.appuserId,ea.measureStartTime,ed.measureSecondLength,ea.hrOverallAvg,ea.chiefComplaint_symptom,
15       ea.chiefComplaint_diet,ea.chiefComplaint_activity
16   from
17       ecg_auto_analysis ea
18   left join
19       ecg_data ed
20   on
21       ed.autoAnalysisId = ea.id
22   <where>
23     <if test="appuserId != null and appuserId != ''">
24       and ea.appuserId = #{appuserId,jdbcType=CHAR}
25     </if>
26     <if test="startDate != null and startDate != ''">
27       and ea.measureStartTime > #{startDate,jdbcType=Date}
28     </if>
29     <if test="endDate != null and endDate != ''">
30       and #{endDate,jdbcType=Date} > ea.measureStartTime
31     </if>
32   </where>
33 </select>

  结果是查询出来的的结果与实际的不一样。比如app传递参数,appuserId是“393967382ec34f53a53a4d49271a422a”,startDate是“2018-03-09 00:00:00”,endDate是“2018-03-15 23:59:59”,在数据库中这个用户在这段时间的测量记录有7条,而在mybatis中查询出来的只有4条。很明显是mybatis的sql语句写错了。

数据库查询语句及结果(可以看到测量时间集中在两天,一个是3月9号,一个是3月15号):

1 select2     ea.appuserId,ea.measureStartTime,ed.measureSecondLength,ea.hrOverallAvg,ea.chiefComplaint_symptom,ea.chiefComplaint_diet,ea.chiefComplaint_activity3 from4     ecg_auto_analysis ea5 left join6     ecg_data ed7 on8     ed.autoAnalysisId = ea.id9 where
10     ea.appuserId = "393967382ec34f53a53a4d49271a422a"
11     and ea.measureStartTime > "2018-03-09 00:00:00"
12     and "2018-03-15 23:59:59" > ea.measureStartTime

  我是这样解决的,当然故事很曲折,也很折磨人:

  1)先注释掉最后的两个if语句,mybatis的查询结果为7,证明问题就出在最后两个if语句中;

  2)通过翻阅以前的代码,我把这两个if语句中的 jdbcType=Date 去掉,查询结果为7,然后加上 jdbcType=Date 查询结果又为4。没错,问题就出在这句话上,为啥不加就好了,加上就不对了;

  3)网上查询资料,对jdbcType这个参数的描述不多,作用不清楚,大概的意思是“jdbcType这个参数的应用场景就是,当执行mapping文件的时候,有个映射的参数为空,那么无法确定他的类型,这个时候就需要jdbcType来确定类型“。可我还是不清除啥原因导致我的查询结果不正确;

  4)最后看了好长时间,我把 jdbcType=Date 改为 jdbcType=TIMESTAMP,查询结果正确了(这一步花了太多时间)。

  我猜想原因是这样的,当我不设置jdbcType时,最后两个if语句在执行比较时,会把参数转换为正确的日期类型,就是 “年月日+时分秒”这种。当我设置 jdbcType=Date 时,就指定日期只用”年月日”,所以传递进来的startDate与endDate就变为“2018-03-09 ”,“2018-03-15”,那在此时间段的记录当然只有4条了。但是设置jdbcType=TIMESTAMP 时,传递进来啥就是啥,所以符合记录的只有7条了,原因就是这样。最后看看mysql数据库中datetime、date、timestamp三种数据类型的区别吧:


    1) DATETIME

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1000-01-01 00:00:00'到'9999-12-31 23:59:59']

2) DATE

显示格式:YYYY-MM-DD
时间范围:['1000-01-01'到'9999-12-31']

3) TIMESTAMP

显示格式:YYYY-MM-DD HH:MM:SS
时间范围:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59']

在全栈的道路上,积极向上、成熟稳重、谦虚好学、怀着炽热的心向前方的走得更远。

标签: mybatis

好文要顶 关注我 收藏该文  

低调的狗狗
关注 - 0
粉丝 - 1

+加关注

0

0

« 上一篇:Linux中各个目录作用
» 下一篇:mysql异常:Packet for query is too large (10240 > 1024). You can change this value

posted @ 2018-03-16 09:44 低调的狗狗 阅读(6765) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部

https://www.cnblogs.com/DDgougou/p/8578618.html

【Mybatis】中设置 jdbcType相关推荐

  1. Mybatis中的jdbcType的作用

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis中的jdbcType的作用 使用MyBatis框架做更新操作时,在该字段需要更新的内容为空时,就会出现1111错 ...

  2. MyBatis中设置事务自动提交

    MyBatis中设置事务自动提交 MyBatis框架是对JDBC的封装,MyBatis中的事务控制方式其本质也是JDBC的setAutoCommit()方法来设置事务提交的方式的. 1.MyBatis ...

  3. mybatis中设置主键返回

    mybatis中设置主键返回 <insert id="insertSelective" parameterType="com.nwow.pss.model.User ...

  4. mysql在xml中jdbctype,MyBatis中的JdbcType映射使用详解

    Java项目涉及到数据库交互,以往常用的是JDBC,现在则有Hibernate.Mybatis等这些持久化支持. 项目中用到了MyBatis,和JDBC最显著的区别,就是SQL语句配置化,通过xml文 ...

  5. MyBatis中的jdbcType

    MyBatis中常用的jdbcType BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINEDTINYINT REAL VARCHAR BINARY BLOB NVARCHA ...

  6. MyBatis中的JdbcType映射数据类型对照表

    在Mybatisd的映射文件mapper.xml中,会用jdbcType把java类映射数据库表字段,有关映射关系做个笔记,方便查阅. JdbcType Oracle MySql JdbcType A ...

  7. MyBatis中jdbcType=INTEGER、VARCHAR作用

    Mapper.xml中 pid = #{pid,jdbcType=INTEGER} pid = #{pid} 都可以用 Mybatis中什么时候应该声明jdbcType? 当Mybatis不能自动识别 ...

  8. oracle jdbctype null,Oracle数据库之springboot 项目mybatis plus 设置 jdbcTypeForNull

    本文主要向大家介绍了Oracle数据库之springboot 项目mybatis plus 设置 jdbcTypeForNull,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. ...

  9. Mybatis中jdbcType和javaType的对应关系

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis中jdbcType和javaType的对应关系   1 JDBC Type           Java Typ ...

最新文章

  1. 面试官:因为这个语言,我淘汰了90%的人!
  2. 计算机视觉,基于skimage对图像阈值分割的学习
  3. 【spring-boot】启用数据缓存功能
  4. Method.invoke 异常捕获
  5. 放弃相爱,并不放弃彼此
  6. Windows与Linux下tftp服务的使用
  7. MVCToolKit中HtmlHelper.ActionLink的BUG?
  8. matlab d=sqrt((i-m)^2+(j-n)^2);,硕士研究生《数字图像处理》作业
  9. 关于php变量的赋值和引用的区别
  10. 10 大C++ Web(HTTP)开发开源框架/库推荐
  11. VMware Fusion网络配置相关原理
  12. 浅谈能源管理系统在钢铁企业上的应用
  13. 硬件保护和软件保护_什么是硬件保护?
  14. ^_^Hostname openapi.alipaydev.com not verified:
  15. 软件是一个工程,是一个商业活动,是一个艺术,更是一门经营管理。
  16. 经纬度差和米单位的换算
  17. SAS:数据合并简介
  18. 表情识别(二)--基于CNN分类
  19. 面向智能机器人的通讯安全机制研究与改进
  20. auto.js 公众号自动签到

热门文章

  1. 闹闹天宫怎么显示服务器,闹闹天宫仙缘系统怎么玩 闹闹天宫仙缘系统介绍
  2. 介绍一个优秀的单片机图形库,GuiLite
  3. java dataset flatmap_Scala map与flatMap
  4. python二级裸考能过吗_难道裸考资格证考试就没有方法了吗?
  5. 可以保值的3级 省、市、区联动下拉框
  6. log4j加载配置方式和配置详解
  7. 潭州课堂25班:Ph201805201 MySQL第一课 (课堂笔记)
  8. android 16进制颜色代码
  9. 数据库读取速度与文件IO读取速度比较
  10. 网络安全态势感知及防御控制系统操作