Mybatis 多数据库兼容 jdbcType

Mybatis 多数据库兼容 jdbcType

在一些企业中难免在数据存储过程会使用到Oracle、DB2等收费维护的数据库,有时候会根据业务需要或技术栈改造的过程中会使用到更换数据库存储,这种多表现于系统改造,软件升级,客户要求等情况。

Myatis映射文件改造之路

在初始化数据库表与Mybatis的映射文件建立对应关系,我们一般都是通过Mybatis generator逆向工程去生成映射代码,生成的格式可以自定义,有很多种,但Mapper方法是根据生成者的意愿自我选择的,同一个表Mapper方法不管是以何种方式生成,所执行的结果是一致,所以可以简单地兼容,前提是不暴露数据库独有的特性,类型。
说到类型就不得不提jdbcType。

jdbcType

在mybatis中,从java代码与sql映射的过程过程,传入的参数都会指定jdbcType。
常见的jdbcType对应关系:

jdbcTypejavaType
JDBC TypeJava Type
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITboolean
BOOLEANboolean
TINYINTbyte
SMALLINTshort
INTEGERINTEGER
BIGINTlong
REALfloat
FLOATdouble
DOUBLEdouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp
CLOBClob
BLOBBlob
ARRAYArray
DISTINCTmapping of underlying type
STRUCTStruct
REFRef
DATALINKjava.net.URL
UPDATE
            TEST_TAKE
        SET
            INDEX_NO = #{indexNo},
           INDEX_NAME = #{indexName, jdbcType=VARCHAR},
            APPLY_DATE = #{applyDate, jdbcType=INTEGER},
            END_DATE = #{endDate, jdbcType=INTEGER},
            INDEX_TYPE = #{indexType, jdbcType=VARCHAR},
            APPLY_DIM = #{applyDim, jdbcType=VARCHAR},
            BUSINESS_TYPE = #{businessType, jdbcType=VARCHAR}
        WHERE
            SERIAL_NO = #{serialNo, jdbcType=VARCHAR}

上述update语句中,INDEX_NO = #{indexNo} 如果不为null的情况下,执行是没有问题的,如果为null的情况就会导致Mybatis框架无法识别indexNo=null的数据库类型,执行报错,程序不可用。

综上,在未判断为null的情况下,尽可能地加上jdbcType参数,如果进来是非null的情况下,可写可不写, 注意避坑!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 是一个开源的持久层框架,它可以帮助开发者简化数据库操作。下面是使用 MyBatis 操作数据库的一般步骤: 1. 配置数据库连接:在 MyBatis 的配置文件中,设置数据库连接信息,包括数据库驱动、URL、用户名和密码等。 2. 定义数据模型:创建 Java 类来表示数据库中的表,每个类对应一个表,类的属性对应表的列。 3. 编写 SQL 映射文件:创建一个 XML 文件,定义 SQL 语句和映射关系。在文件中,可以使用 MyBatis 提供的标签来编写 SQL 语句,还可以使用动态 SQL 来实现条件查询等功能。 4. 配置 SQL 映射文件:在 MyBatis 的配置文件中,引入 SQL 映射文件,告诉 MyBatis 哪些 SQL 语句对应哪些方法。 5. 创建 SqlSessionFactory:通过 MyBatis 提供的 SqlSessionFactoryBuilder 类,读取配置文件并创建 SqlSessionFactory 对象。SqlSessionFactory 是一个线程安全的类,用于创建 SqlSession。 6. 创建 SqlSession:通过 SqlSessionFactory 的 openSession 方法创建 SqlSession 对象。SqlSession 是一个用于执行 SQL 语句的接口,它提供了多种方法来操作数据库。 7. 执行 SQL 语句:通过 SqlSession 对象调用相应的方法,执行 SQL 语句。例如,可以使用 selectOne 方法执行查询操作,使用 insert、update 或 delete 方法执行增删改操作。 8. 提交事务和关闭资源:在操作完成后,需要调用 SqlSession 的 commit 方法提交事务,并调用 close 方法关闭资源。 以上是使用 MyBatis 操作数据库的一般步骤,具体的实现方式可以根据项目的需求进行调整和扩展。希望对你有帮助!如果有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值