이 기사에서는 MyBatis 호출 저장 절차의 사용 및 실행 프로세스에 대해 배웁니다. 먼저 간단한 저장 절차를 만듭니다
delimiter $ create procedure mybatis.ges_user_count (Age int, out user_count int) user.age = age in user_count에서 사용자에서 선택 카운트 (*)를 시작하십시오. 끝 $
이 저장된 절차의 의미는 실제로 비교적 간단하며, 이는 AGE를 입력 한 다음 Users.age = Age in User_Count에있는 사용자로부터 SELECT COUNT (*)를 실행하는 것입니다. user_count에 가치를 할당하기 위해 나이와 같은 연령의 사람 수를 얻는 것은 비교적 간단합니다.
다음은 저장된 절차의 호출입니다. 저장된 절차의 호출을 완료하려면 다음 명령을 실행하십시오.
다음으로 Mybatis를 사용하여 저장 절차가 어떻게 호출되는지 살펴 보겠습니다.
usermapper.xml 저장 프로 시저 통화 구성을 추가합니다.
<select id = "count"statetype = "callable"parametermap = "getUserCountMap"> Call myBatis.ges_user_count (?,?) </select>
주요 기능 :
public class learn1main {public static void main (String [] args) {// mybatis 구성 파일 문자열 resource = "legr/mybatis-config.xml"; // 클래스 로더를 사용하여 myBatis 구성 파일을로드합니다 (연관된 매핑 파일도로드) inputStream은 = chare1main.class.getClassLoader (). getResourCeasStream (resource); // sqlsessionsessionSESSIONFACTORY SESSSIONFACTORY의 공장 구축 = 새 SQLSESSIONFACTORYBUILDER (). 빌드 (IS); sqlsession session = sessionfactory.opensession (); Map <String, Integer> ParametErmap = new Hashmap <String, integer> (); ParametErmap.put ( "Age", 12); ParametErmap.put ( "user_count", -1); session.selectone ( "com.tianjunwei.learn.learn1.entity.user.count", parametermap); 정수 결과 = ParametErmap.get ( "user_count"); System.out.println (결과); }}실행 결과 :
최종 실행 프로세스는 Defaultresultsethandler에 있습니다. 일반 SQL 및 저장 절차에는 여전히 차이가 있습니다. SQL 문의 실행은 CallAblestatement를 사용합니다.
// // 출력 매개 변수 핸들 // // 저장된 절차를 호출하여 결과를 반환하고, 결과 값을 매개 변수에 넣습니다. @Override public void handsOutpuRameters (callAbleStatement cs) sqlexception {final objectAberObject = parameterHandler.getParameterObject (); 최종 metaobject metaparam = configuration.newmetaobject (parameterObject); 최종 목록 <ParametErmpaping> ParametErmappings = boundsql.getParameterMappings (); (int i = 0; i <parameterMappings.size (); i ++)에 대한 각 매개 변수에 대한 /루프 {Final ParametErmpapping ParametErmping = ParameterMappings.get (i); // if (parameterMpapp.getMode () == ParametErmode.out || parameterMping.getMode () == ParametErmode.inout) {if (resultSet.class.equals ())) {handlerefcursorOutputParameter ((resultSet) Cs.GetObeT (i + 1), Metaparam); } else {Final TypeHandler <?> typeHandler = ParametErmpapp.GetTypeHandler (); metaparam.setValue (parameterMpapp.getProperty (), typehandler.getResult (cs, i + 1)); }}}} private void handlerefcursorOutputParameter (resultSet rs, parameterMpaping parameterMpapping, metaObject metaparam)는 sqlexection {try {final string resultMapid = parameterMpapp.getResultMapid (); 최종 결과 map resultmap = configuration.getResultMap (resultMapId); 최종 Defaultresulthandler resulthandler = 새로운 Defaultresulthandler (ObjectFactory); 최종 결과 설정 wrapper rsw = new resultStrapper (RS, Configuration); handlerowValues (RSW, ResultMap, Resulthandler, New RowBounds (), NULL); metaparam.setValue (parameterMpapp.getProperty (), resulthandler.getResultList ()); } 마침내 {// issue #228 (닫기 결과 세트) CloseResultset (RS); }}위는 편집자가 소개 한 Mybatis 소스 코드 분석의 저장 프로 시저 호출 및 작동 프로세스입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!