En este artículo, aprenderemos sobre el proceso de uso y ejecución de los procedimientos almacenados de mybatis llamadas. Primero, creamos un procedimiento almacenado simple
Delimiter $ Crear procedimiento mybatis.ges_user_count (en edad int, out user_count int) comience seleccionar recuento (*) de usuarios donde uss.age = edad en user_count; Fin $
El significado de este procedimiento almacenado es en realidad relativamente simple, que es ingresar a la edad y luego ejecutar el recuento select (*) de los usuarios donde usuarios.age = edad en user_count; Es relativamente simple obtener el número de personas con edad igual a la edad para asignar valor a User_Count.
La siguiente es la llamada del procedimiento almacenado. Ejecute el siguiente comando para completar la llamada del procedimiento almacenado.
A continuación, echemos un vistazo a cómo se llaman los procedimientos almacenados usando mybatis.
Usermapper.xml agrega configuración de llamadas de procedimiento almacenado:
<select id = "cuenta" stattleType = "Callable" Parametermap = "getUserCountMap"> Llame a MyBatis.Ges_User_count (?,?) </select>
Función principal:
public class Learn1Main {public static void main (String [] args) {// archivo de configuración mybatis string string recursce = "Learn/mybatis-config.xml"; // Use el cargador de clase para cargar el archivo de configuración de MyBatis (también carga el archivo de asignación asociado) InputStream es = Learn1Main.Class.getClassLoader (). GetResourceASStream (Resource); // construir la fábrica de sqlSessessessionFactory sessionFactory = new SQLSessionFactoryBuilder (). Build (is); Sqlsession session = sessionFactory.opensession (); Map <string, integer> parametermap = new HashMap <String, Integer> (); parametermap.put ("edad", 12); parametermap.put ("user_count", -1); session.selectone ("com.tianjunwei.learn.learn1.entity.user.count", parametermap); Resultado entero = parametermap.get ("user_count"); System.out.println (resultado); }}Resultados de ejecución:
El proceso de ejecución final se encuentra en DeFaultresultsethandler. Todavía hay una diferencia entre llamar a SQL ordinario y procedimientos almacenados. La ejecución de las declaraciones SQL utiliza CallableStatement.
// // Manejar el parámetro de salida // // Llame al procedimiento almacenado para devolver el resultado, coloque el valor del resultado en el parámetro @Override public void HandleOutPutPutPutParameters (CallableStatement CS) lanza SQLException {Final Object ParametREJECT = ParameterHandler.getParameterObject (); metaobject final metaparam = Configuration.newmetaObject (parameterObject); Lista final <amametermapping> parametermappings = boundsql.getParametermappings (); /Loop para cada parámetro para (int i = 0; i <parametermappings.size (); i ++) {parametermapping final parametermapping = parametermappings.get (i); // juzga el patrón del parámetro if (parametermapping.getMode () == parametermode.out || parametermapping.getMode () == parametermode.inout) {if (resultset.class.equals (parametermapping.getJavatype ()) {handLeRefcursOutputParameter ((resulteSet) cs.getObject (i + 1, paramapt metaparam); } else {final typeHandler <?> typeHandler = parametermapping.gettypeHandler (); metaparam.setValue (parametermapping.getProperty (), typeHandler.getResult (cs, i + 1)); }}}} private void handLerefcursoroutputParameter (ResultSet RS, Parametermapping Parametermapping, MetaObject Metaparam) lanza SQLException {try {Final String resultMapID = Parametermapping.getResultMapID (); ResultMap final de resultadomap = configuration.getResultMap (resultMapID); final DeFaultresulThandler ResulThandler = nuevo DeFaultresulThandler (ObjectFactory); ResultSetStrapper final rsw = new ResultSetWrapper (RS, Configuración); HandlerowValues (RSW, ResultMap, Resulthandler, New RowBounds (), NULL); metaparam.setValue (parametermapping.getProperty (), resulthandler.getResultList ()); } Finalmente {// Problema #228 (cierre de resultados de resultados) CloseSultSet (RS); }}Lo anterior es el proceso de llamada y operación del procedimiento almacenado del análisis del código fuente de MyBatis introducido por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!