Два метода обратного проектирования Mybatis эффективно и быстро генерируют Pojo, Mapper и XML одним щелчком мыши, избавляя от необходимости повторной разработки.
Два метода обратного проектирования Mybatis эффективно и быстро генерируют Pojo, Mapper и XML одним щелчком мыши, избавляя от необходимости повторной разработки.

1. Напишите вначале

Недавно я обновил столбец «План развития Java», который в основном представляет собой запись всего процесса изучения Java. Он был обновлен до части параллельной многопоточности Java и будет продолжать обновляться в будущем; сегодня планирую открыть новую рубрику «Эффективная ферма».

EfficientFarm: эффективная ферма,Ожидается, что работы по разработке ПО можно будет механизировать, как и во многих зарубежных эффективных фермах.,автоматизация。Готовность к использованию и повышение эффективности работы – цель этой колонки!


2. Реверс-инжиниринг Mybatis

Когда мы разрабатываем традиционные проекты Maven или проекты SpringBoot, в конечном итоге мы имеем дело с чтением и хранением данных. На этом этапе неизбежно приходится писать код сопоставления объектных отношений, класс сущностей, картограф, Mapper.xml и другие коды. имеется большое количество дополнений. Если мы удалим, изменим и проверим функцию, мы продолжим повторять одни и те же операции во время разработки, что сильно снижает эффективность работы.

По этой причине это сделаноMybatis «Реверс-инжиниринг» Так называемый обратный инжиниринг заключается в том, чтобы начать со структуры таблицы базы данных и обратно сгенерировать соответствующие объекты и коды сопоставления. Сегодня мы представляем его здесь. 2 планы реализовать.


3. Вариант 1

3.1 Подготовка окружающей среды

Язык кода:javascript
копировать
1)springboot Проект (JDK1.8)
2)apache-maven-3.6.1
3)MySQL 8.0.30

3.2 Таблица базы данных

Первый шаг в реверс-инжиниринге требует структуры таблицы базы данных! Сначала мы создадим здесь таблицу, чтобы использовать ее в качестве примера. Сценарий sql выглядит следующим образом:

Язык кода:javascript
копировать
--Если существование уже сохранено, сначала удалите его
drop table user
-- Создать таблицу пользователей базы данных
create table user (
 id int NOT NULL AUTO_INCREMENT COMMENT «Первичный ключ»,
 name varchar(100) DEFAULT NULL COMMENT «Имя сотрудника»,
 phone_num varchar(20) DEFAULT NULL COMMENT «Контактные данные»,
 address varchar(200) DEFAULT NULL COMMENT 'адрес',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

3.3 Добавьте зависимости

Чтобы реализовать реверс-инжиниринг, вам необходимо сначала ввести зависимости, связанные с mybatis. Если он был введен в проект, этот шаг можно автоматически проигнорировать.

Язык кода:javascript
копировать
 <dependencies>
        <!-- mybatis-generator -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3.4 Настройка подключения к базе данных

После того, как зависимости и таблицы базы данных созданы, мы официально входим в проект Springboot для обратного проектирования. Сначала создайте файл конфигурации подключения к базе данных в каталоге ресурсов:generator.properties.

Язык кода:javascript
копировать
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/vhr?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=123456

3.5 Конфигурация правил генерации обратного проектирования

После завершения настройки базы данных мы настраиваем правило генерации, включая кодировку, путь к сгенерированному файлу, необходимость установки пользовательских комментариев и т. д. Эту конфигурацию можно найти в Интернете, и существует множество конфигурацийgeneratorConfiguration.

Язык кода:javascript
копировать
<?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>
    <!--в соответствии с Конфигурациячтение файловтаблица базы данныхинформация-->
    <properties resource="generator.properties"/>
    <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
        <!--ведущий сепаратор-->
        <property name="beginningDelimiter" value="`"/>
        <!--конечный разделитель-->
        <property name="endingDelimiter" value="`"/>
        <!--Установить кодировку-->
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- Создание методов сериализации для моделей-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- Создайте метод toString для генерации моделей Java. -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!--генерироватьmapper.xmlперезаписать исходный файл-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
        <!--可以自定义генерироватьmodelиз Комментарии к коду-->
        <commentGenerator type="org.javaboy.vhr.utils.CommentGenerator">
            <!-- Удалять ли автоматически созданные комментарии правда: да : ложь: Нет -->
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>
        <!--Конфигурация Подключение к базе данных-->
        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.connectionURL}"
                        userId="${jdbc.userId}"
                        password="${jdbc.password}">
            <!--решатьmysqlДрайвер обновлен до8.0后不генерировать指定数据库代码извопрос-->
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>
        <!--指定генерироватьmodelизпуть-->
        <javaModelGenerator targetPackage="org.javaboy.vhr.pojo" targetProject="vhr-web\src\main\java"/>
        <!--指定генерироватьmapper.xmlизпуть-->
        <sqlMapGenerator targetPackage="mybatis.mapper" targetProject="vhr-web\src\main\resources"/>
        <!--指定генерироватьmapperинтерфейсизизпуть-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.javaboy.vhr.mapper"
                             targetProject="vhr-web\src\main\java"/>
        <!--单独генерировать某个表,Напишите конкретное имя таблицы,否则генерировать全部表tableNameустановлен на%-->
        <table tableName="user" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false">
            <property name="useActualColumnNames" value="false"/>
            <property name="constructorBased" value="false"/>
            <generatedKey column="id" sqlStatement="JDBC" identity="true"/>
        </table>

    </context>
