锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. Spring Boot代码生成器模板

Spring Boot代码生成器模板

0
  • JAVA
  • 发布于 2024-08-15
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

1. 前言

        Spring Boot 代码生成器是 Mybatis-plus 提供的逆向生成代码的工具, 通过编写生成器,进行数据库及相应生成路径配置,可在指定文件下生成 entity、controller、mapper 及 service 层;

        Mybatis-plus 地址:代码生成器(新) | MyBatis-Plus

2. 使用

2.1 导入依赖

        在 springboot 使用 mybatis-plus 代码生成器要在 pom.xml 文件中导入相关依赖。

<!--Mybatis-plus依赖-->  
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!--代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>

2.2 代码复制与修改

        从 mybatis-plus 官网上 copy 生成器代码,在文件中新建一个 CodeGenerator 类复制代码并修改路径为你自己的文件路径,修改包名为你自己的包名:

package com.xxx.back;
 
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
 
import java.util.Collections;
 
/**
 * Author: abc
 * Description: 代码生成器
 */
public class CodeGenerator {
    public static void main(String[] args) {
        generator();
    }
 
    private static void generator(){
        // 连接你的数据库并填写你的用户名跟密码
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/test?useUnicode=true&serverTimezone=GMT%2b8", "root", "123456")
                .globalConfig(builder -> {
                    builder.author("abc")      // 设置作者
//                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("E:\\back\\src\\main\\java\\"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.xxx.back") // 设置父包名
                            .moduleName(null) // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "E:\\back\\src\\main\\resources\\mapper\\")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.entityBuilder().enableLombok();
                    builder.controllerBuilder().enableHyphenStyle()
                            .enableRestStyle(); //转驼峰,开启控制器生成
                    builder.addInclude("course") // 设置需要生成的表名
                            .addTablePrefix("t_", "sys_"); // 设置过滤表前缀
                })
//                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
 
    }
}

2.3 模板配置

        maven 包中提供了生成模板,可通过修改模板来设置生成各层的代码,通过找到 maven 包管理工具下的 mybatis-plus-generator,找到 templates 文件夹,其中. vm 为后缀的便是各层模板,我们将其复制到 resources 的 templates 文件夹下:

 

         以 controller 层为例,写了增删改查等一系列方法,其中 Result 是封装的一个返回结果类,详情请看:

package ${package.Controller};
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
 
import $!{package.Service}.$!{table.serviceName};
import ${package.Entity}.${entity};
 
#if(${restControllerStyle})
import org.springframework.web.bind.annotation.RestController;
#else
import org.springframework.stereotype.Controller;
#end
#if(${superControllerClassPackage})
import ${superControllerClassPackage};
#end
 
/**
 * <p>
 * $!{table.comment} 前端控制器
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${restControllerStyle})
@RestController
#else
@Controller
#end
@RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
#if(${kotlin})
class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end
 
#else
#if(${superControllerClass})
public class ${table.controllerName} extends ${superControllerClass} {
#else
public class ${table.controllerName} {
#end
        @Autowired
        private ${table.serviceName} ${table.entityPath}Service;
 
        // 新增或更新
        @PostMapping("/add")
        public Result save(@RequestBody ${entity} ${table.entityPath}){
            return Result.success(${table.entityPath}Service.saveOrUpdate(${table.entityPath}));
        }
 
        // 删除接口
        @DeleteMapping("/del/{id}")
        public Result delete(@PathVariable Integer id){
            ${table.entityPath}Service.removeById(id);
            return Result.success();
        }
 
        // 查询接口
        @GetMapping("/list")
        public Result list(){
            return Result.success(${table.entityPath}Service.list());
        }
 
        // 批量删除接口
        @PostMapping("/del/batch")
        public Result delete(@RequestBody List<Integer> ids){
             ${table.entityPath}Service.removeByIds(ids);
             return Result.success();
        }
 
        // 根据ID查询
        @GetMapping("/{id}")
        public Result findOne(@PathVariable Integer id) {
            return Result.success(${table.entityPath}Service.getById(id));
        }
 
        @GetMapping("/page")
        public Result findPage(@RequestParam Integer pageNum,
        @RequestParam Integer pageSize) {
            QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>();
            queryWrapper.orderByDesc("id");
            return Result.success(${table.entityPath}Service.page(new Page<>(pageNum, pageSize),queryWrapper));
        }
 
}
 
#end

2.4 结果测试

2.4.1 设计数据库

        如下图所示,创建一个 test 的表格并新增两个字段

 2.4.2 运行 codeGenerator

        运行 CodeGenerator 主函数,可进行文件生成,看到如图所示,显示文件生成完成,则表示生成成功(注意,修改生成器代码中的数据库表名为 test):

 2.4.3 结果展示

(1) Controller 层

package com.xxx.back.controller;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxx.back.common.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
 
import com.wxw.back.service.ITestService;
import com.wxw.back.entity.Test;
 
import org.springframework.web.bind.annotation.RestController;
 
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author abc
 * @since 2023-08-03
 */
@RestController
@RequestMapping("/test")
public class TestController {
        @Autowired
        private ITestService testService;
 
        // 新增或更新
        @PostMapping("/add")
        public Result save(@RequestBody Test test){
            return Result.success(testService.saveOrUpdate(test));
        }
 
        // 删除接口
        @DeleteMapping("/del/{id}")
        public Result delete(@PathVariable Integer id){
            testService.removeById(id);
            return Result.success();
        }
 
        // 查询接口
        @GetMapping("/list")
        public Result list(){
            return Result.success(testService.list());
        }
 
        // 批量删除接口
        @PostMapping("/del/batch")
        public Result delete(@RequestBody List<Integer> ids){
             testService.removeByIds(ids);
             return Result.success();
        }
 
        // 根据ID查询
        @GetMapping("/{id}")
        public Result findOne(@PathVariable Integer id) {
            return Result.success(testService.getById(id));
        }
 
        @GetMapping("/page")
        public Result findPage(@RequestParam Integer pageNum,
        @RequestParam Integer pageSize) {
            QueryWrapper<Test> queryWrapper = new QueryWrapper<>();
            queryWrapper.orderByDesc("id");
            return Result.success(testService.page(new Page<>(pageNum, pageSize),queryWrapper));
        }
 
}

(2) Mapper 层

package com.xxx.back.mapper;
 
import com.xxx.back.entity.Test;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author abc
 * @since 2023-08-03
 */
public interface TestMapper extends BaseMapper<Test> {
 
}

(3) entity 层

package com.xxx.back.entity;
 
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
 
/**
 * <p>
 * 
 * </p>
 *
 * @author abc
 * @since 2023-08-03
 */
@Getter
@Setter
  public class Test implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
      /**
     * 主键
     */
      @TableId(value = "id", type = IdType.AUTO)
      private Integer id;
 
      /**
     * 姓名
     */
      private String name;
 
 
}

(4) Isevice 及 serviceImpl

package com.xxx.back.service;
 
import com.xxx.back.entity.Test;
import com.baomidou.mybatisplus.extension.service.IService;
 
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author abc
 * @since 2023-08-03
 */
public interface ITestService extends IService<Test> {
 
}
 
 
// serviceImpl
package com.xxx.back.service.impl;
 
import com.xxx.back.entity.Test;
import com.xxx.back.mapper.TestMapper;
import com.xxx.back.service.ITestService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
 
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author abc
 * @since 2023-08-03
 */
@Service
public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements ITestService {
 
}
标签: #软件开发 1171 #JAVA 991
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.