Java-代码连接数据库生成POJO、Mapper

news2024/10/6 5:53:01

本文主要介绍如何在IDEA中,编写代码连接数据库生成对应的POJO、Mapper、Service、Controller

文章目录

  • 前言
  • 环境搭建
  • 代码开发
    • 基本配置
    • 常量信息
    • 代码生成
  • 测试结果

前言

在实际开发中,设计完数据库后,不可避免需要创建数据库表对应的POJO,一个个照着数据库表和字段创建POJO,不仅麻烦,还容易出错!
生成数据库表对应的POJO,有两种方式:

  • IDEA:Database插件,连接数据库后,数据库表右键->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();
    }
}

测试结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rt-thread汇总

finish和msh的区别&#xff1f; 这个问题我一直没搞懂&#xff0c;可能得看一下源码才能搞清楚了吧 通过Qemu运行RT-Thread 在windows上通过QEMU快速上手RT-thread smart RT-thread启动流程 rt-thread启动流程 Kconfig语法 Kconfig语法 LOG输出 rt_kprintf("Hello …

InsCode AI ,你的良师益友!

Chat-GTP的火爆程度相信大家已经听说了&#xff0c;也对它有一个基本的初识&#xff0c;它是Open AI所研发的&#xff0c;读者当中应该有不少人已经接触和体验人工智能聊天&#xff0c;以及使用它交流很多问题有关于生活&#xff0c;学习等&#xff0c;而 InsCode AI 也一样能够…

javaWeb ssh学堂在线管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh学堂在线管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

30天从入门到精通TensorFlow1.x 第三天,tf.variable_scope()共享或重用变量

tf.variable_scope()共享或重用变量 文章目录 一、接前一天二、tf.variable_scope()共享或重用变量1. 背景2. 目的3. tf.variable_scope()基本参数3. tf.variable_scope()作用&#xff08;1&#xff09;.命名空间&#xff08;2&#xff09;.共享变量&#xff08;3&#xff09;.…

软考A计划-电子商务设计师-电子商务相关技术与应用基础知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

cesium 相机相关

1 相机的初始位置 /*** The default rectangle the camera will view on creation.* type Rectangle*/ Camera.DEFAULT_VIEW_RECTANGLE Rectangle.fromDegrees(-95.0,-20.0,-70.0,90.0 );// set default view rectangleCameraPosition3D(this,Camera.DEFAULT_VIEW_RECTANGLE,…

Async 使用详解

Spring Boot异步调用Async 在实际开发中&#xff0c;有时候为了及时处理请求和进行响应&#xff0c;我们可能会多任务同时执行&#xff0c;或者先处理主任务&#xff0c;也就是异步调用&#xff0c;异步调用的实现有很多&#xff0c;例如多线程、定时任务、消息队列等&#xf…

若依框架快速搭建(二)

目录 数据库设计功能模块设计XXX信息管理xxx查询xxx添加xxx删除xxx修改xxx导出 功能模块实现运行数据库自动代码生成在IDEA中找到RuoYi-generator&#xff0c;修改配置运行前后端项目&#xff0c;在网页中找到代码生成模块导入表后点击确定&#xff0c;序号前打勾&#xff0c;再…

Mac - 光标特效 By CursorEffect2

目录 一.引言 二.安装 CursorEffect2 三.使用 CursorEffect2 四.使用效果 五.内存消耗 六.一键关闭 七.总结 一.引言 在自己搭建的 Hexo 博客上可以定义鼠标点击的特效&#xff0c;如图点击后可以产生彩色的斑点。 于是想着除了浏览 Hexo 博客外&#xff0c;能不能别的也…

【笔试强训编程题】Day1.(组队竞赛100449)和(删除公共字符69390)

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训编程题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;! 文章目录…

【CSS3系列】第一章 · CSS3新增的三种基本属性

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

FineBI6.0基础学习第一课 数据门户

PC端门户使用示例 首先,以管理员身份登录FineBI系统,安装数据门户,安装步骤见官网 新建一个数据门户

SouapUI接口测试之创建性能测试

SouapUI也是一个能生动的体现一个系统&#xff08;项目&#xff09;性能状态的工具&#xff0c;本篇就来说说如何在SouapUI工具下创建性能测试 一、创建测试用例 由于在《SouapUI接口测试之使用Excel进行参数化》篇已经创建好了测试用例&#xff0c;本篇就不讲解如何创建测试…

SpringCloudAlibaba:服务网关之Gateway学习

目录 一、网关简介 &#xff08;一&#xff09;为什么要用网关 &#xff08;二&#xff09;网关解决了什么问题 &#xff08;三&#xff09;常用的网关 二、Gateway简介 &#xff08;一&#xff09;核心概念 &#xff08;二&#xff09;工作原理 三、Gateway快速入门 &…

linuxOPS基础_用户与组管理

linux用户与组概念 为什么需要了解用户和组 服务器要添加多账户的作用 ​ 针对不同用户分配不同的权限&#xff0c;不同权限可以限制用户可以访问到的系统资源 ​ 提高系统的安全性 ​ 帮助系统管理员对使用系统的用户进行跟踪 用户和组的关系 理论上Linux系统中的每个用户…

2023年6月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

日本原装Yokogawa AQ6317B横河AQ6317C光谱分析仪

Yokogawa AQ6317B光谱分析仪&#xff0c;50 GHz ​Yokogawa AQ6317B 光谱分析仪 (OSA) 是一款先进的光谱分析仪&#xff0c;应用范围广泛&#xff0c;包括光源评估、光学设备损耗波长特性的测量以及 WDM&#xff08;波分复用&#xff09;系统的波形分析。在 Yokogawa 购买产品…

第十七篇、基于Arduino uno,获取cp2d12红外测距传感器的原始值和距离值——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是原始的模拟电压值&#xff0c;第二个值是距离值&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;虽然红外测距传感器形态各异&#xff0c;但是原理和代码都是…

java中实现对象属性复制的工具类

在 Java 中&#xff0c;有多个工具类可用于实现对象属性的复制&#xff0c;使得属性值从一个对象复制到另一个对象。以下是几个常用的工具类&#xff1a; Apache Commons BeanUtils&#xff1a; Apache Commons BeanUtils 提供了 BeanUtils 类&#xff0c;可以方便地进行属性…

一文简介Linux固件子系统的实现机制

一、Linux固件子系统概述 固件是硬件设备自身执行的一段程序。固件一般存放在设备flash内。而出于成本和便利性的考虑&#xff0c;通常是先将硬件设备的运行程序打包为一个特定格式的固件文件&#xff0c;存储到终端系统内&#xff0c;通过终端系统给硬件设备进行升级。Linux内…