案例:Oracle兼容MySQL
<select id="getMaxSort" resultType="int">
SELECT
<choose>
<when test="_databaseId == 'mysql'">
IFNULL(MAX(SORT), 0)
</when>
<otherwise>
NVL(MAX(SORT), 0)
</otherwise>
</choose>
<!-- IFNULL(MAX(SORT), 0) -->
FROM DOC_CATALOG
<where>
DELETE_FLAG = 0
AND PARENT_CATALOG_CODE = #{parentCatalogCode}
</where>
</select>
Mybatis中提供了两个常用的内置参数:_parameter
和_databaseId
_parameter
保存了对应传入的对象
_databaseId
中保存了用户所指定的对应的数据库厂商标识。
只需要判断数据库厂商标识就可以实现多哦数据库兼容
MySQL支持IFNULL,Oracle支持NVL都是if函数判断,同理其他函数或者重写Sql语句解决兼容性问题。