【SpringBoot教程】开发提效工具Lombok引入 Mybatis-plus-generator代码自动生成工具

news2025/3/12 13:24:38

专栏地址 系列教程更新中
🚀 文章介绍: 在开发过程中免不了与数据库的交互,其中模板类的编写如果手动编写会耗费大量时间,这里可引入MybatisPlus的Mybatis-plus-generator进行代码模板映射生成提高开发效率
🚀 源码获取: 项目中的资料可以通过文章底部公众号戳联系我获取

文章导航

        • 什么是lombok
        • 使用方式
        • Lombok常用注解
        • 增强版ORM框架-Mybatis plus
        • 整体依赖参考
        • Mybatis-plus-generator代码自动生成工具
        • Mybatis-plus-generator依赖引入
        • Mybatis-plus-generator使用流程

什么是lombok

  • 一个优秀的Java代码库,简化了Java的编码,为Java代码的精简提供了一种方式

  • 你是否发现每个JavaBean都会写getter,setter,equals,hashCode和toString的模板代码,特别的多于没技术

  • lombok消除Java的冗长代码,尤其是对于简单的Java对象,只要加上注解就行

使用方式

  • 顶层parent项目添加依赖进行版本管理 ( 如果是微服务项目可在顶层进行依赖统一管理,单体项目则直接依赖引入即可 )
<dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
			    <version>1.18.16</version>
         
          <scope>provided</scope>
</dependency>
  • 需要的module项目里面再引入

  • 添加IDE工具对Lombok的支持

    • 点击File-- Settings设置界面,安装Lombok插件,然后重启idea

在这里插入图片描述

  • 项目中添加(通用项目在common添加,单体项目可直接添加)
<!--common引入-->
<dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
</dependency>
<!--其他微服务引入common->
<dependency>
     <groupId>net.xiaochan</groupId>
     <artifactId>xicoahan-common</artifactId>
     <version>1.0-SNAPSHOT</version>
</dependency>


<!--如果是单体项目不是微服务项目,则直接添加即可-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>

Lombok常用注解

常见注解

  • @Getter/@Setter

    • 作用类上,生成所有成员变量的getter/setter方法
    • 作用于成员变量上,生成该成员变量的getter/setter方法
  • @ToString

    • 作用于类,覆盖默认的toString()方法
  • @EqualsAndHashCode

    • 作用于类,覆盖默认的equals和hashCode
  • @NoArgsConstructor

    • 生成无参构造器
  • @AllArgsConstructor

    • 生成全参构造器
  • @Data

    • 作用于类上,是以下注解的集合
      • @ToString
      • @EqualsAndHashCode
      • @Getter
      • @Setter
      • @RequiredArgsConstructor
  • @Log / @Slf4j

    • 作用于类上,生成日志变量, 用于记录日志, 已经在web项目中添加log依赖

    • 如果不生效,记得检查下面的配置,另外重新更新下lombok插件,重启idea

使用方法  在类上注释 @Slf4j
log.info{}

在这里插入图片描述

增强版ORM框架-Mybatis plus

  • 背景

  • 写一个数据库表的crud接口,编写实体类-》编写Controller-》编写Service-》编写DAO-》-》编写XML文件

  • 特别是管理后台,多数都是简单的CRUD,用普通的mybatis有的鸡肋

  • 介绍

  • 官网 https://baomidou.com/

  • 是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生

  • 是怎么增强的呢?已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,类似JPA但优于JPA

  • 依赖引入

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Mybatis Plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.x.x</version><!-- 使用最新版本,根据你的需求替换x为具体版本号 例如 3.4.0  -->
    </dependency>

    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- 其他依赖... -->

</dependencies>
  • 注意点
    MyBatis-Plus默认遵循数据库字段使用下划线命名、Java实体类属性使用驼峰命名的约定。在执行SQL查询时,MyBatis-Plus会自动将Java实体类属性的驼峰命名转换为对应的数据库字段的下划线命名。

整体依赖参考

  • 这里提供一个完整从maven依赖可供项目构建版本参考
<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>gpt-test</artifactId>
    <version>1.0-SNAPSHOT</version>


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

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.5.3</version>
    </parent>

    <dependencies>

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

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

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 -->
        <dependency>
            <groupId>org.apache.httpcomponents.client5</groupId>
            <artifactId>httpclient5</artifactId>
            <version>5.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--mybatis plus和springboot整合-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!--  指定该Main Class为全局的唯一入口 -->
                    <mainClass>com.yopai.App</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Mybatis-plus-generator代码自动生成工具

