MyBatis 支持多种数据库
不同数据库类型的 SQL 存在差异,有些时候就需要为某种数据库单独写 SQL。使用 MyBatis 提供的支持多种数据库的能力,系统支持的数据库类型有:达梦、DB2、金仓、MySQL、Oracle、PostgreSQL、SQL Server及时序数据库 TDengine(涛思)
系统支持的数据库类型
系统支持的数据库类型的 databaseId,如下图所示
使用 databaseId 定义某种数据库的 SQL
在 XML 文件中,相同 id 定义两个或多个 SQL
- 一个 SQL 没有 databaseId 属性。作为默认 SQL
- 其它 SQL 增加 databaseId 属性,作为某种数据库的特定 SQL
本例如果连接的是 SQL Server 数据库,则使用 databaseId="SQLSERVER" 的 SQL,否则使用没有 databaseId 的 SQL
<select id="queryOrder" resultType="Map" >
select o.fid,o.orderNo,concat(fid,orderNo) as newid from main_orderm o
</select>
<select id="queryOrder" resultType="Map" databaseId="SQLSERVER">
select o.fid,o.orderNo, fid + orderNo as newid from main_orderm o
</select>
使用 _databaseId 定义某种数据库的 SQL 片段
在一个 SQL 中,也可以根据数据库类型,拼出不同的 SQL。使用 test="_databaseId=='xxx1'" 判断数据库类型
- when 里面写某种数据库类型的 SQL 片段
- otherwise 里面写默认 SQL 片段
<choose>
<when test="_databaseId=='xxx1'">
</when>
<when test="_databaseId=='xxx2'">
</when>
<otherwise>
</otherwise>
</choose>
完整代码如下
<select id="querySchemaLike" resultMap="Schema_ResultMap">
SELECT config_schema.id schema_id,config_schema.name schema_name,config_schema.label schema_label,
config_schema.schema_content schema_schema_content,config_schema.tag schema_tag,config_schema.service schema_service
FROM config_schema config_schema
WHERE config_schema.service = #{service}
<choose>
<when test="_databaseId=='SQLSERVER'">
and config_schema.name like #{name} + '%'
</when>
<otherwise>
and config_schema.name like concat(#{name},'%')
</otherwise>
</choose>
</select>