Déjame darte una breve introducción a MyBatis
MyBatis es un excelente marco de capa de persistencia que admite consultas SQL simples, procedimientos almacenados y mapeo avanzado. MyBatis elimina la configuración manual de casi todos los códigos y parámetros JDBC y la encapsulación de búsqueda del conjunto de resultados. MyBatis puede usar XML o anotaciones simples para la configuración y mapeo original, mapeo de interfaces y Pojos de Java (objetos Java Old Old) en los registros en la base de datos.
Este artículo es en realidad un resumen de la operación Java Oracle tipo XMLType Resumen 2: Uso de MyBatis.
MyBatis implementa un convertidor personalizado, que es muy simple. Sus pasos principales se dividen en tres pasos. Aquí tomamos los tipos operativos de XMLType como ejemplo.
primer paso
Cree una nueva clase de conversión para implementar la interfaz TipoHandler. Los genéricos de la interfaz especifican el tipo de parámetro, y si no se especifica, es objeto:
clase pública xmltypeTypeHandler implementa typeHandler <String>
Esta interfaz tiene los siguientes 4 métodos:
public void setParameter (PreparadoStatement PS, int i, parámetro de cadena, JDBCType JDBCType) Cadena pública getResult (resultSet rs, string columnName) lanza SQLExceptionPublic String getResult (ResultSet rs, int columnIndex) lanza sqLExExCeSpublicPublicPublicPeSult (callAblEptatement cs, int columnIndEx) shows sqLExTex) lanza SQLECTUCTIVE String String getResult (CallableStatement CS, int columninDex)
La función del método debe entenderse por el nombre. SetParameter es una operación al pasar parámetros. El código que debe procesarse antes de que los parámetros pasen a la base de datos se puede escribir en este método. Los otros tres son métodos para obtener el resultado de la consulta. Después de obtener el resultado de la consulta de JDBC, se puede convertir en cualquier tipo que desee.
Paso 2
En Mapper-Config, registre la clase de convertidor que implementó, donde el tipo que JDBCType puede especificar está claramente definido en la clase de enumeración de MyBatis org.apache.ibatis.type.jdbctype. No puede ser un valor que no sea el enum, de lo contrario ocurrirá un error. Aquí, debido a que el enum no tiene el tipo xmltype que necesitamos, se especifica como indefinido. (Tampoco puede especificar tipos específicos. Puede usar TypeHandler para especificar clases específicas cuando se usa):
<PypeHandlers> <typeHandler javatype = "String" jdbctype = "Undefined" handler = "com.tyyd.dw.context.xmltypetypeHandler"/> </typeHandlers>
Paso 3
Use el convertidor de tipo en su archivo de asignación mapper:
Insertar en valores de t_content (<include refid = "fullColumns"/>) (#{ControlID, jdbctype = bigint},#{xmlfile, javatype = string, jdbctype = undefined, typeHandler = com.tyyd.dw.context.xmltypeTypeHandler},#{drmfile, jdbctype = blob})Preste atención a los parámetros entrantes de XMLFile, especificando Javatype, JDBCType y TypeHandler, indicando qué tipo de procesador queremos usar. Por supuesto, solo puede especificar uno de ellos, pero la existencia de este elemento debe ser única. Si los múltiples son exactamente iguales y la especificación no está clara, MyBatis causará un error porque no puede distinguir.
En este punto, se ha implementado un convertidor de tipo personalizado para MyBatis. Cabe señalar que el procesador tipo especificado anteriormente solo funciona al insertar datos. Si desea utilizar un procesador de tipo personalizado durante la consulta, debe especificarlo en las etiquetas de los atributos en el resultado de resultados. Los nombres y los métodos de uso de las etiquetas Javatype, JDBCType y TypeHandler son los mismos, por lo que no los repetiré aquí.
Adjunte el código de convertidor de tipo completo. Porque cuando se debe consultar el tipo xmltype, puede usar el xmltype.getClobval () de la base de datos para que regrese directamente como una cadena para operar, por lo que los métodos devueltos no se han procesado especialmente. (También puede usar la función xmltype.getStringVal () para devolver la cadena, pero durante el uso real, se encuentra que cuando el campo es nulo, getStringVal () tendrá un error de ORA-06502: error numérico o de valor: buffer de cadena de caracteres
/*** Oracle sys.xmltype Tipo de procesador personalizado** usuario: liyd* fecha: 13-12-27* hora: 4:53 pm*/public class xmltypeTypeHandler implementa typeHandler <string> {@OverridePublic Public Void SetParameter (Preparado PS, int I, String Parameter, JDBCType JDBCType) shatescention Creación de xmltype cuando se necesita nulo if (stringUtils.isnotblank (parameter)) {delegatingconnection conection = (delegatingconnection) ps.getConnection (). getMetadata (). getConnection (); xmltype xmltype = xmltype.creatExml (conexión.getDelegate (), parameter), parámetro) (párrico), pArSETETER, PARETETER, PAREJETETER, PARETETER, PAREJETETER, PAREJETETER, PAREJETETER, PAREJETETER, PAREJETETER, PAREJETETER, PAREJETETER, PARAMETER (PAREMETER); xmltype);} else {ps.setString (i, null);}}@overRidePublic string getResult (resultSet rs, string columnName) lanza sqlexception {// el campo xmltype usa xmltype.getClObval () para que se devuelva el retorno de retorno de la base de datos sql rs.getString (columna de columna (columna de columna);} getResult (resultSet RS, int columnIndex) lanza sqlexception {return rs.getString (columnIndex);}@overridePublic string getResult (CallableStatement CS, int columnIndex) lanza SQLException {return cs.getString (columnIndex);}}Lo anterior es el método para implementar el typeHandler para mybatis para implementar el convertidor de tipo personalizado por typeHandler. 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!