Bir web uygulaması oluşturmak için Springbat ile birlikte mybatis-spring 1.2.3 kullanıyorum. Ana veri depolama, üretim ortamında MySQL'dir, ancak aynı zamanda birim testinde bellek içi veritabanı H2 kullanıyorum.MyBatis Farklı veritabanı arka planı için nasıl farklı sql oluşturabilirim
MyBatis, hem test hem de üretimde MySQL ve H2'nin her ikisi ile iyi çalışır, ancak bir problemle karşılaştığımda, bir gün, MySQL'e bir sorguda force index(idx1)
'u kullanmam gerekir. Bu, H2 hasnası olarak birim testinde bir sözdizimi hatasına neden olur. force index
desteklenmiyor. Sonuç olarak, birim testi tamamen bozuldu.
MyBatis'in böyle bir durumla başa çıkabilmesinin bir yolu olduğunu bilmek isterim. (Veritabanının tip test ve üretimde farklılık ve SQL dilbilgisi destek özdeş değildir.) İşte
benim mapper dosyasıdır:<?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>
Öneriniz için teşekkürler, bir çekicilik gibi çalışır. Ancak, mybatis-spring.xml dosyasında mybatis-spring kullanıcısı için bir yan düğüm olarak, SqlSessionFactoryBean çalışmalarında 'databaseIdProvider 'ayarını yerine getirmedikçe (neden bulamadım)' databaseIdProvider' ayarının yapılmadığı görülmektedir. – dyng