Mybatis-plus-generator(Mybatis-Plus 代码生成器)是 Mybatis-Plus
的一个子模块,作用是根据数据库表结构自动生成对应的实体类、Mapper接口、Mapper映射文件和Service接口等代码。它大大简化了开发者的工作量,提高了开发效率。

以下是关于 Mybatis-plus-generator 的一些介绍

  1. 自动生成代码:根据数据库表结构快速生成实体类、Mapper 接口、XML 映射文件以及 Service 接口等相关代码,减少手动编写重复性代码的工作。
  2. 自定义配置:Mybatis-plus-generator 支持自定义配置,例如包名、类名前缀/后缀、父类等。这样可以按照项目需求生成符合规范的代码。
  3. 模板引擎支持:内置 Velocity 和 Freemarker 两种模板引擎,可根据个人喜好选择使用哪种模板引擎来生成代码。4
  4. 插件扩展机制:Mybatis-plus-generator 提供了插件扩展机制,允许开发者编写自定义插件来扩展或修改生成器的功能。
  5. 简单易用:Mybatis-plus-generator 使用简单,只需在项目中添加依赖并进行简单配置即可使用。同时也提供了 Maven 插件和命令行方式来运行生成器。

Mybatis-plus-generator依赖引入

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- velocity -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
  • application.properties配置
server.port=3008
spring.datasource.driver-class-name =com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username =root
spring.datasource.password =xxxx

Mybatis-plus-generator使用流程

  • 数据库表内容示例 使用user库 下面有两个表 对应的数据格式如下 可在测试类里面进行生成
    在这里插入图片描述
    在这里插入图片描述
  • 模板生成代码示例
public class MyBatisPlusGenerator {

    public static void main(String[] args) {
        //1. 全局配置
        GlobalConfig config = new GlobalConfig();
        // 是否支持AR模式
        config.setActiveRecord(true)
                // 作者
                .setAuthor("xiaochan")
                // 生成路径,最好使用绝对路径,window路径是不一样的 这里方便自己粘贴复制 所以不直接生成在项目文件
                .setOutputDir("C:/Users/MI/Desktop/demo/src/main/java")
                // 文件覆盖
                .setFileOverride(true)
                // 主键策略
                .setIdType(IdType.AUTO)

                .setDateType(DateType.ONLY_DATE)
                // 设置生成的service接口的名字的首字母是否为I,默认Service是以I开头的
                .setServiceName("%sService")

                //实体类结尾名称
                .setEntityName("%sDO")

                //生成基本的resultMap
                .setBaseResultMap(true)

                //不使用AR模式
                .setActiveRecord(false)

                //生成基本的SQL片段
                .setBaseColumnList(true);

        //2. 数据源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        // 设置数据库类型
        dsConfig.setDbType(DbType.MYSQL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                //TODO  TODO  TODO  TODO
                .setUrl("jdbc:mysql://127.0.0.1:3306/user?useSSL=false&serverTimezone=UTC")
                .setUsername("用户名")
                .setPassword("密码");

        //3. 策略配置globalConfiguration中
        StrategyConfig stConfig = new StrategyConfig();

        //全局大写命名
        stConfig.setCapitalMode(true)
                // 数据库表映射到实体的命名策略
                .setNaming(NamingStrategy.underline_to_camel)

                //使用lombok
                .setEntityLombokModel(true)

                //使用restcontroller注解
                .setRestControllerStyle(true)

                // 生成的表, 支持多表一起生成,以数组形式填写
                .setInclude("user","address");

        //4. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent("net.xiaochan")
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("model")
                .setXml("mapper");

        //5. 整合配置
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setPackageInfo(pkConfig);

        //6. 执行操作
        ag.execute();
        System.out.println("=======Done 相关代码生成完毕  ========");
    }
}
  • 运行结果 可以看到对应生成的模板内容 有controller mapper model 跟impl 这里复制自己需要的内容进项目即可
  • 在这里插入图片描述
  • 每个文件的代码内容如下
@RestController
@RequestMapping("/addressDO")
public class AddressController {

}
@RestController
@RequestMapping("/userDO")
public class UserController {

}
public interface AddressMapper extends BaseMapper<AddressDO> {

}
public interface UserMapper extends BaseMapper<UserDO> {

}
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("address")
public class AddressDO implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户id
     */
    private Long userId;

    /**
     * 是否默认收货地址:0->否;1->是
     */
    private Integer defaultStatus;

    /**
     * 收发货人姓名
     */
    private String receiveName;

    /**
     * 收货人电话
     */
    private String phone;

    /**
     * 省/直辖市
     */
    private String province;

    /**
     * 市
     */
    private String city;

