Deixe -me dar uma breve introdução a mybatis
Mybatis é uma excelente estrutura de camada de persistência que suporta consultas SQL simples, procedimentos armazenados e mapeamento avançado. O MYBATIS elimina as configurações manuais de quase todo o código e parâmetros JDBC e o encapsulamento de pesquisa do conjunto de resultados. O Mybatis pode usar XML simples ou anotações para configuração e mapeamento original, interfaces de mapeamento e POJOS de Java (objetos Java antigos simples) para registros no banco de dados.
Este artigo é na verdade um resumo da operação Java Oracle Type XMLTYPE Resumo 2: Usando Mybatis.
Mybatis implementa um conversor personalizado, que é muito simples. Seus principais passos são divididos em três etapas. Aqui, tomamos os tipos de XMLType operacionais como exemplo.
primeiro passo
Crie uma nova classe de conversão para implementar a interface TypeHandler. Os genéricos da interface especificam o tipo de parâmetro e, se não for especificado, é objeto:
Public Class XMLTyPetyPeHandler implementa TypeHandler <String>
Esta interface possui os 4 métodos a seguir:
public void setParameter (preparado PS, int i, parâmetro de string, jdbctype jdbctype) public string getResult (ResultSet rs, string columnName) lança sqLexception string string getResult (ResultSet Rs, int columnIndex) strings, string string stringsult (ResultSet Rs, int columnIndex)
A função do método deve ser entendida pelo nome. O SetParameter é uma operação ao passar nos parâmetros. O código que precisa ser processado antes que os parâmetros sejam transmitidos para o banco de dados, pode ser gravado neste método. Os outros três são métodos para obter o resultado da consulta. Depois de obter o resultado da consulta do JDBC, ele pode ser convertido em qualquer tipo que desejar.
Etapa 2
No Mapper-Config, registre a classe de conversor implementada, onde o tipo que JDBCType pode especificar é claramente definido na classe de enumeração mybatis org.apache.ibatis.type.jdbctype. Não pode ser um valor diferente da enumeração, caso contrário, ocorrerá um erro. Aqui, porque o enum não possui o tipo XMLType de que precisamos, ele é especificado como indefinido. (Você também não pode especificar tipos específicos. Você pode usar o TypeHandler para especificar classes específicas ao usar):
<TepeHandlers> <typeHandler javatype = "string" jdbctype = "undefined" handler = "com.tyyd.dw.context.xmltypetyndler"/> </typeandlers>
Etapa 3
Use o Type Converter em seu arquivo de mapeamento de mapeador:
inserir em t_content (<incluir refid = "fullcolumns"/>) valores (#{ControlId, jdbctype = bigint},#{xmlfile, javatype = string, jdbctype = indefinido, typeHandler = com.tyyd.dw.context.xmltypetyndler},#{drmfile, jdbctype = blob})Preste atenção aos parâmetros XMLFile de entrada, especificando Javatype, JDBCType e TypeHandler, indicando que tipo de processador queremos usar. Obviamente, você pode especificar apenas um deles, mas a existência deste item deve ser única. Se múltiplos forem exatamente iguais e a especificação não estiver clara, o mybatis causará um erro porque não pode distinguir.
Neste ponto, um conversor de tipo personalizado para Mybatis foi implementado. Deve -se notar que o processador de tipo especificado acima funciona apenas ao inserir dados. Se você deseja usar um processador de tipo personalizado durante a consulta, precisará especificá -lo nas tags dos atributos no ResultMap. Os nomes e métodos de uso das tags javatype, jdbctype e typehandler são os mesmos, então não os repetirei aqui.
Anexe o código do conversor de tipo completo. Porque quando o tipo XMLType deve ser consultado, você pode usar o XMLTYPE.getClobval () do banco de dados para retornar diretamente como string para operar, para que os métodos retornados não tenham sido processados especialmente. (Você também pode usar a função xmltype.getStringVal () para retornar a string, mas durante o uso real, verifica-se que quando o campo é nulo, GetStringVal () terá um erro de ORA-06502: Numérico ou erro de valor: o buffer de string de caracteres muito pequeno, getClobVal) não terá um erro, para que seja recomendado para usar o uso de getClob (getClobVal)) não terá um erro, é recomendado que seja recomendado para usar o uso de string (getclobval).
/*** ORACLE SYS.XMLTYPE TIPO PROCESSOR CUDDADO** Usuário: LIYD* Data: 13-12-27* Hora: 16:53*/public class XmltypeTypeHandler implementos TypeHandler <string> {@OverridePublic Void setParameter (preparado PSATEMENT, parâmetros de strings, jDbCtyPEPTEPTEMPTEMETEMCTEMCTEMCTEMCTEMCTEMCTECTECTECTECTECTECTECTECTECTECTECTECTECTECTECTECTEMCTECTEMCTECTEMCTECTECTEMCTEMCTEMCTEMCTEMCTEMCTEM) (StrideScept) Criando xmltype quando é necessário nulo se (stringUtils.isnotblank (parâmetro)) {delegatingConnection conexão = (DelegatingConnection) Ps.getConnection (). getMetadata (). getConnection (); xmltype xmltype = xmltype.crenCexml (xmltype xmltype = xmlTe.cretxml (xmltype xmltype = xmltype.crenTexmL parâmetro); ps.setObject (i, xmltype);} else {ps.SetString (i, null);}}@@SubstridePublic String getResult (ResultSet rs, string columnName) lança sqLexception {// O xmltype Field usa xmltype.clobVal rs.getString (columnName);}@SubstitionPublic String getResult (ResultSet rs, int columnIndex) lança SqLexception {return rs.getString (columnIndex);}@substituição;O acima exposto é o método de implementar o TypeHandler para Mybatis implementar o conversor de tipo personalizado pela TypeHandler. 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!