Este artículo se basó previamente en la reconstrucción de SQLSessionFactoryBean, por lo que revisaré brevemente qué operaciones hice:
Cree un nuevo SQLSessionFactoryBean, y el código inicial es el mismo que MyBatis-Spring;
Refactor del método BuildSQLSessionFactory (), extraiga numerosas declaraciones IF en un conjunto de pequeños métodos, reserva métodos de configuración personalizados y agregue métodos de Getter de atributos comunes;
Extraer interfaces de fábrica de componentes y proporcionar la clase de herramienta de creación de componentes SQLSessionComponetFactorys, que administra centralmente xxx () disperso en diferentes lugares para facilitar el reemplazo de componentes.
Ahora veamos cómo expandirnos. Primero, cree un schemasqlSessionFactoryBean, herede el sqlsessionFactoryBean refactorizado y sincronice a una clase recientemente creada en la configuración XML:
clase pública schemasqlSessionFactoryBean extiende sqlsessionFactoryBean {}Para algunas extensiones de funciones simples, como configurar el tipo de resultado predeterminado y escanear la abreviatura de tipo especificada, no lo discutiré mucho aquí. Aquí me centraré en cómo expandirme para verificar la configuración de SQLMapper usando XSD.
1. Sobrescribe el método dopoSesqlMappResource () en SQLSessionFactoryBean. La función de este método es analizar un archivo de configuración de SQLMapper.
Por supuesto, para la compatibilidad, primero debe determinar si es DTD. Si es DTD, analícelo de acuerdo con el método original, de lo contrario analizarlo de acuerdo con el método personalizado:
paquete org.dysd.dao.mybatis.schema; import org.apache.ibatis.executor.errorContext; import org.apache.ibatis.session.configuration; importar org.springframework.core.nestedioexception; import org.springframework.util.xml.xmlvalidationModeTetector; public classqlSessionFactoryBean extiende sqlsessionFactoryBean {@OverrideProtected void dopARSesqlMapperResource (configuración de configuración, mapeador de recursos) arroja náuseas nestionadas {MODE INTENCIÓN = DetectValidationMode (mapperLocation); if (mode == xmlValidationModeDetector.validation_dtd) {// Si es dtd, use myBatis oficial de parcela oficial súper. this.DopARSESQLMApPERResourceWithSchema (Configuración, mapperLocation);} Catch (Exception e) {tire nueva NestedioException ("No se pudo pasar por el recurso de asignación de análisis: '" + mappLocation + "'", e);} Finalmente {ErrorContext.instance (). Reset ();}} Void protegido dopARSESQLMApPERRESEOURCEWITHSCHEMA (configuración de configuración, recursos mapperLocation) {} private int DetectValidationMode (Resource mapperLocation) arroja NestedioException {int MODE = -1; intente {XMLVALIDATIONMODEDETETECETETECTOR DETECTOR = NEW XMLVALIDATIONMODEDETECTOR (); MODEME = detector.detectValidationMode (mapperLocation.getInputStream ());} Catch (Exception e) {throw neestioException ("No se pudo analizar la asignación de recursos: '" + mappperlocation + "'", e);} Finalmente {ErrorContext.instance (). RESET ();} Modo de retorno;}}Aquí tomamos prestado el XMLValidationModEdetector en resorte para detectar el modo de verificación de los archivos de configuración XML. Es lógicamente simple, solo lea una línea por una. Antes de que comience el texto, si encuentra que hay una definición DTD, devolverá el modo DTD, de lo contrario, devolverá el modo XSD (de hecho, no solo el modo de detección presta prestado, sino que también el espacio de nombres personalizado detrás de él también presta prestado).
En este punto, el análisis del archivo de configuración de SQLMapper se ha dividido en dos ramas, que son compatibles con el análisis oficial de mybatis, y el análisis en el modo XSD se navega al método dopoSSQLMapPerResourceWithSchema ().
2. Escriba un archivo XSD para la verificación de SQLMapper (requiere algunos conocimientos básicos de XSD, consulte las notas de estudio sobre la parte XML en este blog)
1. Primero use una herramienta XML para convertir el archivo DTD de MyBatis en el archivo XSD original. Hay muchas herramientas XML que tienen esta función. Puedes buscar en línea.
Aquí hay tres niveles:
(1) Elemento raíz (elemento mapper): correspondiente a un archivo sqlmapper, hay un atributo de espacio de nombres, que representa una clasificación lógica de sus elementos infantiles. Cabe señalar que el atributo del espacio de nombres aquí es diferente del espacio de nombres XML. El primero es una clasificación lógica de MyBatis en sí, y la segunda se usa para definir los elementos XML y las restricciones de atributos que pueden aparecer en archivos XML.
(2) Elementos infantiles de primer nivel (caché | Cache-REF | ResultMap | Parametermap | SQL | Insertar | Actualización | Eliminar | Seleccionar): los elementos infantiles de primer nivel del mapeador. Debido a que el marco MyBatis tiene un procesamiento diferente de elementos infantiles de primer nivel, se usa como un nivel separado. Debido a que se agrega principalmente, elimina y cambia para verificar las declaraciones, se denomina elemento de instrucción a nivel de declaración.
(3) Otros elementos (texto de configuración de SQL, incluir | TRIM | Where | set | foreach | elige | if): texto utilizado para configurar scripts SQL, así como elementos dinámicos de script, llamados elementos de script a nivel de script
2. Haga las siguientes modificaciones basadas en la generación de archivos XSD
(1) Agregue un espacio de nombres, como:
<? xml versión = "1.0" encoding = "utf-8" standalone = "no"?> <xsd: esquema xmlns = "http://dysd.org/schema/sqlmapper" targetNamespace = "http://dysd.org/schema/sqlmapper" xmlns: xsd = "http://www.w3.org/2001/xmlschema" elementformdefault "calificado" versión = "1.0">
(2) Empaque el elemento de primer nivel en un grupo de instrucciones de grupo de elementos
(3) Modifique el elemento mapper para permitir que aparezcan elementos en otros espacios de nombres
(4) envolver elementos de script dinámicos en un grupo de elementos DynascriptGroup y permitir que aparezcan otros elementos nombrados
(5) Use DynascriptGroup para reemplazar dónde aparecen los elementos dinámicos de script, como los elementos <elect>
(6) Algunas otras optimizaciones, como la definición de la declaración de tres valores, preparados y llamables que se pueden tomar por DeclaryType como tipos de enumeración:
<xsd: simpletype name = "stattleType"> <xsd: restriction base = "xsd: token"> <xsd: enumeration value = "declaración" /> <xsd: enumeration value = "preparado" /> <xsd: enumeration value = "llamado" /> < /xsd: restriction> </xsd: simplyTetype>
Los similares incluyen Parametermode, JDBCType, Javatype, etc.
Lo anterior es el resumen del archivo de configuración de SQLMapper utilizado por XSD para verificar myBatis. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!