springboot整合mybatis代码快速生成

news2024/11/23 13:20:08

特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。

springboot整合之如何选择版本及项目搭建

springboot整合之版本号统一管理 

springboot整合mybatis-plus+durid数据库连接池

springboot整合swagger

springboot整合mybatis代码快速生成

springboot整合之统一结果返回

springboot整合之统一异常处理

springboot整合之logback日志配置

springboot整合pagehelper分页

springboot整合本地缓存

springboot整合redis + redisson

springboot整合elasticsearch

springboot整合rabbitMq

springboot整合canal实现缓存一致性

springboot整合springSecurity(前后端不分离版本)

一、为什么要使用逆向代码生成

1.代码快速生成

使用mybatis代码快速生成,能够帮我们快速逆向生成实体类、mapper、service以及controller这些基础代码。特别是当我们的项目有很多表时它能够帮助我们节省很多时间,极大的提升我们的开发效率。举个例子来说,假设我们有30张表,如果手动创建所有实体类,mapper,service以及controller再加注释的话,那么就算很快一张表也得2分钟左右吧。那这样算下来就要1个小时了。但是我们使用快速代码生成只需要2分钟就可以操作好。

2.避免拼写错误

小伙伴们应该斗深有体会,那就是很多时候我们会出现代码拼写错误。比如user有时候写成了uesr。如果我们不适用快速代码,那我们就按照上面所说的30张表来算,那最低也要创建120个类或者接口。这么大的量我觉得真没办法保证一点错都不出。所以从这个角度来说我觉得引入mybatis能够帮助我们避免很多不必要的错误拼写。

好了,接下来我们就进入今天的正题,接着使用原来项目进行今天的整合---mybatis快速代码生成。

二、pom坐标导入

这里我只粘贴了本此需要导入的依赖。一共是两个jar包。一个是mybatis-plus-generator一个是velocity-engine-core。

        <!--版本依赖管理-->
        <properties>
            <mybatis-plus-gene.version>3.4.1</mybatis-plus-gene.version>
            <velocity.version>2.0</velocity.version>
        </properties>

        <!--mybatis-plus 逆向生成-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus-gene.version}</version>
        </dependency>

        <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>${velocity.version}</version>
        </dependency>        

有一点需要说明一下,因为我们使用的mybatis-plus时3.4.2版本的,但是我去查找mybatis逆向代码依赖时,没有查到对应版本。所以我就选择了一个接近的然后使用人数相对多一点的版本。经过测试没啥问题,小伙伴们可以放心使用。

 三、编写逆向代码工具类

因为代码比较少而且相对简单,所以我把所有的注释都加在类里了。这样也更方便大家理解。具体位置如下。

 逆向生成代码类代码:

package com.example.springbootdemo;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;

/**
 * @description: CodeGenerator <br>
 * @date: 2022/12/25 14:19 <br>
 * @author: William <br>
 * @version: 1.0 <br>
 */
public class CodeGenerator {

    @Test
    public void run() {

        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        //获取当前项目的路径
        String projectPath = System.getProperty("user.dir");
        //拼接代码生成以后存放的目录
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("William");
        //生成后是否打开资源管理器
        gc.setOpen(false);
        //重新生成时文件是否覆盖
        gc.setFileOverride(true);
        //去掉Service接口的首字母I
        gc.setServiceName("%sService");
        //主键策略
        gc.setIdType(IdType.AUTO);
        //定义生成的实体类中日期类型
        gc.setDateType(DateType.ONLY_DATE);
        //开启Swagger2模式
        gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);

        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.springbootdemo");
        //pc.setModuleName("user"); //模块名,多模块开发,或者微服务模块使用,也可以配置接口版本号,例如:v1
        pc.setController("controller");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);

        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        //需要逆向的表名
        strategy.setInclude("user");
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        //strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
        mpg.setStrategy(strategy);


        // 6、执行
        mpg.execute();
    }
}

使用也比较简单,我们只需要修改数据库相关配置,然后把需要逆向的表配置好,直接运行就行了。

//需要逆向的表名
strategy.setInclude("user","order","goods");

这里做一下说明,就是这里可以配置多张表,只要用逗号隔开就行了。

四、测试逆向代码生成

我们可以先把原来的entity、mapper、service、controller这四个包先删除。删除以后结构如下:

 然后运行我们的逆向代码工具类。

 

 

 可以看到成功运行后,我们的代码以及包结构都帮我们生成了。是不是很方便。这样即使我们项目表很多也只需要运行一下就会帮我们全部生成了。

