Mybatis支持多种数据库

场景描述

不同数据库类型的sql存在差异,有些时候就需要为某种数据库单独写sql

实现思路

使用Mybatis提供的支持多种数据库的能力

实现步骤

1. 系统支持的数据库类型

系统支持的数据库类型的databaseId如下图所示

2. 使用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>

3. 使用_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 ""

    results matching ""

      No results matching ""