2015-11-10 16 views
5

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> 

cevap

2

MyBatis sen yapısını sağlar çoklu db sağlayıcı destek sağlar SQL'in kullandığınız veritabanı satıcısına bağlı olarak farklı.

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

belgelerinde here ve here ilgili parçalarını Bkz: Yani örneğin bir testte sorunlu kod sarabilirdiniz.

+0

Ö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