2012-08-24 7 views
6

में अंतिम सम्मिलित रिकॉर्ड की आईडी प्राप्त करें I mybatis के लिए नौसिखिया हूँ। मैं अंतिम सम्मिलित रिकॉर्ड की आईडी प्राप्त करने की कोशिश कर रहा हूं। मेरे डेटाबेस mysql है और मेरी नक्शाकार एक्सएमएलmybatis

<insert id="insertSelective" parameterType="com.mycom.myproject.db.mybatis.model.FileAttachment" > 
    <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" > 
    SELECT LAST_INSERT_ID() as id 
</selectKey> 
insert into fileAttachment 
<trim prefix="(" suffix=")" suffixOverrides="," > 
    <if test="name != null" > 
    name, 
    </if> 
    <if test="attachmentFileSize != null" > 
    size, 
    </if>  
</trim> 
<trim prefix="values (" suffix=")" suffixOverrides="," > 
    <if test="name != null" > 
    #{name,jdbcType=VARCHAR}, 
    </if> 
<if test="attachmentFileSize != null" > 
    #{attachmentFileSize,jdbcType=INTEGER}, 
    </if> 
</trim> 
</insert> 

मैंने सोचा था कि बयान यहाँ लिखा है 'का चयन LAST_INSERT_ID() आईडी के रूप में' आखिरी डाला रिकॉर्ड की आईडी लौटना चाहिए, लेकिन मैं रिकॉर्ड डालने के बाद हमेशा 1 हो रही है।

मेरे mapper.java वर्ग मैं विधि

int insertSelective(FileAttachment record); 

मेरी दाव वर्ग में मैं

पूर्णांक आईडी = fileAttachmentMapper.insertSelective (fileAttachment) का उपयोग कर रहा हूँ;

मुझे नया रिकॉर्ड डालने पर हमेशा आईडी का मूल्य मिल रहा है 1। मेरा आईडी फ़ील्ड स्वतः बढ़ता गया है और रिकॉर्ड ठीक से डालने जा रहे हैं।

उत्तर

13

आईडी वस्तु में इंजेक्ट किया जाता है:

int num_of_record_inserted = fileAttachmentMapper.insertSelective(fileAttachment); 

int id = fileAttachment.getId(); 

क्या selectKey करता है अपनी संपत्ति id में fileAttachment में, वस्तु आप डालने कर रहे हैं में आईडी स्थापित करने के लिए इस मामले में है और बाद रिकॉर्ड डाला जाता है।

+0

महान jddsantaella है ... क्या यह धागा सुरक्षित है? – user965884

+0

मुझे नहीं पता, लेकिन मुझे मेरा बैटिस पर भरोसा है, इसलिए मैं हाँ कहूंगा। – jddsantaella

+0

अच्छा .. धन्यवाद Jddsantaella – user965884

1

मुझे लगता है कि 1 लौटाया जा रहा है जो रिकॉर्ड/डालने वाले रिकॉर्ड्स की संख्या को संदर्भित करता है। मुझे लगता है कि आईडी फ़ाइल एटैचमेंट पैरामीटर पर सेट है जिसे आपने कॉल करने के लिए कॉल में पारित किया है।

+0

प्रतिक्रिया एड के लिए धन्यवाद, तो फिर मैं उस आईडी को कैसे प्राप्त कर सकता हूं? – user965884

6

आप केवल

<insert id="insert" parameterType="com.mycom.myproject.db.mybatis.model.FileAttachment" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> 

MyBatis में डालने टैग के अंदर का चयन क्वेरी को क्रियान्वित करने के कोई जरूरत नहीं है प्रयोग करना होगा। यह आप डालने operation.Here परिभाषित useGeneratedKeys = "true", keyProperty = "आईडी" के लिए नए पैरामीटर प्रदान करता है, keyColumn = "आईडी" है.आप निम्नलिखित तरीके

FileAttachment fileAttachment=fileAttachmentMapper.insertSelective(fileAttachment); 
    Integer id=fileAttachment.getId(); 

fileAttachment.getId में आईडी के लिए मूल्य पुनर्प्राप्त कर सकते हैं() का उपयोग किया जाता है क्योंकि सम्मिलित टैग कुंजी कॉलम = "आईडी" परिभाषित किया गया है और आपको फ़ाइल एटैचमेंट के फ़ाइल एटैचमेंट संदर्भ के अंदर सभी रिटर्न वैल्यू मिलेंगे।

0

मुझे लेखक में आशा है कि आप एक कस्टम समग्र लेखक हो सकते हैं और वहां आप सम्मिलित आईडी प्राप्त कर सकते हैं।

0

(1) रुजू के उत्तर में जोड़ना, सम्मिलित कथन में आपको विशेषता का उपयोग परिभाषित करने की आवश्यकता है GeneratedKeys = true, पैरामीटर टाइप = "ऑब्जेक्ट", keyProperty = "objectId" और keyColumn = "objectId" को उसी प्राथमिक कुंजी के साथ सेट किया जाना चाहिए ऑब्जेक्ट रिकॉर्ड स्टोर करने वाली तालिका से कॉलम नाम (objectId)। प्राथमिक कुंजी कॉलम (objectId) को डेटाबेस तालिका में AUTO_INCREMENT पर सेट किया जाना चाहिए।

(2) जब सम्मिलित कथन ट्रिगर किया जाता है तो नई जेनरेट की गई प्राथमिक कुंजी (ऑब्जेक्टआईडी) ऑब्जेक्ट में संग्रहीत की जाएगी, और आप ऑब्जेक्ट आईडी को इस विधियों (object.getObjectId() या object.objectId का उपयोग करके पुनर्प्राप्त कर सकते हैं)। अब यह सटीक और नए जेनरेट किए गए प्राथमिक को देना चाहिए। यह मेरे लिए काम करता है ....

3

वास्तव में, माइबैटिस ने पहले से ही यह सुविधा प्रदान की है। आप विकल्प का उपयोग कर सकते हैं: अंतिम उपयोग आईडी प्राप्त करने के लिए "useGeneratedKeys"।

यहां MyBatis से स्पष्टीकरण दिया गया है। (यदि आप अधिक विस्तृत जानकारी जानना चाहते हैं, तो आप MyBatis आधिकारिक पृष्ठ पर जा सकते हैं)।

useGeneratedKeys (डालने और केवल अद्यतन) यह MyBatis बताता डेटाबेस से आंतरिक रूप से उत्पन्न कुंजी को पुनः प्राप्त करने JDBC getGeneratedKeys विधि का उपयोग करने (जैसे RDBMS में ऑटो वेतन वृद्धि क्षेत्रों MySQL या एसक्यूएल सर्वर की तरह)। डिफ़ॉल्ट: झूठी

आप एक्सएमएल उपयोग कर रहे हैं:

<insert id="" parameterType="" useGeneratedKeys="true"> 

आप एनोटेशन उपयोग कर रहे हैं:

@Insert("your sql goes here") 
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") 
int insert(FileAttachment fileAttachment) throws Exception; 

एक बार जब आप डालने आपरेशन खत्म, fileAttachment के setId() विधि हो जाएगा आह्वान किया गया, और अंतिम डाले गए रिकॉर्ड की आईडी पर सेट है। अंतिम प्रविष्टि आईडी प्राप्त करने के लिए आप FileAttachment के getId() का उपयोग कर सकते हैं।

मुझे आशा है कि यह आपकी मदद करेगा।

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