</generatorConfiguration>

3.6 Конфигурация аннотации пользовательского класса сущности

Поскольку на предыдущем шаге мы настроили генератор аннотаций, нам необходимо создать класс по соответствующему пути для настройки правил создания аннотаций. Путь: org.javaboy.vhr.utils.CommentGenerator

Язык кода:javascript
копировать
<commentGenerator type="org.javaboy.vhr.utils.CommentGenerator">
    <!-- Удалять ли автоматически созданные комментарии правда: да : ложь: Нет -->
    <property name="suppressAllComments" value="true"/>
    <property name="suppressDate" value="true"/>
    <property name="addRemarkComments" value="true"/>
</commentGenerator>

Код генератора комментариев

Язык кода:javascript
копировать
**
 * @author 86138
 * @date 2024-05-01 13:27:15
 * @description Добавить пользовательскую аннотацию
 */
public class CommentGenerator extends DefaultCommentGenerator {
    private boolean addRemarkComments = false;

    /**
     * Установить параметры конфигурации пользователя
     */
    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    /**
     * Добавляйте комментарии к полям
     */
    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
                                IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        //Определяем, добавлять ли информацию о примечаниях на основе параметров и информации о примечаниях
        if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
            addFieldJavaDoc(field, remarks);
        }
    }

    /**
     * Добавьте комментарий в поле моделииз
     */
    private void addFieldJavaDoc(Field field, String remarks) {
        //Начало комментариев к документации
        field.addJavaDocLine("/**");
        //Получить поле базы данных из информации о примечаниях
        String[] remarkLines = remarks.split(System.getProperty("line.separator"));
        for (String remarkLine : remarkLines) {
            field.addJavaDocLine(" * " + remarkLine);
        }
        addJavadocTag(field, false);
        field.addJavaDocLine(" */");
    }
}

3.7 Генератор

После выполнения вышеуказанных шагов мы напишем наш генератор реверс-инжиниринга и вызовем генератор MyBatisGenerator в org.mybatis.generator.api для его реализации. Примечание. Если сгенерированный код дублируется, перезапишите исходный код!

Код генератора

Язык кода:javascript
копировать
/**
 * @author 86138
 * @date 2024-05-01 13:35:22
 * @description обратный инжиниринггенератор
 */
public class Generator {
    public static void main(String[] args) throws Exception {
        //MBG Процесс выполнения в предупреждающем сообщении
        List<String> warnings = new ArrayList<String>();
        //Когда сгенерированный код повторяется, перезаписываем исходный код
        boolean overwrite = true;
        //Читайте нас из MBG Конфигурация文件        InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //создавать MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //Выполняем сгенерированный код
        myBatisGenerator.generate(null);
        //Вывод предупреждающей информации
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }
}

