2012-02-09 4 views
4

첫 번째 질문 : 하나의 OUT 매개 변수를 반환하고 주석이있는 결과 집합을 반환하려고합니다. 첫째, 가능한가? 그렇다면 어떻게해야할까요?OUT 매개 변수를 사용하여 Java MyBatis 저장 프로 시저 호출

의 MyBatis : 3.0.6

데이터베이스 : 내가로부터 메시지를 반환하고

@Select(value= "{ CALL saveUser(" 
     + "#{userId, mode=IN, jdbcType=INTEGER}," 
     + "#{firstname, mode=IN, jdbcType=VARCHAR}," 
     + "#{lastname, mode=IN, jdbcType=VARCHAR}," 
     + "#{message, mode=OUT, jdbcType=VARCHAR}" 
     + ")}") 
@Options(statementType=StatementType.CALLABLE) 
public String saveUser(
     @Param("userId") int userId, 
     @Param("firstname") String firstname, 
     @Param("lastname") String lastname); 

: 여기

2008은 UserDAO 내 메서드 호출의 구문 예는 SQL 서버 내 "저장"절차를 모두 수행 할 수 있으므로 사용자에게 "사용자 저장 성공", "사용자 저장 오류", "이 사용자를 저장할 수있는 권한이 없습니다"등의 응답을 반환 할 수 있습니다. 세트가 문제를 해결할 것입니다, 그저 저의 모든 절차를 바꾸고 싶지는 않습니다. !

두 번째 질문 : 여러 개의 OUT 매개 변수에서 채워진 "SaveProcedureResponse"를 반환 할 수 있습니까? 예를 들어 :

@Select(value= "{ CALL saveUser(" 
     + "#{userId, mode=IN, jdbcType=INTEGER}," 
     + "#{firstname, mode=IN, jdbcType=VARCHAR}," 
     + "#{lastname, mode=IN, jdbcType=VARCHAR}," 
     + "#{message, mode=OUT, jdbcType=VARCHAR}," 
     + "#{status, mode=OUT, jdbcType=VARCHAR}," 
     + "#{returnCode, mode=OUT, jdbcType=INTEGER}" 
     + ")}") 
@Options(statementType=StatementType.CALLABLE) 
public SaveProcedureResponse saveUser(
     @Param("userId") int userId, 
     @Param("firstname") String firstname, 
     @Param("lastname") String lastname); 

는 빈은 다음과 같다 여기서

public class SaveProcedureResponse { 
    private String message; 
    private String status; 
    private int returnCode; 

    public SaveProcedureResponse(String message, String status, int returnCode) { 
     this.message = message; 
     this.status = status; 
     this.returnCode = returnCode; 
    } 
} 

감사합니다!

답변

7

첫 번째 질문 : 나는 하나 개의 OUT 매개 변수가 아닌 주석으로 설정 결과를 반환하려합니다. 첫째, 가능한가? 그것이 그렇다면, 어떻게 가 이것을 할 것입니까?

err, sorta. Mapper는 out 매개 변수가 return이 아니지만 Mybatis에서 매개 변수 객체로 설정하거나 this과 같은지도에 넣을 수 있습니다.

그래서 모든 필드에 대해 getter 및 setter가있는 단순한 Java 객체가 제공됩니다. 매퍼를 호출하면 out 매개 변수가 객체에 설정됩니다.

<update id="someProcedure" statementType="CALLABLE"> 
    {call some procedure(
      #{someInParamA, mode=IN}, 
      #{someInParamB, jdbcType=ARRAY, mode=IN}, 
      #{someOutParamA, javaType=Boolean, jdbcType=NUMERIC, mode=OUT }, 
      #{someOutParamB, javaType=Object, jdbcType=ARRAY, jdbcTypeName=SOMEJDBCTYPE, mode=OUT})} 
</update> 

출력 매개 변수를 얻으려면 다음과 같이됩니다.

mapper.getSomeProcedure(someBean); 
//out params populated on the object passed to the mapper :) 
String outA = bean.getSomeOutParamA(); 

설명하기가 어렵습니다.

+0

감사합니다! 예, XML 매퍼로 어떻게 할 수 있는지 알고 있지만 순수 주석으로도 동일한 작업을 수행 할 수 있는지 궁금합니다. – snoozy

+0

주석과 함께 작동해야합니다. 방금 일부 코드를 복사하고 이름을 변경 했으므로 주석 선택으로 바꾸고 싶지 않았습니다. – Andy

5

MyBatis-Spring 주석을 사용하여 다음과 같이 코드를 작성하십시오.

public interface ProductMapper 
{ 
    @Select("exec Pup_ProductSearch_Sel #{searchString}, #{pageNum}, #{pageSize}, #{totalRows,mode=OUT,jdbcType=NUMERIC}") 
    @Options(statementType = StatementType.CALLABLE) 
    public List<Map<String, Object>> productSearch(ProductSearchParameters params); 


    public class ProductSearchParameters 
    { 
     private String searchString = null; 
     private Integer pageNum = 1; 
     private Integer pageSize = 5; 
     private Integer totalRows = -1; 

     // Accessors go here... 
    } 
} 

IN 매개 변수는 호출 코드에서 우리에 의해 채워집니다. OUT 매개 변수는 데이터 액세스 계층에 의해 채워지며 맵퍼를 호출 한 후에 params 객체에 있습니다. 이 게시물에서 영감을

@Service 
public class TestService 
{ 
    @Resource 
    private ProductMapper mapper; 


    public void run() 
    { 
     final ProductMapper.ProductSearchParameters params = new ProductMapper.ProductSearchParameters(); 
     params.setSearchString("book"); // IN parameter 
     final List<Map<String, Object>> results = mapper.productSearch(params); 

     for(final Map<String, Object> product : results) 
     { 
      System.out.println(product.get("title")); 
     } 

     System.out.println("Total results: " + params.getTotalRows()); // OUT parameter 
    } 
} 

: 당신의 응답을 http://ibatis.10938.n7.nabble.com/IBatis-3-0-beta-10-annotations-stored-procedures-td7806.html