Este artigo foi baseado anteriormente na reconstrução do SQLSessionFactoryBean, então revisarei brevemente quais operações fiz:
Crie um novo SQLSessionFactoryBean, e o código inicial é o mesmo que Mybatis-Spring;
Refactor O método BuildSQLSessionFactory (), extraia numerosas instruções IF em um conjunto de pequenos métodos, reserve métodos de configuração personalizada e adicione métodos de getter atributos comuns;
Extrair interfaces de fábrica de componentes e fornecer classe de criação de componentes SQLSessionComComPonetFactorys, que gerencia centralmente o novo XXX () espalhado em diferentes locais para facilitar a substituição de componentes.
Agora vamos ver como expandir. Primeiro, crie um esquemaqlSessionFactoryBean, herde o SQLSessionFactoryBean refatorado e o sincronize com uma classe recém -criada na configuração XML:
classe pública schemasqlSessionFactoryBean estende SQLSessionFactoryBean {}Para algumas extensões de função simples, como definir o tipo de resultado padrão e digitalizar a abreviação do tipo especificado, não discutirei muito aqui. Aqui vou me concentrar em como expandir para verificar a configuração do SQLMapper usando o XSD.
1. Subscite o método DoparsqlMapperSource () no SQLSessionFactoryBean. A função desse método é analisar um arquivo de configuração SQLMAPPPER.
Obviamente, para compatibilidade, você precisa primeiro determinar se é DTD. Se for DTD, analise -o de acordo com o método original, de outra forma, analise -o de acordo com o método personalizado:
pacote org.dysd.dao.mybatis.schema; importar org.apache.ibatis.executor.errorcontext; importar org.apache.ibatis.session.configuration; importação org.springframework.core.censexception; importação ou importância; org.springframework.util.xml.xmlValidationModedEtector; public class SchemasqlSessionFactoryBean estende sqlSessionFactoryBean {@OverrideProtected void MODESEXEMEXSEXIMEXTIONEXTIONEXTIONEXTIONEXTOMEX (Configuração da configuração, Recurso -Recurso) DetectValidationMode (MapperLocation); if (mode == xmlValidationModedEtector.Validation_Dtd) {// Se for DTD, use o Mybatis Official Parsing Super.doparseSqlMapperResource (Configuração, a verificação de mapperlocation);} else {Try {/ {/ {/nMapper this.DoparsSqlMapperSourceWithSchema (Configuração, MapperLocation);} Catch (Exceção e) {Troque a nova itensception ("falhou em analisar o recurso de mapeamento: '" + mapperlocation + "", e);} finalmente {errorContext.InStance (). doParseSqlMapperResourceWithSchema(Configuration configuration, Resource mapperLocation){}private int detectValidationMode(Resource mapperLocation) throws NestedIOException {int mode = -1;try {XmlValidationModeDetector detector = new XmlValidationModeDetector();mode = Detector.DeTectValidationMode (MapperLocation.getInputStream ());} Catch (Exceção e) {Troque a nova itensception ("falhou em analisar o recurso de mapeamento: '" + mappperLocation + "'", e);} finalmente {ErrorContext.instance ().Aqui emprestamos o XMLValidationModEdETector na mola para detectar o modo de verificação de arquivos de configuração XML. É logicamente simples, basta ler uma linha por uma. Antes do início do texto, se você achar que existe uma definição de DTD, você retornará o modo DTD, caso contrário, retornará o modo XSD (na verdade, não apenas o modo de detecção empréstimo de empréstimo, mas também o espaço para nome personalizado por trás também empréstimos em busca de primavera).
Nesse ponto, a análise do arquivo de configuração do SQLMAPPER foi dividida em dois ramos, que são compatíveis com a análise oficial de Mybatis, e a análise no modo XSD é navegada para o método doparsqlMapperReRcewithschema ().
2. Escreva um arquivo xsd para verificação do SQLMAPPPER (requer algum conhecimento básico do XSD, consulte as notas de estudo sobre a parte XML neste blog)
1. Primeiro, use uma ferramenta XML para converter o arquivo DTD do mybatis no arquivo XSD original. Existem muitas ferramentas XML que têm essa função. Você pode pesquisar online.
Aqui estão três níveis:
(1) Elemento raiz (elemento do mapeador): correspondendo a um arquivo SQLMapper, existe um atributo de espaço para nome, representando uma classificação lógica de seus elementos filhos. Deve -se notar que o atributo namespace aqui é diferente do espaço de nome XML. O primeiro é uma classificação lógica do próprio Mybatis, e o último é usado para definir os elementos XML e as restrições de atributo que podem aparecer nos arquivos XML.
(2) Elementos infantis de primeiro nível (cache | cache-ref | resultmap | parametermap | sql | insert | update | delete | selecione): os elementos infantis de primeiro nível do mapeador. Como a estrutura Mybatis possui um processamento diferente de elementos filho de primeiro nível, é usado como um nível separado. Como adiciona principalmente, exclui e alterações para verificar as instruções, é chamado de elemento de declaração no nível da declaração.
(3) Outros elementos (texto de configuração SQL, inclua | TRIM | WHERE | SET | foreach | Escolha | se): texto usado para configurar scripts SQL, bem como elementos de script dinâmicos, chamados elementos de script de nível de script
2. Faça as seguintes modificações com base na geração de arquivos XSD
(1) Adicione um espaço para nome, como:
<? xml versão = "1.0" coding = "utf-8" standalone = "não"?> <xsd: esquema xmlns="http://dysd.org/schema/sqlmapper"targetNamespace="http://dysd.org/schema/sqlmapper"xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" versão = "1.0">
(2) Pacote o elemento de primeiro nível em um grupo de instrução em grupo
(3) Modifique o elemento mapeador para permitir que elementos em outros namespaces apareçam
(4) envolver elementos de script dinâmicos em um grupo de elementos dynascriptgroup e permitir que outros elementos nomeados apareçam
(5) Use o DynAscriptGroup para substituir onde os elementos dinâmicos de script aparecem, como elementos <select>
(6) Algumas outras otimizações, como definir a declaração de três valores, preparados e chamáveis que podem ser tomados pelo Declaração como tipos de enumeração:
<xsd: simpletype name = "declarationType"> <xsd: restrição base = "xsd: token"> <xsd: enumeração value = "declaration" /> <xsd: enumeração value = "preparado" /> <xsd: enumeration Valor: "Callable" /> < /xsd: restrição "> <xsd:
Os semelhantes incluem parametermode, jdbctype, javatype, etc.
O exposto acima é o resumo do arquivo de configuração SQLMAPPER usado pelo XSD para verificar o mybatis. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!