Java コードがデータベースに接続して POJO とマッパーを生成します。

この記事では、IDEA でデータベースに接続し、対応する POJO、Mapper、Service、Controller を生成するコードの書き方を主に紹介します。

序文

実際の開発では、データベースを設計した後、データベースのテーブルに対応するPOJOを作成することが避けられませんが、データベースのテーブルやフィールドに合わせてPOJOを一つ一つ作成するのは面倒なだけでなく、エラーも発生しやすくなります。
データベース テーブルに対応する POJO を生成するには 2 つの方法があります。

  • IDEA : データベース プラグイン。データベースに接続した後、数据库表右键->toolsいくつかの列操作が実行されて POJO が直接生成されます。
  • コード生成: コードジェネレーター、データベースへの接続、パッケージ情報、テンプレート情報、戦略などの構成、コードを実行して POJO を生成するなど。

この記事では主に 2 番目の方法であるコード ジェネレーターについて説明します。

環境構築

以下の図に示すように、controller、mapper、model、serviceコードは最終的に生成された結果であり、プロジェクトの全体的なフレームワークは次のとおりです。
ここに画像の説明を挿入

pom.xml ファイルには依存関係が導入されています。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-learn</artifactId>
        <groupId>org.ym</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>learn-common-generate</artifactId>
    <dependencies>
        <!-- 日志相关配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
</project>

コード開発

基本構成

データベースとポリシーを構成する

package com.ym.learn.generate;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import javax.sql.DataSource;

import java.util.Arrays;

import static com.ym.learn.generate.CodeGenerateConstant.*;

/**
 * @Author: Yangmiao
 * @Date: 2023/5/29 20:18
 * @Desc:
 */
public class CodeConfig {
    
    
    /**
     * 数据库配置
     * @param databaseName
     * @return
     */
    public static DataSourceConfig getDataSource(String databaseName){
    
    
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setUrl("jdbc:mysql://localhost:3306/" + databaseName
                + "?serverTimezone=UTC&useUnicode=true&useSSL=false&characterEncoding=utf8");
        dsc.setUsername(DB_USERNAME);
        dsc.setPassword(DB_PASSWORD);
        dsc.setDriverName(DB_DRIVER_CLASS_NAME);
        return dsc;
    }

    /**
     * 策略配置
     * @param tableArrays 数据库表集合
     * @param pc
     * @return
     */
    public static StrategyConfig getStrategyConfig(String []tableArrays, PackageConfig pc){
    
    
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setInclude(tableArrays);
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        // Boolean类型字段是否移除is前缀处理
        strategy.setEntityBooleanColumnRemoveIsPrefix(true);
        strategy.setRestControllerStyle(true);

        // 自动填充字段配置
        strategy.setTableFillList(Arrays.asList(
                new TableFill("create_date", FieldFill.INSERT),
                new TableFill("change_date", FieldFill.INSERT_UPDATE),
                new TableFill("modify_date", FieldFill.UPDATE)
        ));
        return strategy;
    }
    
}

一定の情報

package com.ym.learn.generate;

/**
 * @Author: Yangmiao
 * @Date: 2023/5/29 20:02
 * @Desc: 常量信息
 */
public class CodeGenerateConstant {
    
    
    /**
     * 数据库用户名
     */
    public static final String DB_USERNAME = "root";
    /**
     * 数据库密码
     */
    public static final String DB_PASSWORD = "123456";
    /**
     * 数据库驱动名称
     */
    public static final String DB_DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver";
}

コード生成

データベースの基本情報、パッケージのパス情報、データベースのテーブル情報、ワンクリック操作、コードの更新、pojoの自動生成などを設定します。

package com.ym.learn.generate;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

/**
 * @Author: Yangmiao
 * @Date: 2023/5/29 19:59
 * @Desc: 模板代码生成器
 */
public class CodeGenerate {
    
    
    /**
     * 数据库表
     */
    private static final String[] TABLE_NAMES = new String[]{
    
    
            "media_files"
    };

    public static void main(String[] args) {
    
    
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 选择 freemarker 引擎,默认 Velocity
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setFileOverride(true);
        //生成路径
        gc.setOutputDir(System.getProperty("user.dir") + "/learn-common/learn-common-generate/src/main/java");
        gc.setAuthor("yangmiao");
        gc.setOpen(false);
        gc.setSwagger2(false);
        gc.setServiceName("%sService");
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);
        mpg.setGlobalConfig(gc);

        DataSourceConfig dataSource = CodeConfig.getDataSource("learn-spring");
        mpg.setDataSource(dataSource);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("generate");
        pc.setParent("com.ym.learn.generate");

        pc.setServiceImpl("service.impl");
        pc.setXml("mapper");
        pc.setEntity("model.po");
        mpg.setPackageInfo(pc);

        // 设置模板
        TemplateConfig tc = new TemplateConfig();
        mpg.setTemplate(tc);

        // 设置策略
        StrategyConfig strategyConfig = CodeConfig.getStrategyConfig(TABLE_NAMES, pc);
        mpg.setStrategy(strategyConfig);

        mpg.execute();
    }
}

試験結果

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/baidu_33256174/article/details/131006762
おすすめ