Mybatis支持多种数据库sql写法

一、前言

  1. mybatis是我们在开发中很常用的数据持久化框架,当我们的项目需要部署到不同场景下时,有时候需要支持多种数据库,比如支持mysql、oracle、sqlserver、达梦等数据库,由于各个数据库sql语法有差异,所以我们在编写sql语句的时候就需要考虑到兼容问题,下面我们来看一下有哪些需要注意的地方。

二、详解

  1. 对NULL和""空字符串的支持

mysql是支持数据库字段存储null和""空字符串的,oracle数据库字段只支持null,会把""空字符串默认转换为null存储,这时候如果我们编写的sql语句要判断null与"",有可能这样写select * from a where name is not null and name !="",这样的话在使用mysql数据库时是没有问题的,但是在使用oracle数据库的时候就不会查出数据来,是因为oracle并不支持!=""、=""这样的写法,所以我们需要加一个判断,当是mysql时,我们加上 and name !=""。

<if test='databaseId == "mysql"'>AND name !=''</if>

  1. 对like语句的支持

mysql中拼接like语句的写法:

S.SSV_VALUE like CONCAT('%',CONCAT(#{filters.param},'%'))

oracle由于concat函数只支持两个参数,所以写法如下:

S.SSV_VALUE like CONCAT(CONCAT('%',CONCAT(#{filters.param}),'%'))

小伙伴肯定想有没有统一兼容的写法呢,答案肯定是有的,大家接着往下看

<if test="name != null and name!=''">
    <bind name="_name" value="'%'+name+'%'"/>
    name like #{_name}
</if>

我们使用mybatis的<bind>标签就可以提前把我们的参数与通配符'%'拼接好,赋值给新的变量_name,在like语句中直接引用该变量就可以了,是不是很简单呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值