erzeugen Ich benutze mybatis-spring 1.2.3 zusammen mit Spring4, um eine Webanwendung zu erstellen. Der Hauptdatenspeicher ist MySQL in der Produktionsumgebung, aber ich verwende auch die In-Memory-Datenbank H2 im Komponententest.MyBatis Wie kann ich verschiedene SQL für verschiedene Datenbank Backend
MyBatis funktioniert gut sowohl mit MySQL und H2 in Test und Produktion, aber ich stoße auf ein Problem, dass ich eines Tages force index(idx1)
in einer Abfrage zu MySQL verwenden muss, die einen Syntaxfehler in Komponententests als H2 hasn verursachen wird unterstützt nicht force index
. Als Ergebnis ist der Komponententest vollständig unterbrochen.
Ich möchte wissen, gibt es eine Möglichkeit, dass MyBatis mit einer solchen Situation umgehen kann? (Art der Datenbank unterscheidet sich in Test und Produktion, und ihre Unterstützung von SQL-Grammatik sind nicht identisch.)
Hier ist meine Mapper-Datei:
<?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>
Vielen Dank für Ihren Vorschlag, es funktioniert wie ein Charme. Aber als ein Seitenknoten, für Benutzer von mybatis-spring, hat die Einstellung 'databaseIdProvider' in mybatis-config.xml keinen Effekt (ich habe nicht gefunden, warum), sondern die Einstellung' databaseIdProvider' in SqlSessionFactoryBean funktioniert. – dyng