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