Is jdbcType necessary in a MyBatis mapper?

13,148

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.

Share:
13,148

Related videos on Youtube

enkara
Author by

enkara

Updated on October 09, 2022

Comments

  • enkara
    enkara over 1 year

    I've been searching and I don't have this very clear. When using a MyBatis mapper, is it necessary to set the jdbcType? I'm using it with MySql.

    For what I've read, it's for when you pass null values, but I don't know if this is still necessary or it's something old. For example, both of these queries work:

    SELECT <include refid="columns"/> FROM user WHERE uid=#{uid, jdbcType=INTEGER}
    
    SELECT <include refid="columns"/> FROM user WHERE uid=#{uid}
    
  • cellepo
    cellepo almost 8 years
    So apparently the db @enkara was using was a type of db that doesn't "need to know the value's type even if the value itself is NULL". I have the same experience they do, with everything working while not specifying jdbcType.