    /**
     * 区
     */
    private String region;

    /**
     * 详细地址
     */
    private String detailAddress;

    private Date createTime;


}
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("user")
public class UserDO implements Serializable {

    private static final long serialVersionUID = 1L;

      @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 昵称
     */
    private String name;

    /**
     * 密码
     */
    private String pwd;

    /**
     * 头像
     */
    private String headImg;

    /**
     * 用户签名
     */
    private String slogan;

    /**
     * 0表示女,1表示男
     */
    private Integer sex;

    /**
     * 积分
     */
    private Integer points;

    private Date createTime;

    /**
     * 邮箱
     */
    private String mail;

    /**
     * 盐,用于个人敏感信息处理
     */
    private String secret;


}
<mapper namespace="net.xdclass.mapper.UserMapper">

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="net.xdclass.model.UserDO">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="pwd" property="pwd" />
        <result column="head_img" property="headImg" />
        <result column="slogan" property="slogan" />
        <result column="sex" property="sex" />
        <result column="points" property="points" />
        <result column="create_time" property="createTime" />
        <result column="mail" property="mail" />
        <result column="secret" property="secret" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, name, pwd, head_img, slogan, sex, points, create_time, mail, secret
    </sql>

</mapper>
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="net.xdclass.model.AddressDO">
        <id column="id" property="id" />
        <result column="user_id" property="userId" />
        <result column="default_status" property="defaultStatus" />
        <result column="receive_name" property="receiveName" />
        <result column="phone" property="phone" />
        <result column="province" property="province" />
        <result column="city" property="city" />
        <result column="region" property="region" />
        <result column="detail_address" property="detailAddress" />
        <result column="create_time" property="createTime" />
    </resultMap>

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, user_id, default_status, receive_name, phone, province, city, region, detail_address, create_time
    </sql>

</mapper>

  • 到这里 代码提效工具 模板生成工具配置演示完成
  • 项目中通过使用这些工具可以减少许多耗费时间的操作

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

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

相关文章

STM32 Cubemx Freertos 工程, 用GDB进行debug时候, 跳进HardFault_Handler的问题

现象: 正常运行没问题, 但是一旦用gdb来debug, 开场很快就进hardfault 分析: 进了hardfault时候观察调用栈 竟然是从定时器中断过来的 也就是定时器中断执行这条时候 再往前推, 是初始化systick时候 也就是说, 前一行把中断打开, 这一行打开定时器时钟, 马上进了一次中断…

淘宝图片搜索接口API封装

本篇博文介绍了对淘宝图片搜索API的二次封装&#xff0c;将URL参数封装成Python函数&#xff0c;直接传入参数即可获取搜索结果&#xff0c;例如淘宝商品标题、价格、销量和URL等。提供了详细的代码示例和接口调用Demo。 taobao.item_search_img-按图搜索淘宝商品&#xff08;拍…

hive 架构及 metastore 功能简单介绍

这两天在调研用 java 怎么能通过 hive metastore 将 hive 表中的数据读出来&#xff08;不能用 hive2&#xff09;&#xff0c;最好是能直接支持 sql 查询。各种查跟尝试&#xff0c;最终确定这条路走不通。期间研究了下 hive 的内部架构&#xff0c;其实就是看了一遍官方文档。…

企业微信也能接入ChatGPT啦~你也能成功,步骤超详细~

文章目录 配置企业微信创建企业创建应用 配置项目一、OpenAI账号注册二、克隆项目代码三、复制配置文件四、企业微信配置 服务器购买运行项目安装Python安装核心依赖启动项目 个人微信绑定 上次我把ChatGPT接入了微信&#xff08;请看这篇文章当ChatGpt接入微信群之后&#xff…

【王道·操作系统】第二章 进程管理【未完】

一、进程的基本概念 1.1 进程的概念 程序&#xff1a;静态的&#xff0c;存放在磁盘里的可执行文件&#xff0c;是一系列的指令集合进程Process&#xff1a;动态的&#xff0c;是程序的一次执行过程 1.2 进程的组成 数据结构PCB(process control block)&#xff0c;即进程控…

再谈sqlserver事务

事务没提交时&#xff0c;自增字段的数据已经生成 id 3&#xff0c; 此时 脏读数据 select with&#xff08;nolock&#xff09; 你获取的id是3 如果 rollback后 我重新提交插入数据&#xff0c;id3 的数据没了&#xff0c;变成了 4 因此&#xff0c;nolock允许脏的语句…

如何在华为OD机试中获得满分?Java实现【查找重复代码】一文详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 小陈负责维护项目中的代…

