当前位置: 首页 > 知识库问答 >
问题:

MyBatis如何为不同的数据库后端生成不同的sql

姜献
2023-03-14

我正在使用MyBatis-Spring1.2.3和Spring4一起创建一个web应用程序。主要的数据存储在生产环境中是MySQL,但在单元测试中我也使用内存中数据库H2。

下面是我的映射器文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="myproject.mapper.UserMapper">
  <select id="getGameUsersForDate" resultType="myproject.dao.domain.GameUser">
    select
    *
    from game_user
    force index(idx1)
    where
    game_id in
    <choose>
      <when test="gameIds.size() > 0">
        <foreach item="gameId" collection="gameIds" open="(" separator="," close=")">
          #{gameId}
        </foreach>
      </when>
      <otherwise>
        (null)
      </otherwise>
    </choose>
    and uid in
    <choose>
      <when test="uids.size() > 0">
        <foreach item="uid" collection="mids" open="(" separator="," close=")">
          #{mid}
        </foreach>
      </when>
      <otherwise>
        (null)
      </otherwise>
    </choose>
    and `date` = #{date}
  </select>
</mapper>

共有1个答案

孟华晖
2023-03-14

MyBatis提供多数据库供应商支持,允许您根据所使用的数据库供应商不同地构建SQL结构。因此您可以将有问题的代码包装在测试中,例如:

<if test="_databaseId == 'mysql'">
   force index(idx1)
</if>

请参阅此处和此处的相关文档。

 类似资料:
  • 生产: 这就是我想要的。

  • 出于安全原因,我希望在Redis中使用类似的代码,因为目前我可以使用,但我必须将其添加到每个希望连接到Redis的应用程序中。(至少有一种方法可以为使用多个密码吗? 我可以用一个应用程序连接到一个数据库,但是这个应用程序也可以切换到另一个数据库。(我至少可以用某种方法阻止这种切换吗?) 出于性能原因,我希望避免并行运行多个redis实例。

  • 我正在创建一个项目,我将让某人从20个类别中最多选择3个类别。因为它总是最多有3个类别,所以在数据库中再创建3列(category\u 1、category\u 2、category\u 3)对我来说并不算多。 我想象在插入的时候,不是保存在3个不同的列中,而是将数组保存到一个“categories”列中。 我的问题是,在获得信息的那一刻。如果我这样做了,比如说搜索每个有一个特定类别的记录,那么什

  • 我使用DBCP池,我想使用testOnBrow和testOnBack来测试连接是否仍然有效。 不幸的是,我必须设置属性validationQuery才能使其工作。 问题:validationQuery中应该有什么值? 我知道:validationQuery必须是一个SQL SELECT语句,它至少返回一行。 问题是我们使用各种数据库(DB2、Oracle、hsqldb)。

  • 可以使用druidDataSource创建DataSource,然后通过jdbcTemplate执行sql。

  • seafile支持在文件系统、s3、ceph、swift、阿里云oss等存储后端之间互相迁移数据(swift暂不支持迁出), 如果你启用了存储后端加密的功能,目前是不能进行数据迁移的。 在不同后端迁移数据需要三个步骤: 1.新建临时 seafile.conf 文件 2.运行迁移脚本 3.替换 seafile.conf 新建临时 seafile.conf 文件 创建一个新的 seafile.conf