2012-08-14 18 views
6

मैं एक एसक्यूएल एक MyBatis नक्शाकार फ़ाइल में लिखा जो कुछ इस तरह है:पहुँच सार्वजनिक स्थिर अंतिम स्ट्रिंग

<select id="somesql"> 
    select a,b,c from tbl_name where d = ? 
</select> 

d के लिए प्लेसहोल्डर मूल्य स्थिर में घोषित किया जाना माना जाता है एक फ़ाइल Constants.java के रूप में कहा:

public static final String d = "d_value"; 

कैसे मैं वास्तव में <select> निर्माण में एक पैरामीटर गुजर बिना मूल्य के साथ प्लेसहोल्डर बदलूं? मैंने #{com.pkg.name.Constants.d} की कोशिश की लेकिन यह काम नहीं किया।

कोई हार्ड कोडिंग !!!

उत्तर

2

माईबेटिस के बॉक्स व्यवहार से बाहर, जहां तक ​​मुझे पता है, आप नहीं कर सकते।

आप एक interceptor for the ParameterHandler लिख सकते हैं और वहाँ मूल्य इंजेक्षन की कोशिश कर सकते हैं, लेकिन आप पैरामीटर हैंडलर पर दो तरीकों के साथ ही खेल सकते हैं के बाद से इस हमेशा संभव नहीं हो सकता है:

  • getParameterObject जो पैरामीटर था कि रिटर्न क्वेरी को भेजा गया (एक स्थिर, एक स्ट्रिंग, एक मानचित्र, एक कस्टम ऑब्जेक्ट या यहां तक ​​कि शून्य हो सकता है क्योंकि यह आपके उदाहरण का मामला है जहां आप पैरामीटर नहीं भेजते हैं)
  • setParameters जहां मुझे लगता है कि आप कोशिश कर सकते हैं पैरामीटर सेट करें यदि आप जानते हैं कि यह तैयार कथन पर कहां है (जो आप कभी-कभी नहीं कर सकते)।

मेरा सुझाव है कि इसे अपनी क्वेरी में पैरामीटर के रूप में पास किया जाए। MyBatis की इंटरसेप्टर सुविधाओं को बहुत अच्छी तरह से प्रलेखित नहीं किया गया है, इसलिए आपको शुरुआत से सही कामकाजी संयोजन नहीं मिल सकता है और आप इसके लायक होने से अधिक परेशानी का सामना कर सकते हैं।

3
<select id="getConvenienceStoreList" resultType ="Store"> 
    SELECT * FROM Store 
    WHERE type = ${@[email protected]_STORE} 
    ORDER BY id 
    LIMIT #{start}, #{limit} 
</select> 

संदर्भ: http://qiita.com/ApplePedlar/items/12dc389cc32f3db5557a

+0

वास्तव में, यह काम करता है !! लेकिन ध्यान दें कि मान "जैसा है" चिपकाया गया है, कोई भाग नहीं रहा है, कोई उद्धरण नहीं है। तो यदि आप इसे संख्याओं के लिए उपयोग नहीं करते हैं, तो आपको कम से कम उद्धरण जोड़ना होगा। –

+0

असल में हम किसी भी पास पैरामीटर को मैपर्स में बदल रहे हैं, इस तथ्य को छोड़कर, हम केवल स्टेटिक फाइनल स्थिरांक का उपयोग नहीं करते हैं, बल्कि आप कुछ स्थिर विधि को सीधे कॉल कर सकते हैं: ${@foo.product.constant.StoreType @getWhereClausule()} – kensai

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