3.8 Отображение результатов

Непосредственное выполнение основного метода вышеуказанного класса Generator автоматически прочитает таблицы в базе данных и сгенерирует соответствующие классы сущностей и сопоставления, а также простое добавление, удаление, изменение и коды функций запроса.

Язык кода:javascript
копировать
09:07:48.051 [main] DEBUG org.mybatis.generator.logging.LogFactory - Logging initialized using 'org.mybatis.generator.logging.slf4j.Slf4jLoggingLogFactory@1dde4cb2' adapter.
09:07:48.054 [main] DEBUG org.mybatis.generator.internal.db.DatabaseIntrospector - Retrieving column information for table "user"
09:07:48.086 [main] DEBUG org.mybatis.generator.internal.db.DatabaseIntrospector - Found column "id", data type 4, in table "vhr..user"
09:07:48.086 [main] DEBUG org.mybatis.generator.internal.db.DatabaseIntrospector - Found column "name", data type 12, in table "vhr..user"
09:07:48.086 [main] DEBUG org.mybatis.generator.internal.db.DatabaseIntrospector - Found column "phone_num", data type 12, in table "vhr..user"
09:07:48.086 [main] DEBUG org.mybatis.generator.internal.db.DatabaseIntrospector - Found column "address", data type 12, in table "vhr..user"

【Создать файл】

4. Вариант 2

Основываясь на первом решении, мы можем быстро выполнить реверс-инжиниринг на основе таблиц в базе данных, что значительно сокращает нашу повторяющуюся работу, но! Его реализация по-прежнему относительно сложна. Содержимое конфигурацииgeneratorConfiguration богато и сложно, его трудно запомнить, и для его реализации необходимо написать определенный объем кода в исходном коде.

Второе решение, о котором мы поговорим дальше, практически не требует написания кода, и вы можете выполнить реверс-инжиниринг всего за несколько кликов. Это решение особенно удобно, если вы используете idea.

4.1 Загрузите плагин MybatisX

Загрузите плагин MybatisX в разделе управления плагинами.

4.2 Настройка источника данных

Настройте источник данных в базе данных Idea. Здесь в качестве примера используется MySQL. Вам необходимо обратить внимание на настройку часового пояса.

Нажмите «Проверить соединение». Успешный тест означает, что настройка завершена.

4.3 Настройка зависимостей maven

Язык кода:javascript
копировать
<!--lombokполагаться-->
 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <optional>true</optional>
 </dependency>
 <!--MyBatis Plusполагаться-->
 <dependency>
     <groupId>com.baomidou</groupId>
     <artifactId>mybatis-plus-boot-starter</artifactId>
     <version>3.1.0</version>
 </dependency>

4.4 Настройка правил генерации

1) Откройте только что настроенную локальную базу данных, выберите таблицу данных, которую хотите построить, и щелкните правой кнопкой мыши. -> MybatisX-Generator。

Язык кода:javascript
копировать
2) Выберите путь к пакету проекта.、Имя пакета сущности、имя таблицы;

Вставьте сюда описание изображения

Язык кода:javascript
копировать
3) После этого продолжайте генерировать пути для Configurationmapper, xml, serviceiz и требовать из функций аннотаций, hashCode/equals, аннотаций Lombk и т. д.

Вставьте сюда описание изображения

4.5 Отображение результатов

После завершения окончательной настройки предыдущего шага нажмите кнопку «Готово», чтобы просмотреть результаты. Нужные нам файлы успешно сгенерированы по соответствующему пути.

Подвести итог

Оба варианта имеют свои плюсы и минусы:

  • Решение 1 сложно реализовать, но оно может удовлетворить базовую реализацию добавления, удаления, изменения и запроса, и его можно умело освоить. generatorConfiguation Конфигурацияизредактировать,Можно добиться более мощногоиз Функция;
  • Вариант 2,Просто реализовать,Чтобы завершить полную структуру, достаточно всего нескольких кликов по странице.,А вот содержание нужно реализовать самим. Вы можете выбрать в соответствии с вашей ежедневной сценой.,Делайте разумный выбор.
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose