2010-03-18 28 views
20

Tôi đang sử dụng iBATIS để gọi một Stored Procedure trên MSSQL Server, các thông số đầu vào là các thuộc tính trên một POJO được đưa vào bản đồ:Thủ tục lưu trữ thiết lập trở lại POJO bởi iBATIS

Map<String, Object> saveMap = new HashMap<String, Object>(); 
saveMap.put("obj", myArticle); 
update("save", saveMap); 

Tất cả các tham số được thiết lập chính xác như đầu vào cho thủ tục nên không có gì sai ở đó. Nhưng một trong các tham số là tham số đầu ra và tôi đã mong đợi nó được đặt trở lại POJO nhưng thay vào đó, một ánh xạ thêm "obj.new"=false được đặt vào bản đồ bởi iBATIS. Dưới đây là một phiên bản đơn giản của các bản đồ thể hiện các ý tưởng cơ bản:

<procedure id="save"> 
    {<include refid="Core.returned_value" /> 
    CALL SPRC_ARTICLE_NAME_SAVE (
     <include refid = "Core.common_fields" /> 
     @pArticle_id = #obj.art_id# 
    , @pArtname = #obj.artname# 
    , @pNewArticleName_flg = #obj.new,mode=INOUT# 
    )} 
</procedure> 

Sau khi gọi thủ tục tôi có hai ánh xạ trong Bản đồ truyền cho iBATIS:

  • "obj"=POJO
  • "obj.new"=False

Bây giờ tôi thấy rằng iBatis documentation nói "Khi thực hiện thủ tục được lưu trữ res - iBATIS sẽ tạo các đối tượng cho các tham số OUTPUT " vì vậy nó có ý nghĩa. Nhưng câu hỏi của tôi là nếu có một cách để hướng dẫn iBATIS đặt lại giá trị boolean cho POJO sau khi thủ tục được gọi? Tôi thà không làm công việc phụ của việc lấy giá trị ra khỏi bản đồ và đặt nó vào POJO của tôi.

// Uhlén

+0

Tôi tìm thấy câu trả lời Jeff Butler để câu trả lời này Jeff Butler của bài http://groups.google.com/group/mybatis-user/browse_thread/thread/14826bc31c9f143d này là rất hữu ích khi tôi phải đối mặt với một vấn đề tương tự (mặc dù với câu lệnh chọn thay vì bản cập nhật) –

Trả lời

1

Bạn có thể sử dụng bản đồ thông số rõ ràng. Xem Page 21 of the manual

Nó khá dài nhưng nó đã làm việc cho tôi trong quá khứ.

<parameterMap id="swapParameters" class="map" > 
    <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/> 
    <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/> 
</parameterMap> 

<procedure id="swapEmailAddresses" parameterMap="swapParameters" > 
    {call swap_email_address (?, ?)} 
</procedure> 
Các vấn đề liên quan