木字楠后台管理系统开发(2):SpringBoot项目代码生成以及基础接口测试

news2024/7/6 19:08:24

在这里插入图片描述


🎶 文章简介:木字楠后台管理系统开发(2):SpringBoot项目代码生成以及基础接口测试
💡 创作目的:为了带大家完整的体验木字楠后台管理系统模版的开发流程
☀️ 今日天气:一场秋雨一场寒,天气越来越冷了
📝 每日一言:成熟不是人的心变老,是泪在打转还能微笑。


文章目录

  • 🎈 1、导入数据库文件
  • 🧨 2、配制文件中配制数据库信息
  • ✨ 3、使用代码生成器快速生成代码
    • 🎉 3-1、引入所需依赖信息
    • 🎊 3-2、在测试目录中测试代码生成
    • 🎃 3-3、Swagger接口管理引入
  • 🎄 4、接口编写测试
    • 🎋 4-1、本地接口测试
    • 🎍 4-2、Swagger接口查看
  • 🎎 5、主启动类改造

🎈 1、导入数据库文件

🧨 2、配制文件中配制数据库信息

在进行代码生成之前,我们需要先配制数据库信息,否则会出现异常信息。
大家根据自身编码习惯选择使用 yml 文件还是 properties 文件

在这里插入图片描述

spring:
  application:
    name: MuZiNan-Template-Server
  # Database Configuration
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver  # 8版本不需要修改   5版本需要修改
    url: url
    username: username
    password: password

✨ 3、使用代码生成器快速生成代码

我们这里使用到的是MyBatisPlus 的代码生成器,详情见 https://baomidou.com/pages/779a6e

🎉 3-1、引入所需依赖信息

我们需要引入MyBatisPlus的依赖和MyBatisPlusGenerator的依赖

    <!--==============  项目版本号规定 ===============-->
    <properties>
        <java.version>1.8</java.version>
        <!--==============  数据库依赖  ==================-->
        <mybatis-plus.version>3.5.2</mybatis-plus.version>	
        <!--==============  代码生成  ==================-->
        <mybatis-plus-gender.version>3.5.3</mybatis-plus-gender.version>
        <velocity.version>2.3</velocity.version>
    </properties>

        <!--================== 数据库依赖 =======================-->
        <!-- MyBatisPlus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <!--======================   代码生成    ===========================-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus-gender.version}</version>
        </dependency>
          <!-- 模板引擎 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>${velocity.version}</version>
        </dependency>

🎊 3-2、在测试目录中测试代码生成

我们是用MyBatisPlus官网中的示例代码来完成代码生成,但是我们需要对官方模板进行一定的补充。

在这里插入图片描述

    @Test
    void contextLoads() {

        FastAutoGenerator.create("url", "username", "password")
                // 全局配置
                .globalConfig((scanner, builder) -> {
                    builder.author("MuZiNan")   // 作者名称
                            .dateType(DateType.ONLY_DATE)
                            .outputDir(System.getProperty("user.dir") + "\\src\\main\\java") //项目目录
                            .enableSwagger()  //开启Swagger
                            .commentDate("yyyy-MM-dd HH:mm:ss");  //时间格式化
                })
                // 包配置
                .packageConfig((scanner, builder) -> {
                    builder.parent("com.muzinan.template")   //包列表
                            .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"));   // xml生成位置
                })
                // 策略配置
                .strategyConfig((scanner, builder) -> builder.addInclude(getTables("all")) //生成哪些表  all则生成全部
                        .controllerBuilder()
                        .enableRestStyle()
                        .enableHyphenStyle()
                        .serviceBuilder()
                        .formatServiceFileName("%sService") //service名称
                        .formatServiceImplFileName("%sServiceImpl") //service实现类名称
                        .entityBuilder()
                        .enableLombok()
                        .addTableFills(
                                new Column("gmt_create", FieldFill.INSERT),       //
                                new Column("gmt_update", FieldFill.INSERT_UPDATE)
                        ).build())
                .execute();

    }

    /**
     * 处理 all 情况
     */
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

