MyBatis es un ORM semiautomático. Al usar este marco, la mayor carga de trabajo es escribir archivos de mapeo de mapeo. Dado que la escritura manual es fácil de cometer errores, podemos usar MyBatis-Generator para ayudarnos a generar archivos automáticamente.
Ingeniería inversa
1. ¿Qué es la ingeniería inversa?
MyBaits requiere que los programadores escriban declaraciones SQL ellos mismos. El funcionario de MyBatis proporciona ingeniería inversa para generar automáticamente el código requerido para la ejecución de MyBatis (mapper.java, mapper.xml, po ..)
Métodos comunes de ingeniería inversa utilizados en el desarrollo empresarial real:
El código Java se genera debido a la tabla de la base de datos.
2. Descargar Ingeniería inversa
mybatis-generator-core-1.3.2-bundle.zip
3. Cómo usarlo (puede usarlo)
3.1 Ejecutar ingeniería inversa
Varias formas de ejecutar ingeniería inversa provista en la documentación oficial
Ejecutando el generador mybatis
Generador MyBatis (MBG) se puede ejecutar de las siguientes maneras:
(1) desde el símbolo del sistema con una configuración XML
(2) Como tarea de hormiga con una configuración XML
(3) Como complemento Maven
(4) De otro programa Java con una configuración XML
(5) De otro programa Java con una configuración basada en Java
(6) También puede generar código a través del complemento de Eclipse
Se recomienda utilizar el método del programa Java (de otro programa Java con una configuración XML) y no confiar en las herramientas de desarrollo.
A continuación se muestra un proyecto que genera archivos inversos y luego copie los archivos generados automáticamente al proyecto original (esto se hace para dejar de generar directamente en el archivo de origen y sobrescribir el archivo con el mismo nombre). La captura de pantalla del paquete de jares importados y la estructura del proyecto es la siguiente:
Como se muestra
3.2 Generar archivos de configuración de código
GeneratorConfig.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype GeneratorConfigurationPublic "-// mybatis.org//dtd Configuración del generador de mybatis 1.0 // en "" http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd "> <generatorConfiguration> <context id =" testtable "targetRuntime =" mybatis3 "> <commentGenerator> <!-si elimina los comentarios de la propiedad automática verdadera: no: no: no-" myBatis3 "> <CommentGenerator> <!---si elimina los comentarios de la propiedad automática verdadera: no: no: no-n. value = "true"/> </commentGenerator> <!-Información de la conexión de la base de datos: clase de controlador, dirección de conexión, nombre de usuario, contraseña-> <jdbcconnection conductClass = "com.mysql.jdbc.driver" ConnectionUrl = "jdbc: mysql: // localhost: 3306/mybatis" userId = "root" contraseña = "1234"> </jdbcconnection> <!- <jdbcconnection driverClass = "oracle.jdbc.oracledriver" ConnectionUrl = "jdbc: oracle: delgue: delgada:@127.0.0.1: 1521: yycg" userid = "yycg" contraseña = "yycg"> <<</jdbconnection> -> <!-Predeterminado falso, analice los tipos decimales y numéricos JDBC a Integer, y cuando sea verdadero, analice los tipos JDBC decimal y numéricos a java.math.bigdecimal-> <javatyPeresolver> <propers name = "forceBigDECIMALS" valor = "falso" /> < /javatyperesolver> <!-el lugar de los puntos de la propiedad: la ubicación: la ubicación: el lugar de los pófases " Generado-> <javaModelGenerator TargetPackage = "cn.edu.hpu.ssm.po" targetProject = "./ src"> <!-habilsubpackages: si dejar que el esquema sea el sufijo del paquete-> <propiedad name = "habilitueSubpackages" valor = "falso" /> <!-Value devuelto desde la base de datos está limpia--name de Timtrings ". valor = "true"/> </javamodelGenerator> <!-TargetProject: la ubicación donde se genera el archivo del mapa mapper-> <sqlmapGenerator TargetPackage = "cn.edu.hpu.ssm.mapper" TargetProject = "./ SRC"> <!--OdableCackages: si debe usar Schema como el sufix del paquete-- name = "habilsubpackages" value = "false"/> </sqlmapGenerator> <!-TargetPackage: Ubicación de la generación de interfaz de mapper-> <javaclientGenerator type = "xmlmapper" targetPackage = "cn.edu.hpu.ssssm.mapper" targetPrOject = "./ src"> <!-eneableubeSubeRubeSube: enhemAps. Sufijo del paquete-> <propiedad name = "enableAbleSubpackages" value = "false"/> </javaclientGenerator> <!-Specify Database Table-> <table tableName = "items"> </table> <table tableName = "orders"> </table> <table tableNameMeame = "OrderDetail"> </table> <table de tabla = "usuario" </table> TableName = "sys_user"> </table> <table schema = "" tableName = "sys_role"> </table> <table schema = "" tableName = "sys_permission"> </table> <table schema = "" tableName = "sys_user_role"> </table> <schema = "" TableName = "sys_re_rolesissions" -> <!-Algunos campos de tabla requieren el tipo de java <table schema = "" tableName = ""> <columnOverride column = "" javatype = ""/> </table>-> </textis> </generadorconfiguration>
3.3 Ejecutar el programa del generador
GeneratorsqlMap.java:
import java.io.file; import java.util.arrayList; import java.util.list; importar org.mybatis.generator.api.mybatisGenerator; import org.mybatis.generator.config.configuration; import og.mybatis.generator.config.xml.configuration; importación; importación; importación; importación; importación; importación; org.mybatis.generator.internal.defaultshellCallback; public class GeneratorsQLMAP {public void generador () lanza excepción {list <string> advertencias = new ArrayList <string> (); boolean Overwrite = true; // Carga de configuración de configuración ConfigFile = new File ("GeneratorConfig.xml"); ConfigurationParser cp = new ConfigurationParser (advertencias); configuración config = cp.parseconfiguration (configFile); defaultshellCallback callback = new DefaultShellCallback (Overwrite); myBatisGenerator myBatisGenerator = new MyBatisGenerator (config, Callback, Warnings); myBatisGenerator.Generator.generator (neco (ntht statatenerator; Main (String [] args) lanza la excepción {try {GeneratorSQLMAP GeneratorsqlMap = new GeneratorSQLMap (); GeneratorSQLMap.Generator ();} Catch (Exception e) {E.PrintStackTrace ();}}}Código generado:
3.4 usando el código generado
Debe copiar el código generado en el proyecto generado a su propio proyecto. Copiemos el elemento mapper.java y los elementosmapper.xml, los elementos y las clases de itemsexample en nuestro proyecto original.
Métodos de prueba en itemsmapper
paquete cn.edu.hpu.ssm.test; import static org.junit.assert.fail; import java.util.date; import java.util.list; importar org.junit.before; import org.junit.test; import og.springframework.context.paplicationContext; import org. ApplicationContext; Private ElementsMapper itemsMapper; // anotación antes de llamar a este método antes de ejecutar todos los métodos de prueba de esta clase @bebereforepublic void setup () lanza la excepción {ApplicationContext = new ClasspathxmLapPlicationContext ("classpath: spring/applicationContext.xml"); itemsMapper = (itemsMapper) ApplicationContext.getBean ("itemsMapper");} // Eliminar @TestPublic Public Void testDeleteByPePyKey () {fail ("aún no implementado");} // inserto @testpual void void ({{) Elementos (); items.setName ("iPhone-5s"); items.setPrice (3999f); items.setDetail ("auténtico"); items.setpic ("sdasd.jpg"); items.setCreateTime (nueva fecha ()); itemsMapper.insert (elementos);} // personalizando las condiciones a consulta a consulta Vóica pública VarioidbyeMaMe () () {Itemsexample itemsexample = new itemsexample (); // Construye las condiciones de consulta a través de criterios itemsexample.critriteria criterios = itemsexample.createCriteria (); criteria.AndNameequalto ("tv"); // puede devolver múltiples registros list <items> list = itemMapper.selectbybyextamp (itemsexample); for (int i = 0; i <list.size (); i ++) {elementos it = list.get (i); System.out.println (it.getId ()+":"+it.getName ());}} // consulta basada en la clave principal @TestPublic void testSelectByPrimaryKey () {elementos = itemsMappers.SelectByPrimaryKey (1); System.out.Println (items.getName ());} // Actualizar datos de actualización topDateByPrimaryKey () {// Actualizar todos los campos, debe consultar primero y luego actualizar elementos = itemsMapper.SelectByPrimaryKey (1); items.setName ("iPhone"); itemsMapper.UpdateByPrimaryKey (elementos); // Si el campo entrante no está vacío, use este método en actualizaciones por lotes. No hay necesidad de consultar primero y luego actualizar //itemsmapper.updateByPrimaryKeySelective(Record);}}Lo anterior es el código automático de ingeniería inversa de MyBatis generado por el marco mybatis introducido por el editor. ¡Espero que sea útil para todos!
Lecturas recomendadas de Wulin.com:
Tutorial de aprendizaje de MyBatis Introducción (I) - MyBatis Quick Start
Análisis en profundidad de MyBatis Oracle Blob Type Fields ahorrando y lectura
Mybatis practica dao y mapper
SQL dinámico y consulta asociada en la práctica de MyBatis