电子劳动合同如何签订才能生效呢?四步就能教会你!

根据人力资源社会保障部发布的《电子劳动合同订立指引》规定&#xff1a;用人单位与劳动者订立电子劳动合同的&#xff0c;要通过电子劳动合同订立平台订立。 电子劳动合同订立平台要通过有效的现代信息技术手段提供劳动合同订立、调取、储存、应用等服务&#xff0c;具备身份…

前端正确处理“文字溢出”的思路

目录 前言 一. 组件效果预览 二. 单行溢出的处理 三. 前期准备 四. 理清思路 五. 完成 autoEllipsis 函数 六. 保留后缀的实现 七. 源码 八. 优化点 前言 最近在项目中需要做到类似于 Mac 下这种&#xff0c;当屏幕宽度足以容下当前文件名称的时候&#xff0c;文件名称…

小心!认证中的这几个坑别再踩了

【小心&#xff01;认证中的这几个坑别再踩了】 1.三天拿证不可信&#xff01; 想要今天办理、明天拿证是不可能实现的。一个认证需要经过前期的材料准备、现场审核、提交报告、颁发证书这一整套流程&#xff0c;拿FSC认证来说&#xff0c;就算所有环节都顺利完成&#xff0c;也…

网络安全入门学习路线,CSDN最全!建议收藏!

前言 网络安全行业热度越来越高&#xff0c;我也因此对这个领域充满了好奇。但是我也是一个完全的门外汉&#xff0c;从零开始学习网络安全有多难&#xff1f;下面是我的经验总结。 第一阶段&#xff1a;入门 我的第一步是寻找网络安全的入门书。推荐《黑客攻防技术宝典&…

Revit被遮挡的基础及快速构件显隐

一、Revit被遮挡的基础 在设计中&#xff0c;常常会有某些构件被上部的其他构件遮挡住的情况。在当前的多数样板中&#xff0c;这类构件会以隐藏线的模式表示出来。如下图所示&#xff0c;某设备下有四个条形设备基础。 这些基础被设备挡住的部分就以虚线的”隐藏线“样式显示在…

开发敏捷高效 | 云原生应用开发与运维新范式

5 月 18 日&#xff0c;腾讯云举办了 Techo Day 腾讯技术开放日&#xff0c;以「开箱吧&#xff01;腾讯云」为栏目&#xff0c;对外发布和升级了腾讯自研的一系列云原生产品和工具。其中&#xff0c;腾讯云开发者产品中心总经理刘毅围绕“开发敏捷高效”这一话题&#xff0c;分…

三天吃透Java面试八股文(2023最新整理)

文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Java的特点 Java是一门面向对象的编程语言。面…

属实不赖!Alibaba开源GitHub星标114K微服务架构全彩进阶手册

开篇必读&#xff1a; 在当今的数字化经济时代&#xff0c;微服务架构已经成为公司业务构建的主流架构模式&#xff0c;代表了未来的技术发展趋势&#xff0c;同时微服务也成为开发者的必备技能。 本书从微服务架构的设计理念和方法论切入&#xff0c;从不同角度全面介绍微服…

Flink第七章:状态编程

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 Flink第六章:多流操作 Flink第七章:状态编程 文章目录 系列文章目录前言一、Keyed State(按键分区)1.KeyedStateTest.scala2.PeriodicPVEx…

土壤热通量传感器的应用

土壤热通量传感器又称“土壤热通量板”、“热流计”&#xff0c;主要用于测量土壤的能量平衡和土壤层的热导率。土壤热通量传感器采用热电堆测量温度梯度&#xff0c;该热电堆有两种不同的金属材料组成。热电堆探测器接受热辐射&#xff0c;热辐射能使两个不同材料的结点之间产…

如何在华为OD机试中获得满分?Java实现【单核CPU任务调度】一文详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 现在有一个CPU和一些任务…

每天一道面试题之==和equals的区别是什么?

&#xff1d;&#xff1d;和equals的区别是什么&#xff1f; ""是一个关系运算符&#xff0c;关系运算符可以用来进行数据和数据之间的比较&#xff0c;而在java中数据类型大致可以分为两大类分别是基本数据类型和引用数据类型。 基本数据类型包含 byte&#xff0c…

谢谢所有可爱的粉丝友友们

前言&#xff1a; 其实我很早之前就申请了CSDN账号&#xff0c;其中陆陆续续也在写博客&#xff0c;但是没有坚持下来&#xff0c;大家可以看到我的前期博客&#xff0c;少之又少&#xff0c;我甚至只要看一下我的博客内容&#xff0c;我就知道我当时在哪里&#xff0c;我当时在…