In diesem Artikel erfahren wir den Nutzung und den laufenden Prozess von MyBatis -Aufrufen gespeicherten Verfahren. Zunächst erstellen wir eine einfache gespeicherte Prozedur
Declimiter $ Create Procedure myBatis.ges_User_Count (in Alter int, out user_count int) SELECT COUNT (*) von Benutzern, wobei Benutzer.age = Age in user_count; $ $
Die Bedeutung dieser gespeicherten Prozedur ist eigentlich relativ einfach, bei der das Alter eingeben und dann ausgewählte Graf (*) von Benutzern ausführt, wobei Benutzer.age = Alter in user_count; Es ist relativ einfach, die Anzahl der Personen mit dem Alter zu erhalten, das dem Alter entspricht, um User_Count Wert zuzuweisen.
Als nächstes kommt der Anruf des gespeicherten Verfahrens. Führen Sie den folgenden Befehl aus, um den Anruf der gespeicherten Prozedur abzuschließen.
Schauen wir uns als nächstes an, wie gespeicherte Verfahren mit MyBatis aufgerufen werden.
usermapper.xml fügt gespeicherte Prozeduranrufkonfiguration hinzu:
<select id = "count" AnweisungType = "Callable" parametermap = "getUserCountMap"> rufen Sie myBatis.ges_User_Count (?,?)
Hauptfunktion:
öffentliche Klasse Learn1Main {public static void main (String [] args) {// myBatis configuration datei String ressourcen = "Learn/mybatis-config.xml"; // Klassenloader verwenden, um die MyBatis -Konfigurationsdatei zu laden (es wird auch die zugehörige Zuordnungsdatei geladen) InputStream IS = Learn1Main.class.getClassLoader (). GetResourceAsStream (Ressource); // Erstellen Sie die Fabrik von SQLSessionSessionFactory Sessionfactory = new SQLSessionFactoryBuilder (). Build (IS); SQLSession Session = SessionFactory.OpenSession (); Karte <String, Integer> parameterMap = new HashMap <String, Integer> (); Parametermap.put ("Alter", 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 (Ergebnis); }}Auslaufergebnisse:
Der endgültige Ausführungsprozess findet im DefaultresultsaThandler statt. Es gibt immer noch einen Unterschied zwischen dem Aufruf gewöhnlicher SQL und gespeicherten Verfahren. Die Ausführung von SQL -Anweisungen verwendet Callablestatement.
// // Ausgabe Parameter // // Rufen Sie die gespeicherte Prozedur auf, um das Ergebnis zurückzugeben, und geben Sie den Ergebniswert in den Parameter @Override public void handleOutputParameters (callABLESTATEMENT CS) SQLEXception {endgültige Objekt parameterObject = parameterHandler.getParameterObject () aus. endgültiges metaObject metaparam = configuration.newmetaObject (parameterObject); endgültige Liste <PARAMETERMAPPING> ParameterMappings = bodensql.getParametermappings (); /Schleife für jeden Parameter für (int i = 0; i <parameterMappings.size (); i ++) {endgültige Parametermapping -Parametermaping = parameterMappings.get (i); //Judge the pattern of the parameter if (parameterMapping.getMode() == ParameterMode.OUT || parameterMapping.getMode() == ParameterMode.INOUT) { if (ResultSet.class.equals(parameterMapping.getJavaType())) { handleRefCursorOutputParameter((ResultSet) cs.getObject(i + 1), parameterMapping, Metaparam); } else {endgültig typeHandler <?> typeHandler = parametermaping.gettTypeHandler (); metaparam.setValue (parameterMaping.getProperty (), typeHandler.getResult (CS, I + 1)); }}}} private void HandlerefCursorOutputParameter (Ergebnisset RS, Parametermaping -Parametermapping, MetaObject metaparam) löscht sqlexception {try {final String resultMapid = parametermaping.getResultmapid (); endgültiger resultMap resultMap = configuration.getResultmap (resultMapID); endgültig defaUltresultHandler resulthandler = new DefaultresultHandhandler (ObjectFactory); Ender ErgebnissetWrapper RSW = Neues Ergebnissetwrapper (RS, Konfiguration); HandlerowValues (RSW, Ergebnismap, ResultHandler, New Rowbounds (), Null); metaparam.setValue (parametermaping.getProperty (), ResultHandler.getResultlist ()); } endlich {// Ausgabe #228 (schließende Ergebnisse) näheresSultset (Rs); }}Das obige ist der vom Editor vorgelegte MyBatis -Quellcode -Analyse der gespeicherten Prozedur -Anruf- und -betriebsprozess der MyBatis -Quellcodeanalyse. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!