五、启动测试

最后一步,老规矩,就是启动测试一下,看看我们的项目能不能正常启动,然后再写一个测试类。测试一下。测试方法就直接写在了UserController里面了。

package com.example.springbootdemo.controller;


import com.example.springbootdemo.entity.User;
import com.example.springbootdemo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author William
 * @since 2022-12-25
 */
@Api(tags = "用户相关接口")
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    @ApiOperation(value = "根据用户ID获取用户信息")
    @GetMapping("/{id}")
    public String getUser(@PathVariable("id") Integer id){
        if(id == null || id <= 0){
            return "参数错误!";
        }
        User user = userService.getById(id);
        if(user == null){
            return "当前用户不存在,参数错误";
        }
        return user.toString();
    }

}

 正常启动没有问题。那我们接下来就测试一下是不是数据库查询也能正常运行。我们访问http://localhost:8080/doc.html

进行测试。

 最终测试顺利通过,没有什么问题。OK到这里我们就算正式完成了我们的整合了。在项目开发初期我们就可以使用这种方式进行快速代码生成。

个人建议,如果逆向完成了可以删除掉这个逆向依赖的jar包以及逆向的代码。因为逆向完成以后这两个包就没用了,打包部署时会占用内存,留着没有必要。

希望对大家有所帮助,如果喜欢请关注点赞呦~谢谢啦

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

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

相关文章

String 字符串

String 基本介绍 String 应该是 Java 中最常用的一个对象&#xff0c;他不是八种基本数据类型的其中之一&#xff0c;但是随便翻了一下项目代码&#xff0c;用 String 定义的变量超过百分之八十。 public final class Stringimplements java.io.Serializable, Comparable<…

VUE3-计算属性和监听器《五》

目录 一&#xff0c;计算属性 二&#xff0c;监听器 在vue3种&#xff0c;当界面上需要处理一些数据的时候&#xff0c;可以通过计算属性和监听器处理&#xff0c;他们都是对一个属性进行操作的&#xff0c;然后返回数据。 他们的区别是&#xff0c;计算属性&#xff0c;是通…

20221226英语学习

今日短文 When we are shown two options, our eyes tend to flick from one to the other and back again several times as we deliberate on the pros and cons of each. Researchers at Johns Hopkins University in the US have found that the speed with which our ey…

Hbase是什么?

Hadoop Database简介表结构数据只能读不能改>生成新版本总结简介 永远的百度百科 HBase是一个分布式的、面向列的开源数据库&#xff0c;一个结构化数据的分布式存储系统”。 HBase不同于一般的关系数据库&#xff0c;它是一个适合于非结构化数据存储的数据库。另一个不同的…

过年首秀 - 用python写一个自动生成春联的软件并打包exe

前言 哈喽啊&#xff0c;我亲爱的铁铁们&#xff0c;I am back &#xff01;&#xff01; 别管&#xff0c;我也是阳过的人了&#xff0c;这么久都没有更新&#xff0c;今天就带来个小玩意吧 这不是过完圣诞就要过年了吗 这不得准备准备&#xff0c;春节的表演&#xff1f;…

excel数据处理技巧:组合函数统计产品批号

这是一个看似普通的编号问题&#xff0c;可竟然动用了TEXT和SUMPRODUCT两个重量级的函数共同出手才得以解决。以往遇到的编号问题&#xff0c;大多数都是COUNTIF的拿手好戏&#xff0c;但是今天这个问题COUNTIF完全插不上手&#xff0c;来看看模拟的数据吧。 如图所示&#xff…

「 理财与风险控制|养老系列」你想象中的高端养老社区是什么样?

本文主要介绍为什么养老规划需要考虑养老社区的部分&#xff0c;当前市场上养老社区的各种现状&#xff0c;养老社区从各个角度分类&#xff0c;选择养老社区需要关注的要素以及保险保单能够提供的养老权益是怎样的 文章目录01 为什么要关注养老社区&#xff1f;02 为什么关注高…

QT多窗口编程与文件IO编程

目录 一、消息对话框 QMessageBox&#xff08;掌握&#xff09; 二、常用窗口类&#xff08;掌握&#xff09; 三、主窗口类 QMainWindow&#xff08;重点&#xff09; 四、parent参数&#xff08;掌握&#xff09; 五、窗口传参 5.1 成员函数/构造函数 5.2 信号槽传参 六、事件…

劳动自由——你真的理解马克思说的劳动吗

