Tabla de contenido
- Ingeniería inversa Mybatis
-
- 1. Introducción
- 2. Descargar ingeniería inversa
- 3. Cómo utilizar
-
- Paso 1: crea un proyecto java simple
- Paso 2: Importe el paquete jar y cree el archivo de configuración del generador
- Paso 3: use clases de Java para realizar ingeniería inversa
- Paso 4: copia el código generado a otros proyectos
- Paso 5: use el código generado por ingeniería inversa en un proyecto formal (prueba)
Ingeniería inversa Mybatis
1. Introducción
-
En pocas palabras, es generar automáticamente código java a través de una sola tabla en la base de datos .
-
Mybatis ofrece oficialmente ingeniería inversa, que
puede generar automáticamente código mybatis para una sola tabla (mapper.java \ mapper.xml \ po class) -
En el desarrollo empresarial, la ingeniería inversa es una herramienta muy común.
-
La ingeniería inversa solo proporciona algunas operaciones simples de adición, eliminación, modificación y verificación. Algunos modelos complejos tienen modelos, y hay colecciones y otras operaciones en el modelo que deben configurarse por sí mismos.
2. Descargar ingeniería inversa
- La versión utilizada aquí es mybatis-generator-1.3.2
- Enlace de descarga: https://github.com/mybatis/generator/releases/tag/mybatis-generator-1.3.2 .
- Generalmente, no se proporciona ningún paquete jar para descargas en Tags, y la configuración pom.xml se proporciona en maven.
3. Cómo utilizar
- Cree un proyecto Java simple;
- Importe el paquete jar relevante y cree el archivo de configuración del generador;
- Utilice clases de Java para realizar ingeniería inversa;
- Copie el código generado al proyecto;
- Utilice el código generado por ingeniería inversa en un proyecto formal.
Paso 1: crea un proyecto java simple
Paso 2: Importe el paquete jar y cree el archivo de configuración del generador
-
Importar paquete de ingeniería inversa
-
Importe el paquete del controlador de la base de datos mysql (según la versión de jdk utilizada, jdk1.7 utiliza la versión 5)
-
Cree una carpeta lib, cópiela directamente, agregue como biblioteca
-
Okay
- Primero cree un generatorConfig.xml (archivo de configuración del generador) en src
- Luego, abra index.html en docs en el archivo descargado (vea la introducción, función y uso de la ingeniería inversa)
- Abra el inicio rápido a la izquierda (proporciona pasos de uso y archivo de configuración xml)
- Haga clic en la referencia de configuración XML en el medio, primero copie el contenido dentro del archivo de configuración en el proyecto y luego modifíquelo
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="COM.ibm.db2.jdbc.app.DB2Driver"
connectionURL="jdbc:db2:TEST"
userId="db2admin"
password="db2admin">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="test.model" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="test.xml" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="\MBGTestProject\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
- Modificar el archivo de configuración
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="mysqlTables" targetRuntime="MyBatis3">
<!--1.数据库配置(8版本以上的数据库驱动jar包记得加上cj)
本地默认数据库localhost:3306可省略为 ///,服务器(或linux)上配置记得换成 //ip:端口号/
这里是5版本的jar连接8版本的数据库,需要加上编码格式?useUnicode=true&characterEncoding=utf8
-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql:///mybatis_day01?useUnicode=true&characterEncoding=utf8"
userId="root"
password="root">
</jdbcConnection>
<!--2.java类型解析:默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
和 NUMERIC 类型解析为java.math.BigDecimal
-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--3.配置模型生成的位置
.\src 表示生成到当前目录的src下
--> <!-- enableSubPackages:是否让schema作为包的后缀 -->
<javaModelGenerator targetPackage="com.it.model" targetProject=".\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--4.mybatis的映射文件.xml生成的位置-->
<sqlMapGenerator targetPackage="com.it.mapper" targetProject=".\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--5.mybatis的mapper接口生成的位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.it.mapper" targetProject=".\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--6.配置要生成的表的模型--><!--这里的一些详细配置就不配置了,直接配置表-->
<!--domainObjectName 生成的对应类名-->
<table tableName="items"></table>
<table tableName="orderdetail" domainObjectName="OrderDetail"></table>
<table tableName="orders"></table>
<table tableName="user"></table>
</context>
</generatorConfiguration>
- La configuración de la tabla es consistente con el nombre de la tabla de la base de datos.
Paso 3: use clases de Java para realizar ingeniería inversa
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName
* @Author shuyy
* @Date 2020/10/5
**/
public class Generator {
public static void main(String[] args) throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("src/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
}
- Ejecutado y generado con éxito (Nota: la ingeniería inversa solo puede generar operaciones simples como agregar, eliminar, modificar y verificar CRUD. Hay modelos en modelos complejos y las colecciones en modelos deben configurarse por sí mismas)
Paso 4: copia el código generado a otros proyectos
- Simplemente copie al ssm anterior y utilícelo brevemente (tenga en cuenta que al copiar, copie el modelo en el primero y luego copie el mapeador; de lo contrario, se informarán muchos errores debido al problema de importación del paquete y muchos paquetes deben volver a importarse)
Paso 5: use el código generado por ingeniería inversa en un proyecto formal (prueba)
-
Si hay un error en ejecución y no se puede encontrar el paquete, puede cerrar el proyecto y volver a escribirlo y abrirlo.
-
Aquí usamos la tabla de elementos para demostrar, recuerde proporcionar toString para los elementos
-
La ingeniería inversa también proporciona un ejemplo para encapsular las condiciones de consulta
@Test
public void test2(){
//1.加载spring配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取dao的bean
ItemsMapper itemsMapper = (ItemsMapper) context.getBean("itemsMapper");
//3.调用方法
Items items = itemsMapper.selectByPrimaryKey(1);
System.out.println(items);
System.out.println("-----------------------");
//4.还可以封装查询条件(逆向工程还提供了Example用于封装查询条件)
ItemsExample example = new ItemsExample();
ItemsExample.Criteria criteria = example.createCriteria();
criteria.andNameLike("%笔记本%");
List<Items> list = itemsMapper.selectByExample(example);
for (Items items1 : list) {
System.out.println(items1);
}
}