Używam mybatis-spring 1.2.3 wraz z Spring4 do tworzenia aplikacji internetowych. Głównym składnikiem danych jest MySQL w środowisku produkcyjnym, ale używam również bazy danych H2 w pamięci w testach jednostkowych.MyBatis w jaki sposób mogę wygenerować różne sql dla różnych baz danych backend
MyBatis działa dobrze zarówno z MySQL, jak i H2 w testowaniu i produkcji, ale napotykam problem, że pewnego dnia muszę użyć force index(idx1)
w zapytaniu do MySQL, co spowoduje błąd składniowy w testowaniu jednostkowym jako H2 hasn 't obsługiwane force index
. W rezultacie testowanie jednostki jest całkowicie zepsute.
Chciałbym wiedzieć, czy istnieje sposób, w jaki MyBatis poradzi sobie z taką sytuacją? (Typ bazy danych różni się w testowaniu i produkcji, a ich wsparcie gramatyki SQL nie są identyczne).
Oto mój plik odwzorowujący:
<?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>
Dziękuję za sugestię, działa jak urok. Ale jako węzeł boczny, dla użytkownika mybatis-spring, ustawienie 'databaseIdProvider' w pliku mybatis-config.xml wydaje się nie mieć żadnego skutku (nie wiem dlaczego), a raczej ustawienie' databaseIdProvider' w SqlSessionFactoryBean działa. – dyng