【Mybatis】中设置 jdbcType

先看mybatis官方文档:

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

public final enum

JdbcType

extends Enum>

java.lang.Object
   ↳ java.lang.Enum>
     ↳ 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 getDeclaringClass()
final int hashCode()
final String name()
final int ordinal()
String toString()
static > T valueOf(Class 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       UNDEFINED

TINYINT     REAL       VARCHAR        BINARY          BLOB        NVARCHAR

SMALLINT    DOUBLE     LONGVARCHAR    VARBINARY       CLOB        NCHAR

INTEGER     NUMERIC    DATE           LONGVARBINARY   BOOLEAN     NCLOB

BIGINT      DECIMAL    TIME           NULL            CURSOR

复制代码

回到顶部

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

复制代码


  
  
  
  
  
  
  
  
  
  
  
 

复制代码

回到顶部

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 conditionMap = new HashMap<>(3);
2 conditionMap.put("appuserId", appuserId);
3 conditionMap.put("startDate", startDate);
4 conditionMap.put("endDate", endDate);
5 
6 List> list1 = ecgAutoAnalysisMapper.getHealthDataList(conditionMap);

复制代码

  dao层:

  1 List> getHealthDataList(Map conditionMap); 

   dao层的xml文件:

复制代码

 1 
 2 
 3   
 4   
 5   
 6   
 7   
 8   
 9   
10 
11 
12 

复制代码

 

  结果是查询出来的的结果与实际的不一样。比如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 select
 2     ea.appuserId,ea.measureStartTime,ed.measureSecondLength,ea.hrOverallAvg,ea.chiefComplaint_symptom,ea.chiefComplaint_diet,ea.chiefComplaint_activity
 3 from
 4     ecg_auto_analysis ea
 5 left join
 6     ecg_data ed
 7 on
 8     ed.autoAnalysisId = ea.id
 9 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)