先看mybatis官方文档:
http://www.mybatis.org/mybatis-3/apidocs/reference/org/apache/ibatis/type/JdbcType.html
public final enum
extends Enum
java.lang.Object | ||
↳ | java.lang.Enum |
|
↳ | org.apache.ibatis.type.JdbcType |
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
|
|||||||||||||||||||||||||||||||||
From class java.lang.Object
|
|||||||||||||||||||||||||||||||||
From interface java.lang.Comparable
|
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
public final int TYPE_CODE
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
随笔 - 407 文章 - 1 评论 - 27
阅读目录
回到顶部
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
回到顶部
回到顶部
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]
回到顶部
用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类型: |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.0标准的JDBC类型: |
|||
|
|
|
|
|
|
|
|
用户定义的对象 |
|
|
|
用户定义的参考 |
|
|
|
用户定义的集合 |
|
|
|
Oracle扩展: |
|||
|
|
N/A |
|
|
|
N/A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
项目是用ssm搭建的。主要是为app数据接口。其中有一个需求就app想要查询一段时间内某个用户的测量信息,所以app给我后端传递了3个参数,分别是appuserId(String),startDate(Date),endDate(Date)。我在controller中验证参数没问题之后我将参数传递给service层,然后在service层传递给dao层,执行真正的sql语句查询。
service层:
1 MapconditionMap = new HashMap<>(3); 2 conditionMap.put("appuserId", appuserId); 3 conditionMap.put("startDate", startDate); 4 conditionMap.put("endDate", endDate); 5 6 List
dao层:
1 List
dao层的xml文件:
1 23 11 124 5 6 7 8 9 10
结果是查询出来的的结果与实际的不一样。比如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