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