2011-02-22 12 views
11

मैं MyBatis 3.0.3 का उपयोग कर रहा है और समस्या है: डेटाबेस के कुछ कॉलम अंडरस्कोर से नाम है और इन स्तंभों इकाई गुण (कि CamelCase में निश्चित रूप से कर रहे हैं)MyBatis कॉलम मानचित्रण

class User { 
    private String first_name; 
    ... 
} 

public interface UserDao { 
    @Select("SELECT * FROM users") 
    List<User> findAllUsers(); 
} 

को मैप किया जाना चाहिए दुर्भाग्य से मैं घोषणात्मक रूप से हल करने का कोई तरीका नहीं देख सकता (जैसे यह जेपीए - @ कॉलम (नाम = "first_name") में किया जाता है)। मैं ऐसे कॉलम के लिए चयन-खंड में उपनाम बना सकता हूं (पहले नाम के रूप में पहले नाम और नाम के रूप में sush), लेकिन यह भी लंगड़ा दिखता है।

कोई विचार? धन्यवाद।

+1

देखो। – DwB

उत्तर

19

डीडब्ल्यूबी के लिए धन्यवाद। यही कारण है कि मदद की:

@Select("SELECT * FROM users") 
    @Results({ 
     @Result(property = "firstName", column = "first_name"), 
     @Result(property = "lastName", column = "last_name") 
    }) 
    List<User> findUsers(); 

ps लेकिन कई प्रश्न के मामले में मैं प्रत्येक विधि जहां इकाई उपयोगकर्ता दिया जाता है के लिए @ परिणाम/@ परिणाम कोड बॉयलरप्लेट की जरूरत है। मेरे मामले में बहुत कम जगहें होंगी, इसलिए यह कोई समस्या नहीं है, लेकिन आम तौर पर मैं अब भी सामान्य समाधान ढूंढना चाहूंगा।

+3

मुझे लगता है कि आप एक्सएमएल कॉन्फ़िगरेशन और एनोटेशन मिश्रण कर सकते हैं। वास्तविक SQL के लिए कोड में @ चयन छोड़ दें लेकिन भाग को xml कॉन्फ़िगरेशन फ़ाइल में रखें। परिणाम मानचित्र वस्तु/वर्ग स्तर (नामस्थान पर आधारित) लागू किया जाना चाहिए ताकि आपको प्रत्येक विधि पर @Results निर्दिष्ट नहीं करना पड़े। – AngerClown

+3

यह प्रश्न अब थोड़ा पुराना है, लेकिन भविष्य के संदर्भ के लिए, शायद ऑटो-मैपिंग पर एक नज़र डालें: http://www.mybatis.org/core/sqlmap-xml.html#Auto- मानचित्रण। – lsoliveira

+0

आप अंडरस्कोर नामकरण को कैमेलकेस में कनवर्ट करने के लिए mapUnderscoreToCamelCase सेटिंग का भी उपयोग कर सकते हैं, रेफरी: http://mybatis.github.io/mybatis-3/configuration.html – ozhan

5

UserMapper.xml फ़ाइल में एक ResultMap परिभाषित करें, और इन पंक्तियां जोड़ें:

<resultMap id="BaseResultMap" type="package.for.User"> 
    <result column="user_name" jdbcType="VARCHAR" property="userName" /> 
    <!-- other columns --> 
</resultMap> 

अपने जावा कोड में, @ResultMap टिप्पणी जोड़ने:

public interface UserDao { 
    @Select("SELECT * FROM users") 
    @ResultMap("BaseResultMap") 
    List<User> findAllUsers(); 
} 

आप MyBatis Generator का उपयोग इन आधार कोड स्वचालित रूप से उत्पन्न करने के लिए कर सकते हैं ।

9

एडुआर्डो Macarron निम्न समस्या पर इस सुविधा का सुझाव दिया:

http://mybatis.github.io/mybatis-3/configuration.html#settings

:

https://code.google.com/p/mybatis/issues/detail?id=43

MyBatis 3 के प्रलेखन के अनुसार, अब एक सेटिंग में वर्णित माध्यम से संभव है असल में आपको कॉन्फ़िगर करना होगा:

<setting name="mapUnderscoreToCamelCase" value="true"/> 

जिसका मतलब है:

क्लासिक डेटाबेस स्तंभ नाम से स्वत: मानचित्रण सक्षम बनाता है ऊंट मामले क्लासिक जावा संपत्ति के नाम aColumn को A_COLUMN।

+0

स्वीकृत उत्तर सही था जब 2011 में इसका उत्तर दिया गया था। लेकिन इसके लिए भविष्य में इसे देखने वाले किसी भी व्यक्ति का, यह जवाब सही दृष्टिकोण होगा। –

4

यदि ऐसे कॉलम नहीं हैं तो आप इसे इस तरह से कर सकते हैं और ResultMap से बच सकते हैं।

@Select("SELECT first_name as firstName, last_name as lastName FROM users") 
List<User> findUsers(); 

एक अनुकूलन SqlSessionFactory के माध्यम से सक्रिय किया जा सकता है कि यह अधिक पठनीय आप मामले मानचित्रण ऊंट की तार के सरणी है, जो अतिरिक्त स्थान

@Select({ 
    "SELECT", 
    " first_name as firstName,", 
    " last_name as lastName", 
    "FROM users"}) 
List<User> findUsers(); 
1

साथ concanate MyBatis वसंत एनोटेशन आधारित विन्यास अंडरस्कोर में उपयोग कर सकते हैं बनाने के लिए , जैसे:

@Bean 
@Primary 
public SqlSessionFactory sqlSessionFactory() throws Exception { 
    SqlSessionFactory factory = sessionFactoryBuilder().build(); 
    factory.getConfiguration().setMapUnderscoreToCamelCase(true); 
    // other configurations 
    return factory; 
} 
0

अपनी कॉन्फ़िगरेशन फ़ाइल में MyBatis के ऑटो-मैपिंग का उपयोग करें (एप्लिकेशन.प्रोपर्टीज या एप्लिकेशन की तरह sth।YML), यहाँ चाहते:

mybatis.configuration.map-underscore-to-camel-case=true 

संदर्भ: http://www.mybatis.org/mybatis-3/sqlmap-xml.html#Auto-mapping

चीनी संदर्भ: myBatis @Results और @Result एनोटेशन में http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping

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