この記事では、ストアドプロシージャのMyBatisコールの使用および実行プロセスについて学びます。まず、簡単なストアドプロシージャを作成します
Delimiter $ CREATE PROCEDURE MYBATIS.GES_USER_COUNT(Age int、out user_count int)begin users.age = age into user_count; $を終了します
このストアドプロシージャの意味は、実際には比較的単純です。これは、年齢に入り、ユーザーからselect count(*)を実行することです。年齢と同等の年齢の人の数をuser_countに割り当てることは比較的簡単です。
次は、ストアドプロシージャの呼び出しです。次のコマンドを実行して、ストアドプロシージャの呼び出しを完了します。
次に、MyBatisを使用してストアドプロシージャがどのように呼ばれるかを見てみましょう。
usermapper.xmlはストアドプロシージャコール設定を追加します:
<select id = "count" StatementType = "callable" parametermap = "getUsercountMap"> mybatis.ges_user_count(?、?)</select>
主な関数:
public class Learn1main {public static void main(string [] args){// mybatis configuration file string resource = "Learn/mybatis-config.xml"; //クラスローダーを使用してMyBatis構成ファイルをロードします(関連するマッピングファイルもロードします)inputstream is = learn1main.class.getClassLoader()。 // sqlsessionsessessfactory sessionfactoryのファクトリーをビルド= new sqlsessionfactorybuilder()。build(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); integer result = parametermap.get( "user_count"); system.out.println(result); }}実行結果:
最終的な実行プロセスは、defaultresultsethandlerにあります。通常のSQLを呼び出すこととストアドプロシージャの呼び出しには依然として違いがあります。 SQLステートメントの実行では、Callablestatementが使用されます。
// //ハンドル出力パラメーター// //ストアドプロシージャを呼び出して結果を返し、結果値をパラメーター@Override public handleOutputParameters(callablestatement cs)にsqlexception {final object parameterobject = parameterhandler.getParametarobject(); final MetaObject Metaparam = configuration.newmetaobject(parameterObject);最終リスト<parametermapping> parametermappings = boundsql.getParametermappings(); /(int i = 0; i <parametermappings.size(); i ++){final parametermapping parametermapping = parametermappings.get(i); //パラメーターのパターンを判断するif(parametermapping.getMode()== parametermode.out || parametermapping.getMode()== parametermode.inout){if(resultSet.class.equals(parametermapping.getJavatype())){handlerefcursOrutParameter Metaparam); } else {final TypeHandler <? Metaparam.setValue(parametermapping.getProperty()、typehandler.getResult(cs、i + 1)); }}}}} private void handlerefcursoroutputparameter(resultset rs、parametermapping parametermapping、metaobject metaparam)throws sqlexception {try {final string resultmapid = parametermapping.getResultmapid(); final resultmap resultmap = configuration.getResultMap(resultMapid);最終defaultresulthandler resulthandler = new defaultresulthandler(objectFactory); final resultsetwrapper rsw = new resultsetwrapper(rs、configuration); HandlerOwValues(RSW、ResultMap、Resulthandler、New RowBounds()、null); Metaparam.setValue(parametermapping.getProperty()、Resulthandler.getResultList()); }最後に{// Issue#228(close resultSets)closeeresultset(rs); }}上記は、編集者が紹介したMyBatisソースコード分析のストアドプロシージャコールと操作プロセスです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!