<select id="selectByName" resultMap="BaseResultMap" databaseId="mysql">
select
ID, `NAME`, CODE
from country
where
`NAME` like = concat('%', #{name}, '%')
</select>
<select id="selectByName" resultMap="BaseResultMap" databaseId="oracle">
select
ID, `NAME`, CODE
from country
where
`NAME` like = '%'||#{name}||'%'
</select>
当基于不同数据库运行时,MyBatis会根据配置找到合适的SQL去执行。
数据库的更换可能只会引起某个SQL语句的部分不同,所以也没有必要使用上面的写法,而可以使用 if 标签配合默认的上下文中的_databaseId参数这种写法去实现。这样可以避免大量重复的SQL出现,方便修改。
<select id="selectByName" resultMap="BaseResultMap" databaseId="oracle">
select
ID, `NAME`, CODE
from country
<where>
<if test="_databaseId == 'mysql'">
`NAME` like = concat('%', #{name}, '%')
</if>
<if test="_databaseId == 'oracle'">
`NAME` like = '%'||#{name}||'%'
</if>
</where>
</select>