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

举报
木字楠 发表于 2022/12/09 10:21:24 2022/12/09
【摘要】 🎈 1、导入数据库文件 🧨 2、配制文件中配制数据库信息 ✨ 3、使用代码生成器快速生成代码 🎉 3-1、引入所需依赖信息 🎊 3-2、在测试目录中测试代码生成 🎃 3-3、Swagger接

木字楠-header.gif


🎶 文章简介:木字楠后台管理系统开发(1):SSpringBoot项目代码生成以及基础接口测试

💡 创作目的:为了带大家完整的体验木字楠后台管理系统模版的开发流程

☀️ 今日天气:一场秋雨一场寒,天气越来越冷了

📝 每日一言:成熟不是人的心变老,是泪在打转还能微笑。


🎈 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直接进行访问。

在这里插入图片描述


在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。