Ao integrar o Spring Boot com MyBatis e MySQL, utilizei o gerador de código do MyBatis para automatizar a criação de entidades e mappers. Este guia documenta o processo de implementação.
Dependências Maven Necessárias
</div>O pacote org.mybatis.generatro contém as ferramentas para geração automática de código, compatível com a versão 1.3.5 do generator e 5.1.44 do conector MySQL.
### Arquivo de Configuração generatorConfig.xml
Crie o arquivo generatorConfig.xml no diretório resources com o seguinte conteúdo:
<div>```
<?xml version="1.0" encoding="UTF-8" ?>
<generatorConfiguration>
<!-- Carregamento de propriedades -->
<properties resource="application.properties"/>
<!-- Contexto para cada banco de dados -->
<context id="MysqlContext">
<!-- Configuração de comentários -->
<commentGenerator>
<property name="suppressAllComments" value="false"/><!-- Manter comentários -->
<property name="suppressDate" value="true" /> <!-- Remover timestamps dos comentários-->
</commentGenerator>
<!-- Configuração JDBC -->
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}" userId="${spring.datasource.username}"
password="${spring.datasource.password}" />
<!-- Resolvedor de tipos Java -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/><!-- Conversão automática para tipos numéricos -->
</javaTypeResolver>
<!-- Geração de Modelos -->
<javaModelGenerator targetPackage="com.boot.model"
targetProject="src\main\java" >
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/><!-- Remover espaços em strings -->
</javaModelGenerator>
<!-- Geração de Mappers XML -->
<sqlMapGenerator targetPackage="com.boot.dao.mapper"
targetProject="src\main\java" >
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- Geração de Interfaces DAO -->
<javaClientGenerator targetPackage="com.boot.dao.mapper"
targetProject="src\main\java" type="XMLMAPPER" >
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- Configuração da tabela -->
<table schema="test" tableName="user"
domainObjectName="UserDataBase" enableCountByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
enableUpdateByExample="false">
<!-- Ignorar coluna específica -->
<!-- <ignoreColumn column="FRED" /> -->
<!-- Sobrescrever tipo de coluna -->
<!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
</table>
</context>
</generatorConfiguration>
Arquivo application.properties
server.port=8082
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false spring.datasource.username=root spring.datasource.password=******
</div>### Classe Geradora de Código
Crie uma classe Java para executar o processo de geração:
<div>```
package com.boot;
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;
public class CodeGenerator {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("src/main/resources/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator generator = new MyBatisGenerator(config, callback, warnings);
generator.generate(null);
}
}
Problemas Comuns e Soluções
1. Erro de Conexão com o Banco de Dados
For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
</div>**Solução:** Inclua o parâmetro SSL na URL de conexão:
<div>```
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
Verifique:
- Os atributos
targetPackageetargetProjectnas tagsjavaModelGenerator,sqlMapGeneratorejavaClientGenerator - O caminho do arquivo de configuração na classe geradora
Método 2: Utilizando MyBatis-Plus
Dependências Maven
</div>### Classe Geradroa com MyBatis-Plus
<div>```
package utils;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
/**
* Gerador de código para entidades de banco de dados - MySQL
*/
public class DatabaseCodeGenerator {
public static void main(String[] args) {
AutoGenerator generator = new AutoGenerator();
// Configurações globais
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setAuthor("devTeam");
globalConfig.setOutputDir("E://output");
globalConfig.setFileOverride(true);
globalConfig.setActiveRecord(true);
globalConfig.setEnableCache(false);
globalConfig.setBaseResultMap(true);
globalConfig.setBaseColumnList(true);
globalConfig.setMapperName("%sDao");
globalConfig.setXmlName("%sDao");
globalConfig.setServiceName("%sService");
generator.setGlobalConfig(globalConfig);
// Configuração da fonte de dados
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.ORACLE);
dataSourceConfig.setDriverName("com.oscar.Driver");
dataSourceConfig.setUsername("sysdba");
dataSourceConfig.setPassword("szoscar55");
dataSourceConfig.setUrl("jdbc:oscar://5.9.111.14:2003/OSRDB");
generator.setDataSource(dataSourceConfig);
// Estratégia de geração
StrategyConfig strategy = new StrategyConfig();
strategy.setEntityTableFieldAnnotationEnable(true);
String[] tableNames = {"SCHEMA_STAGE_SETTING_EXECUTE"};
strategy.setInclude(tableNames);
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setRestControllerStyle(true);
generator.setStrategy(strategy);
// Configuração de pacotes
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.tianzhi.req.dmd");
packageConfig.setEntity("entity.dto");
packageConfig.setMapper("mapper");
packageConfig.setService("service");
packageConfig.setController("controller");
packageConfig.setXml("mapper");
generator.setPackageInfo(packageConfig);
generator.execute();
}
}