2015-11-10 8 views
5

के लिए अलग-अलग एसक्यूएल कैसे उत्पन्न कर सकता हूं, मैं वेब एप्लिकेशन बनाने के लिए स्प्रिंग 4 के साथ माइबैटिस-वसंत 1.2.3 का उपयोग कर रहा हूं। मुख्य डेटा स्टोरेज उत्पादन वातावरण में MySQL है, लेकिन मैं यूनिट परीक्षण में इन-मेमोरी डेटाबेस एच 2 का भी उपयोग करता हूं।MyBatis मैं विभिन्न डेटाबेस बैकएंड

MyBatis MySQL और एच 2 परीक्षण और उत्पादन में दोनों के साथ अच्छी तरह से काम करता है, लेकिन मैं एक समस्या यह है कि एक दिन मैं MySQL के लिए एक प्रश्न है, जो इकाई परीक्षण में एक सिंटैक्स त्रुटि का कारण होगा एच 2 hasn के रूप में force index(idx1) उपयोग करने की आवश्यकता के पार चलो force index समर्थित नहीं है। नतीजतन, इकाई परीक्षण पूरी तरह टूटा हुआ है।

मैं जानना चाहता हूं कि माईबेटिस ऐसी स्थिति को संभाल सकता है? (डेटाबेस के प्रकार के परीक्षण और उत्पादन में अलग है, और SQL व्याकरण के उनके समर्थन के समान नहीं हैं।)

यहाँ मेरी नक्शाकार फ़ाइल है:

<?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> 

उत्तर

2

MyBatis बहु db विक्रेता समर्थन है कि आप की संरचना करने के लिए अनुमति देता है प्रदान करता है आपके एसक्यूएल अलग-अलग डेटाबेस विक्रेता के आधार पर उपयोग करते हैं जो आप उपयोग करते हैं।

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

प्रलेखन here और here के प्रासंगिक टुकड़े देखें: तो तुम जैसे एक परीक्षण में समस्याग्रस्त कोड लपेट सकता है।

+0

आपके सुझाव के लिए धन्यवाद, यह एक आकर्षण की तरह काम करता है। लेकिन माइबैटिस-वसंत के उपयोगकर्ता के लिए, साइड नोड के रूप में, mybatis-config.xml में 'डेटाबेस आईडीप्रोवाइडर' सेट करने का कोई प्रभाव नहीं पड़ता है (मुझे नहीं मिला है), बल्कि SQLLessionFactoryBean कार्यों में 'डेटाबेस आईडीप्रोवाइडर' सेट करना। – dyng

संबंधित मुद्दे