Springboot mybatis generate 自动生成实体类和Mapper

Springboot mybatis generate 自动生成实体类和Mapper

一、运行

运行MyBatisGeneratorApp类即可实现自动生成实体类、mapper接口、mapper.xml
Springboot mybatis generate 自动生成实体类和Mapper_第1张图片

二、配置步骤

1、pom文件引入依赖


<dependency>
    <groupId>org.mybatis.spring.bootgroupId>
    <artifactId>mybatis-spring-boot-starterartifactId>
    <version>1.3.2version>
dependency>


<dependency>
    <groupId>org.mybatis.generatorgroupId>
    <artifactId>mybatis-generator-coreartifactId>
    <version>1.3.5version>
dependency>


<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <version>1.18.20version>
    <scope>providedscope>
dependency>


<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>5.1.47version>
dependency>

2、自定义 lombok 插件类 LombokPlugin.java

package com.example.autoentity.utils;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.internal.util.StringUtility;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**

 * @Author: haoyun
 * @Date: 2023-06-14 09:49
 * @Description: 自定义lombok类
   */

public class LombokPlugin extends PluginAdapter {
@Override
public boolean validate(List<String> list) {
    return true;
}

/**
 * 为实体添加lombok的注解
 * @param topLevelClass
 * @param introspectedTable
 * @return
 */
@Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
    //添加domain的import
    topLevelClass.addImportedType("lombok.Data");
    topLevelClass.addImportedType("lombok.Builder");
    topLevelClass.addImportedType("lombok.NoArgsConstructor");
    topLevelClass.addImportedType("lombok.AllArgsConstructor");

    //添加domain的注解
    topLevelClass.addAnnotation("@Data");
    topLevelClass.addAnnotation("@Builder");
    topLevelClass.addAnnotation("@NoArgsConstructor");
    topLevelClass.addAnnotation("@AllArgsConstructor");

    //添加domain的注释
    topLevelClass.addJavaDocLine("/**");
    topLevelClass.addJavaDocLine("* Created by Mybatis Generator on " + date2Str(new Date()));
    topLevelClass.addJavaDocLine("*/");

    return true;
}

/**
 * 为实体类字段添加注释
 * @param field
 * @param topLevelClass
 * @param introspectedColumn
 * @param introspectedTable
 * @param modelClassType
 * @return
 */
@Override
public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
    field.addJavaDocLine("/**");
    String remarks = introspectedColumn.getRemarks();
    if (StringUtility.stringHasValue(remarks)) {
        String[] remarkLines = remarks.split(System.getProperty("line.separator"));
        for (String remarkLine : remarkLines) {
            field.addJavaDocLine(" * " + remarkLine);
        }
    }
    field.addJavaDocLine(" */");
    return true;

}

/**
 * mapper.xml的注释
 * @param interfaze
 * @param topLevelClass
 * @param introspectedTable
 * @return
 */
@Override
public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
    //Mapper文件的注释
    interfaze.addJavaDocLine("/**");
    interfaze.addJavaDocLine("* Created by Mybatis Generator on " + date2Str(new Date()));
    interfaze.addJavaDocLine("*/");
    return true;
}

@Override
public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
    //不生成getter
    return false;
}

@Override
public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
    //不生成setter
    return false;
}

private String date2Str(Date date) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    return sdf.format(date);
}
}

3、添加 generatorConfig.xml 配置文件


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="default" targetRuntime="MyBatis3">

        <property name="autoDelimitKeywords" value="true" />
        
        <property name="javaFileEncoding" value="utf-8" />
        
        <property name="beginningDelimiter" value="`" />
        <property name="endingDelimiter" value="`" />

        
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

        
        <plugin type="com.example.autoentity.utils.LombokPlugin"/>
        
        <commentGenerator>
            
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true" /> 
            
            <property name="addRemarkComments" value="true"/>
        commentGenerator>

        
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://ip:port/rjwm"
                        userId="root"
                        password="password"/>

        
        <javaModelGenerator targetPackage="com.example.autoentity.entity"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        javaModelGenerator>

        
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources"/>

        
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.autoentity.employee.mapper"
                             targetProject="src/main/java"/>

        
        <table tableName="user" domainObjectName="User"/>

    context>
generatorConfiguration>

4、Generator 启动类 MyBatisGeneratorApp.java

package com.example.autoentity.utils;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MyBatisGeneratorApp {

    public static void main(String[] args) {
        try {
            List<String> warnings = new ArrayList<>();
            boolean overwrite = true;
            File configFile = new File("C:\\autoentity\\src\\main\\resources\\MyBatis-Generator\\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);

            System.out.println("Entity classes generated successfully!");
        } catch (IOException | XMLParserException | InvalidConfigurationException | SQLException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(java,mybatis,spring,boot,java)