我们官方实例模板来进行修改,填空题👻
注意点: 自处配置并未设置覆盖原有文件(为了防止再次生成代码覆盖之前的代码。
若Mapper已经存在则再次使用代码生成器则会产生报错信息,此时我们需要检查是否生成表错误,或者将原有文件删除重新进行生成。

在这里插入图片描述
在这里插入图片描述

MyBatisPlus配制文件编写, mapper文件扫描.

在这里插入图片描述


/**
 * @author: MuZiNan
 * @createDate: 2022/11/30
 * @description: MyBatisPlus配置文件
 * @version: 1.0
 */
@Configuration
@MapperScan(basePackages = "com.muzinan.template.mapper.**")
public class MyBatisPlusConfiguration {
}

application.yml文件新增

mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml
  global-config:
    db-config:
      logic-delete-field: isDeleted
      logic-delete-value: 1
      logic-not-delete-value: 0

🎃 3-3、Swagger接口管理引入

依赖信息引入,此处除了引入Swagger依赖外,还引入了Swagger 的皮肤依赖。这也导致我们Swagger的访问路径发送变化。

    <!--==============  项目版本号规定 ===============-->
    <properties>
        <!--==============  接口管理  ==================-->
        <swagger.version>3.0.0</swagger.version>
        <knife4j.version>3.0.3</knife4j.version>
    </properties>
    
    <dependencies>
        <!--==============  接口管理  ==================-->
        <!-- Swagger3依赖 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>${swagger.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>io.swagger</groupId>
                    <artifactId>swagger-models</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--Swagger皮肤-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>${knife4j.version}</version>
        </dependency>
    </dependencies>

Swagger配制类信息,我们可以自行分包,通过swagger 的包扫码进行接口的分组实现。

在这里插入图片描述
在这里插入图片描述

/**
 * @author: MuZiNan
 * @createDate: 2022/11/30
 * @description: Swagger配制信息
 * @version: 1.0
 */
@Configuration
public class SwaggerConfiguration {
    
    @Bean
    public Docket createSecurityRestApi() {
        return createRestApi("security", "com.muzinan.template.controller.security");
    }

    
    @Bean
    public Docket createSystemRestApi() {
        return createRestApi("system", "com.muzinan.template.controller.system");
    }

    /**
     * 创建api
     *
     * @param groupName   分组名称
     * @param basePackage 包路径
     * @return Docket
     */
    public Docket createRestApi(String groupName, String basePackage) {
        return new Docket(DocumentationType.OAS_30)
                .enable(true)
                .apiInfo(apiInfo())
                .groupName(groupName)
                .select()
                .apis(RequestHandlerSelectors.basePackage(basePackage))
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * api简介信息
     *
     * @return ApiInfo
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("标题:木字楠后台管理系统模板")
                .description("描述: 木字楠后台管理系统模板接口文档...")
                .contact(new Contact("木字楠", "www.nanjustar.top", "486356410@qq.com"))
                .version("v1.0")
                .build();
    }

}

🎄 4、接口编写测试

🎋 4-1、本地接口测试

手动在数据库中添加了一条登陆日志记录,方便接下来的接口测试。

在这里插入图片描述

编写测试接口

/**
 * <p>
 * 登陆日志表 前端控制器
 * </p>
 *
 * @author MuZiNan
 * @since 2022-11-30 10:18:24
 */
@RestController
@Api(tags = "登陆日志模块")
@RequestMapping("/login-log")
public class LoginLogController {

    @Autowired
    private LoginLogService loginLogService;

    @ApiOperation(value = "查询列表")
    @GetMapping("/list")
    public ResponseResult<?> listData() {
        return ResponseResult.success("查询成功", loginLogService.list());
    }

}

测试成功(此处使用的是 FastRequest 插件,为收费插件)

在这里插入图片描述

🎍 4-2、Swagger接口查看

Swagger文档查看
我们会发现在System分组下已经出现了对应的接口信息,这是由于我们在Controller中使用了
@Api() 注解 和 @ApiOperation() 注解

在这里插入图片描述

🎎 5、主启动类改造

我们启动项目之后需要去进行接口测试或者打开swagger文档,但是每次都需要我们去浏览器输入url,这样有时候会很麻烦,所以我们可以对主启动类进行一定改造。

在这里插入图片描述

    public static void main(String[] args) {
        ConfigurableEnvironment env = SpringApplication.run(MuZiNanTemplateApplication.class, args).getEnvironment();

        log.info("\n----------------------------------------------------------\n\t" +
                        "Application:'{}' is running! Access URLs:\n\t" +
                        "Local URL: \thttp://localhost:{}\n\t" +
                        "Document:\thttp://localhost:{}/doc.html\n" +
                        "----------------------------------------------------------",
                env.getProperty("spring.application.name"), env.getProperty("server.port"), env.getProperty("server.port"));
    }

这样当我们启动成功之后,就可以直接通过下方url直接进行访问。

在这里插入图片描述


在这里插入图片描述

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

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

相关文章

云原生之使用Docker部署docker-compose-ui工具

云原生之使用Docker部署docker-compose-ui工具一、Docker Compose UI介绍二、检查本地docker环境1.检查系统版本2.检查docker状态三、下载Docker Compose UI镜像四、部署Docker Compose UI服务1.新建安装目录2.创建Docker Compose UI容器3.检查Docker Compose UI容器状态4.查看…

3 - 线程池 Java内置的线程池

1、ExecutorService的介绍 ExecutorService 接口继承了Executor 接口&#xff0c;是Executor 的子接口。 Executors类 提供工厂方法用来创建不同类型的线程池。Executors是工具类&#xff0c;他提供对ThreadPoolExecutor的封装&#xff0c;会产生几种线程池供大家使用。 关于…

20 个超级实用的 CSS 技巧,帮助你成为更好的开发者

在开发项目中&#xff0c;修改输入占位符样式&#xff0c;多行文本溢出&#xff0c;隐藏滚动条&#xff0c;修改光标颜色&#xff0c;水平和垂直居中等等&#xff0c;这些都是我们非常熟悉的开发场景&#xff01;前端开发者几乎每天都会和它们打交道&#xff0c;因此&#xff0…

Visual Studio 平台下基于 C# /.NET 的 Android 开发

文章目录Part.I IntroductionChap.I 环境搭建Part.II ExamplePart.I Introduction 因为想尝试一下移动端的开发&#xff0c;所以在网上简单搜了一下移动端开发可以使用的语言&#xff0c;发现 Java, C# 等都可以。虽然用Java的居多&#xff0c;但是笔者对C#较为熟悉一些&#x…

TikTok变现冲不冲?这些TikTok选品方法赶快用上

TikTok电商商家们通常最忧愁的就是不知道如何有效进行TikTok选品。有时候因为选到难卖的产品&#xff0c;就会导致库存积压、资金紧缺等问题。今天&#xff0c;为TikTok电商商家们分享一些好用、有效的TikTok选品方法~ TikTok选品方法一——利用电商平台数据选品 除了一些偏地…

[附源码]JAVA毕业设计文物管理系统(系统+LW)

[附源码]JAVA毕业设计文物管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

速卖通官方公告:“不活跃商品”管理规则,将于12月12日生效!

最新平台动向&#xff1a;速卖通“黑色星期五”大促开始。作为海外最火的促销购物节黑五与世界杯重叠&#xff0c;速卖通上热销海外的国货有了显著的新趋势&#xff1a;越来越多具有更高科技含量的国货在海外走红。其中&#xff0c;速卖通上国产VR眼镜成为今年最火的商品&#…

Kubernetes 调度器详解

kube-scheduler是 kubernetes 系统的核心组件之一&#xff0c;主要负责整个集群资源的调度功能&#xff0c;根据特定的调度算法和策略&#xff0c;将 Pod 调度到最优的工作节点上面去&#xff0c;从而更加合理、更加充分的利用集群的资源&#xff0c;这也是我们选择使用 kubern…

构建高性能内存队列:Disruptor yyds~

Java中有哪些队列 ArrayBlockingQueue 使用ReentrantLockLinkedBlockingQueue 使用ReentrantLockConcurrentLinkedQueue 使用CAS等等 我们清楚使用锁的性能比较低&#xff0c;尽量使用无锁设计。接下来就我们来认识下Disruptor。 Disruptor简单使用 github地址&#xff1a;P…

R语言建立和可视化混合效应模型mixed effect model

全文下载链接&#xff1a;http://tecdat.cn/?p20631我们已经学习了如何处理混合效应模型。本文的重点是如何建立和_可视化_ 混合效应模型的结果&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。相关视频设置本文使用数据集&#xff0c;用于探索草食动物种群对…

Linux Capabilities

Linux Capabilities 入门教程&#xff1a;基础实战篇 为了对 root 权限进行更细粒度的控制&#xff0c;实现按需授权&#xff0c;Linux 引入了另一种机制叫capabilities。Capabilites 作为线程&#xff08;Linux 并不真正区分进程和线程&#xff09;的属性存在&#xff0c;每个…

极客时间Kafka - 06 Kafka 消费者组 Consumer Group 到底是什么?

文章目录1. 消费者组到底是什么&#xff1f;2. Consumer Group下的Consumer实例个数3. 消费者位移Offset4. 重平衡1. 消费者组到底是什么&#xff1f; 消费者组&#xff0c;即 Consumer Group&#xff0c;应该算是 Kafka 比较有亮点的设计了。那么何谓 Consumer Group 呢&…

JAVA SCRIPT设计模式--行为型--设计模式之State状态者模式(20)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

ToDesk企业版使用测试:破解企业远程办公难题,更安全更高效

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3…

Phoenix安装部署

目录官网地址Phoenix 部署连接二次连接&#xff0c;连接失败解决官网地址 link Phoenix 部署 上传并解压 tar 包 更名 复制 server 包并拷贝到各个节点的 hbase/lib 配置环境变量 sudo vim /etc/profile.d/my_env.sh#phoenix export PHOENIX_HOME/opt/module/phoenix e…

抗病毒面料之外,安奈儿价值内核彰显

伴随着防控措施的不断优化&#xff0c;消费板块重回资本视野&#xff0c;其中童装巨头安奈儿因将推出“抗病毒抗菌面料”备受关注&#xff0c;14天收获10个涨停板。 目前安奈儿凭借抗病毒面料吸引了无数资本的目光&#xff0c;但这也是一把双刃剑。虽然抗病毒面料为安奈儿带来了…

数字化棋牌室 | 会员管理预约系统 | 棋牌室小程序

棋牌室在城市与农村都是部分老年人与年轻人的经常去的娱乐场所&#xff0c;以前这些场所里总是挤满了人&#xff0c;但现在越来越多的棋牌室即使环境装修的漂亮、设备高端完善等依然面对流量难题及管理难题&#xff0c;同时由于棋牌室具有社区属性&#xff0c;因此也有不少商家…

ARM微控制器MK24FN1M0VDC12、MKV10Z128VLH7低功耗MCU资料

MK24FN1M0VDC12 IC MCU 32BIT 1MB FLASH 121XFBGA 说明&#xff1a;Kinetis K2x 32位微控制器是低功耗mcu&#xff0c;通过智能片上集成大大节省了BOM。这些mcu基于ArmCortex-M4核心&#xff0c;提供完整和可选的高速USB 2.0 on - on - go (OTG)&#xff0c;包括无晶体设备功能…

干货 | 数字经济创新创业——数据是数字经济的基础

下文整理自清华大学大数据能力提升项目能力提升模块课程“Innovation & Entrepreneurship for Digital Economy”&#xff08;数字经济创新创业课程)的精彩内容。主讲嘉宾&#xff1a;Kris Singh: CEO at SRII, Palo Alto, CaliforniaVisiting Professor of Tsinghua Unive…

RTSP 协议漫谈,揭秘 RTSP 协议内幕

RTSP&#xff08;Real Time Streaming Protocol&#xff09;实时流传输协议&#xff0c;定义在 RFC2326&#xff0c;是 TCP/IP 协议体系中的一个应用层协议&#xff0c;由哥伦比亚大学、网景和 RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通…