Mybatis中什么时候应该声明jdbcType

转:http://blog.csdn.net/l799069596/article/details/52052777

疑问来自于,有时候Mapper.xml中

pid = #{pid,jdbcType=INTEGER}

pid = #{pid}

都可以用

那么问题来了,

Mybatis中什么时候应该声明jdbcType?

当Mybatis不能自动识别你传入对象的类型时。

什么情况下,Mybatis不能自动识别我的传入类型?

例如:当你传入空值的时候。

简而言之,加上肯定不会报错。

来源:Is jdbcType necessary in a MyBatis mapper?

引用:

As you mentioned yourself, you need to specify the jdbcType when passing null values for parameters.

Some databases need to know the value‘s type even if the value itself is NULL. For this reason, for maximum portability, it‘s the JDBC specification itself that requires the type to be specified and MyBatis needs to pass it along since it‘s build on top of JDBC.

From the MyBatis documentation:

The JDBC type is only required for nullable columns upon insert, update or delete. This is a JDBC requirement, not a MyBatis one. So even if you were coding JDBC directly, you‘d need to specify this type – but only for nullable values.

Most of the times you don‘t need to specify the jdbcType as MyBatis is smart enough to figure out the type from the objects you are working with. But if you send your parameters to the MyBatis statement inside a HashMap, for example, and one of the parameters is null, MyBatis won‘t be able to determine the type of the parameter by looking at the HashMap because the HashMap is just a generic Container and null itself carries no type information. At that point it would be o good idea to provide the jdbcType so that switching the database implementation later on does not cause any issues with null values.

时间: 2024-10-10 10:21:01

Mybatis中什么时候应该声明jdbcType的相关文章

MyBatis中jdbcType=INTEGER、VARCHAR作用

Mapper.xml中 pid = #{pid,jdbcType=INTEGER} pid = #{pid} 都可以用 Mybatis中什么时候应该声明jdbcType? 当Mybatis不能自动识别你传入对象的类型时. 什么情况下,Mybatis不能自动识别我的传入类型? 例如:当你传入空值的时候.(不加比较好,加了反而空插入的时候不行,待测试) 简而言之,加上肯定不会报错. 原文地址:https://www.cnblogs.com/dianzan/p/11326349.html

mybatis中jdbcType的作用和是否必须

1. mybatis中 jdbcType 时间类型 当jdbcType = DATE 时, 只传入了 年月日 jdbcType = TIMESTAMP ,  年月日+ 时分秒 2. jdbcType 是否必须: 使用时, 没有加jdbcType 正常, 加上jdbcType原因(网络): 当传入字段值为null,时,需要加入. 否则报错.

Mybatis中的jdbcType的作用

使用MyBatis框架做更新操作时,在该字段需要更新的内容为空时,就会出现1111错误,也就是无效的列类型,这个时候你就要使用jdbcType.至于什么时候要使用到javaType我还没遇到过,而且我也没有听说过要使用javaType. 前天遇到一个问题 异常显示如下: 引用 Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: Error setting null for para

mybatis 中jdbctype和javatype的对应关系

1:mybatis 中jdbctype和javatype的对应关系 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 F

Java-MyBatis-杂项: MyBatis 中 in 的用法2

ylbtech-Java-MyBatis-杂项: MyBatis 中 in 的用法2 1.返回顶部 1. 一.简介 在SQL语法中如果我们想使用in的话直接可以像如下一样使用: select * from HealthCoupon where useType in ( '4' , '3' )但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错: Map<String, Object> selectByUserId(@Param("useType") Stri

MyBatis中调用存储过程和函数

一.调用存储过程 1.首先在数据库中定义存储过程,定义的存储过程的代码如下: //定义存储过程 create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 =p1+ create or replace function fun_add(p1 number ,p2 number) return number asbegin return p1+p2;end;   2.通过接口映射Sql,定义接口 package cn.et.myba

MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(一)

在MyBatis中,当我们编写好访问数据库的映射器接口后,MapperScannerConfigurer就能自动成批地帮助我们根据这些接口生成DAO对象(),然后我们再使用Spring把这些DAO对象注入到业务逻辑层的对象(Service类的对象).因此,在这种情况下的DAO层,我们几乎不用编写代码,而且也没有地方编写,因为只有接口.这固然方便,不过如果我们需要在DAO层写一些代码的话,这种方式就无能为力了.此时,MyBatis-Spring提供给我们的SqlSessionDaoSupport类

使用Log4jdbc-log4j2监听MyBatis中运行的SQL和Connection

引言: 在项目中使用了MyBatis,一个比较苦恼的问题是无法看到执行的SQL的具体情况,所以,就找到了Log4jdbc-log4j2.这个是一个基于jdbc层面的监听工具,可以监听对于数据库的主要操作,从而完美的查看到其中执行的操作. 1. Log4jdbc-log4j2版本选择 log4jdbc-log4j2-jdbc3.jar for JDBC 3 support in JDK 1.5 log4jdbc-log4j2-jdbc4.jar for JDBC 4 support in JDK

“mybatis 中使用foreach 传

为了帮助网友解决“mybatis 中使用foreach 传”相关的问题,中国学网通过互联网对“mybatis 中使用foreach 传”相关的解决方案进行了整理,用户详细问题包括:mybatismapsql <update id="updateallByEntity" parameterType="java.util.List"> update T_WEEKDAY <foreach item="item" index="