No hace falta decir que los beneficios del aprendizaje del código fuente son pequeños en volumen y simples en lógica, por lo que escribiré una serie de artículos para aprender.
Sqlsession
El portal de uso de MyBatis se encuentra en el paquete SQLSession en el paquete org.apache.ibatis.session. Se encuentra que es una interfaz, y debe haber una clase de implementación predeterminada predeterminada en el paquete org.apache.ibatis.session.defaults. Nunca hemos nuevos esta clase, y de acuerdo con las convenciones de Java, usamos el método de fábrica en SQLSessionFactory. Descubrí que también es una interfaz, por lo que debe haber una clase de implementación predeterminada defaultSQLSessionFactory. Esta clase aún no necesita ser creada por sí misma y utiliza el método de fábrica en SQLSessionFactoryBuilder.
DefaultSQLSession
Los métodos principales en defaultSQLSession:
1) cursor <t> selectcursor (instrucción de cadena, parámetro de objeto, rowbounds rowbounds), delegado a ejecutor.QueryCursor (MS, wrapCollection (parámetro), rowbounds).
2) Lista <E> SelectList (instrucción de cadena, parámetro de objeto, RowBounds RowBounds) y Void SELECT (Declaración de cadena, Parámetro de Objeto, RowBounds RowBounds, ResultThandler Handler) y delega al Executor.Query (MS, WrapCollection (Parámetro), RowBounds, Handler).
3) int actualización (instrucción de cadena, parámetro de objeto), delegado a ejecutor.update (ms, wrapCollection (parámetro)).
Se puede ver que hay un ejecutor para completarlo al final.
Ejecutor
El ejecutor se encuentra en el paquete org.apache.ibatis.executor. Es una interfaz. Las clases de implementación son BaseExecutor y CachingExecutor. Entre ellos, BaseExecutor es abstracto y tiene tres subclases SimpleExecutor, ReuseExecutor y Batchexecutor. Vea el nombre y conozca el significado. Los principales métodos en BaseExecutor:
1) Lista <E> consulta (MappedStatement MS, parámetro de objeto, RowBounds RowBounds, ResulThandler Resulthandler, CacheKey Key, BoundSQL BoundSQL) y List <E> QueryFromDatabase (MappedStatement MS, parámetro de objeto, RowBounds RowBounds, ResulThandler Resulthandler, Cachekey Key, BoundsQL), Boundsql, BoundsQL) Delegado como abstracto <E> List <E> doquery (MappedStatement MS, parámetro de objeto, RowBounds RowBounds, Resulthandler Resulthandler, BoundSQL BoundSQL).
2) CURSOR <E> QUERYCURSOR (MAPPEDSTATEMENT MS, parámetro de objeto, RowBounds RowBounds), delegado a Abstract <E> Cursor <E> doqueryCursor (MappedStatement MS, parámetro de objeto, RowBounds RowBounds, BoundsQL LimitSql).
3) INT Update (MappedStatement MS, parámetro de objeto), delegado a resumen int DoupDate (MappedStatement MS, parámetro de objeto).
La clase base procesa la parte pública, dejándola en la implementación de la subclase.
Echemos un vistazo a los métodos principales en SimpleExecutor:
1) Lista <E> doQuery (MappedStatement MS, parámetro de objeto, Rowbounds RowBounds, Resulthandler Resulthandler, BoundSQL BoundSQL), delegado al controlador. <E> Query (STMT, ResultThandler).
2) CURSOR <E> DOQUERYCURSOR (MAPPEDSTATEMENT MS, parámetro de objeto, RowBounds RowBounds, BoundSQL BoundSQL), confiado al controlador. <E> QueryCursor (STMT).
3) int DoupDate (MappedStatement MS, parámetro de objeto), delegado a Handler.Update (STMT).
Se puede ver que finalmente es manejado por el controlador.
Frascador
DeclaryHandler se encuentra en el paquete org.apache.ibatis.executor.statement. Es una interfaz. Las clases de implementación son BaseStatementHandler y RoutingStatementHandler. BaseStatementHandler es abstracto y tiene tres subclases SimpleStatementHandler, PrepareStatementHandler y CallableStatementHandler. Estos tres deben estar familiarizados y deben manejar declaraciones SQL sin parámetros, declaraciones SQL parametrizadas y procedimientos almacenados respectivamente. Veamos los métodos principales en SimpleStatementHandler:
1) Lista <E> consulta (declaración de instrucción, resulThandler Resulthandler), delegado a Declary.Execute (SQL).
2) CURSOR <E> QUERYCURSOR (Declaración de instrucción), delegado a Declary.Execute (SQL).
3) INT UPDATY (Declaración Declaración), delegado a Declary.Execute (SQL).
Finalmente, SQL se ejecuta por declaración. Esto vuelve al paquete Java.sql.
MyBatis completa principalmente el procesamiento de encapsulación de los parámetros SQL, obtiene el conjunto de resultados y genera objetos y deja el proceso de construcción de las declaraciones SQL al usuario. El autor de MyBatis lo diseñó de esta manera. Aunque el marco es semiautomático en general, su flexibilidad ha aumentado considerablemente.