目录 一、空谈“劳动是一切财富和一切文化的源泉”是错误的 个人理解——剥削与马斯洛需求的满足程度 二、马克思对劳动的定义是什么 三、马克思所说的劳动自由 1、实现劳动自由的实现路径 2、劳动自由的状态 一、空谈“劳动是一切财富和一切文化的源泉”是错误的 空谈所…

ES6 模块化、webpack、@ 代表src目录的设置

文章目录webpackSource Map 代表src目录的设置ES6 模块化要求默认 导出默认导入按需 导出、导入混合使用直接导入 并执行模块中的代码webpack 默认 约定&#xff1a; 自定义 打包的 入口与出口 const path require(path) // 导入node.js中 专门操作路径的模块 module.expor…

从华科到清华这些年,我和焦虑成为朋友

Datawhale干货 作者&#xff1a;赵子一&#xff0c;清华大学&#xff0c;Datawhale成员硕士求职碰壁被今年的求职形势狠狠地“教育”了一番2021年的秋天开启了我读硕士的第三个年头。当时的我还在某家公司做实习生。本来是可以转正的&#xff0c;但是出于各种考虑&#xff0c;我…

C++:STL:常用容器(上):deque容器

1&#xff1a;deque容器的基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入和删除操作。 deque 与vector区别 1&#xff1a;vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低。 2&#xff1a;deque相对而言&#xff0c;对头部的插…

产品第一性原理提升数据转化

小飞象交流会答应自己的事就尽力去做到&#xff0c;要去的地方就努力去抵达。内部交流│18期产品第一性原理提升数据转化data analysis●●●●分享人&#xff1a;永波&#xff08;阿外&#xff09;‍数据分析需要透过现象看本质&#xff0c;先从纷繁复杂的表象中进行抽丝剥茧&…

【HTML】2023跨年烟花代码

*2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ &#x1f4c2;文章目录前言效果展示一、夜景烟花绽放动画效果HTML源码2023年(新年)春节倒计时代码源码2023除夕倒计时效果展示源码宇宙星空-效果展示1.源码2.思路3.步骤(js部分)更多干货&#x1f680;前言 时光荏苒…

图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)

目录0 前言1 安装与贴图2 算法原理2.1 计算像素频率2.2 计算像素相对距离2.3 计算合适贴图3 配置功能4 使用&#xff1a;以圣诞老人为例0 前言 Tiler是一种使用各种其他较小图像平铺创建新图像的工具&#xff0c;它与其他马赛克工具不同&#xff0c;因为它可以适应多种形状、大…

微信开放平台之第三方平台开发,模板小程序如何提交?

大家好&#xff0c;我是悟空码字 12月25日&#xff0c;天气晴朗&#xff0c;阳光普照&#xff0c;今天是圣诞节。因为疫情影响&#xff0c;小羊人的增多&#xff0c;街上放眼望去&#xff0c;人烟稀少。楼下除了几个十一二岁的小男孩在玩耍&#xff0c;也没有像往日老人悠闲打…

Java --- JUC之线程中断机制

目录 一、什么是中断机制 二、三大中断方法 2.1、如何停止中断运行中的线程&#xff1f; 2.1.1、通过volatile实现线程中断停止 2.1.2、通过AtomicBoolean实现线程中断停止 2.1.3、通过interrupt()实现线程中断停止 2.2、interrupted()方法使用 一、什么是中断机制 一个…

如何定制化Spring Boot Starter,这次我终于学会了

文章目录什么是Spring Boot Starter实现步骤启动器自动配置包总结自定义Starter的实现逻辑Spring Boot Starter官网描述&#xff1a;Spring Boot Starter官方介绍 什么是Spring Boot Starter Starters可以理解为启动器&#xff0c;它包含了一系列可以集成到应用里面的依赖包&…

人工智能:通过Python实现语音合成的案例

今天给大家介绍一下基于百度的AI语音技术SDK实现语音合成的案例&#xff0c;编程语言采用Python&#xff0c;希望对大家能有所帮助&#xff01; 注册百度AI平台应用百度AI开放平台-全球领先的人工智能服务平台 首先登陆自己的百度账户&#xff0c;打开百度的AI开发平台页面 搜索…

python实战——阿里大药房自动化购买药品(selenium)

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料&#xff0c;包括: 2022最新Python视频教程、Python电子书10个G &#xff08;涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题&#xff09;、Python学习路线图等等 直接在文末名片自取即可&#x…