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>

results matching ""

    No results matching ""