谷粒学苑项目实战(二):讲师管理模块搭建(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 谷粒学苑项目实战(二):讲师管理模块搭建

一、搭建service子模块



在guli_parent下创建普通maven工程 service ,这个模块里面我们要放置所有的service模块

     

导入依赖

<?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">
    <parent>
        <artifactId>guli_parent</artifactId>
        <groupId>com.atguigu</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>service</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>service_edu</module>
        <module>service_vod</module>
    </modules>
    <dependencies>
        <dependency>
            <groupId>com.atguigu</groupId>
            <artifactId>service_base</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>-->
        <!--hystrix依赖,主要是用  @HystrixCommand -->
        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>-->
        <!--服务注册-->
       <!-- <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>-->
        <!--服务调用-->
       <!-- <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
        </dependency>
        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
        <!--lombok用来简化实体类:需要安装lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--xls-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
        </dependency>
        <!--httpclient-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <!--commons-io-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>


二、搭建service-edu模块


     

在service下创建普通maven模块 service-edu


在resources下新建文件application.properties或yml

# 服务端口
server.port=8001
# 服务名
spring.application.name=service-edu
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3308/guli?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl


记得把数据库修改为自己的配置。


三、创建MP代码生成器



     

在Mybatis-Plus的官网上拷贝代码生成器(其实就是一段代码),放在test目录下

fde9209edd634f93a2fbd2340450586b.png


然后修改里面的配置 :


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.setOutputDir("D:\\Java\\parkingDemos\\guli_parent\\service\\service_edu" + "/src/main/java");
        gc.setAuthor("Shang Zelong");   //作者
        gc.setOpen(false); //生成后是否打开资源管理器
        gc.setFileOverride(false); //重新生成时文件是否覆盖
        gc.setServiceName("%sService"); //去掉Service接口的首字母I
        gc.setIdType(IdType.ID_WORKER); //主键策略
        gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
        gc.setSwagger2(true);//开启Swagger2模式
        mpg.setGlobalConfig(gc);
        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3308/guli?serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);
        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("eduservice"); //模块名
        pc.setParent("com.shang");
        pc.setController("controller");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);
        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("edu_teacher");
        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();
    }
}



六、自动生成entity、mapper、service、controller


     

代码生成器中有一个run方法,有单元测试的注解,我们直接运行他。

       

可能会出错,出错了就把报错的地方修改一下再试几次。生成好了之后是这样的


05b5ded2d7ce46ba8ac2e19ed43458d3.png


java目录下的所有文件均是自动生成。


七、编写配置类



由于mapper为接口,并且没有实现类,所以我们有必要写一个配置类来定义扫描的入口

package com.shang.eduservice.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.shang.eduservice.mapper")
public class EduConfig {
}


八、讲师列表查询功能


 

     

由于MP的代码生成器中已经帮我们做了很多,我们只需要写一下controller方法就行

       

@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {
    @Autowired
    private EduTeacherService eduTeacherService;
    //查询所有教师
    @GetMapping("/findAll")
    public List<EduTeacher> findAllTeacher(){
        return eduTeacherService.list(null);
    }
}



九、编写启动类并运行



@SpringBootApplication
public class EduApplication {
    public static void main(String[] args) {
        SpringApplication.run(EduApplication.class, args);
    }
}


启动后,访问地址:

     

http://localhost:8001/eduservice/teacher/findAll


其中注意一个小细节:

     

显示的时间如果想变成 yyyy-MM-dd HH:mm:ss 格式,需要在properties文件里配置

#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8


十、实现讲师逻辑删除功能


     

逻辑删除可以参考MP官网,上面介绍得很详细。


1、在controller中写好删除的方法

//逻辑删除讲师
    @DeleteMapping("{id}")
    public boolean removeTeacher(@PathVariable("id") String id){
        return eduTeacherService.removeById(id);
    }


2、在config中加上逻辑删除的插件


/**
     * 逻辑删除插件
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }


3、在要逻辑删除的实体类字段上加上@TableLogic注解

a438a99ac81b4ecca923ef0b1ec94157.png


4、 使用postman测试删除


50f818761d824710bb196e9c2c07ec24.png


5、再次查询


c743ce3a960e4bcbb1f51e72e0a4dae5.png

已经没有id为1的数据了

       再看数据库

1f9fa2d7daf44ea0a2fd3addd7b58d7e.pnga01a3a0b8ecc4f0baba3fc8977c3453b.png

数据依然存在,只是 is deleted变为了1

     

这样就实现了逻辑删除。      


十一、整合Swagger


       

整合教程在下一篇文章:

     

https://blog.csdn.net/m0_49499183/article/details/121823275


1、测试逻辑删除

               

在数据库中把id为1的is deleted改为0

62876978146e46d2a10e37c42f71e9f6.png

在swagger中填入1


3018bd7c3f0248b2a2939e1cb4602270.png


也能看到和postman同样的效果,并且比postman更简洁方便。


2、编写文档注释

4773d02eb76b4d49be859a1cf9ebcba3.png64d79262c2de460a906f8a2ebe9232ed.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
前端开发 NoSQL Java
谷粒学苑笔记整理
谷粒学苑笔记整理
200 0
|
3月前
|
SQL 安全 前端开发
毕设答辩问题讲解说明:基于SpringBoot+Vue的汉服文化交流社区平台设计与开发
这篇文章是关于一个基于SpringBoot+Vue的汉服文化交流社区平台的毕业设计答辩问题讲解,涵盖了系统功能、亮点创新、数据库设计、积分领取机制、数据库安全和个人密码修改功能等方面的答辩问题和回答要点。
|
5月前
|
监控 JavaScript 安全
杨校老师课堂之基于SpringBoot + Vue 的智能停车场平台设计
杨校老师课堂之基于SpringBoot + Vue 的智能停车场平台设计
35 0
|
小程序 测试技术 数据库
0022Java程序设计-ssm微信小程序社区互助平台
0022Java程序设计-ssm微信小程序社区互助平台
51 0
|
Dubbo 前端开发 Java
【尚好房项目实战】:第一章项目架构介绍
【尚好房项目实战】:第一章项目架构介绍
|
JSON 数据库 数据格式
谷粒学苑项目实战(二):讲师管理模块搭建(下)
谷粒学苑项目实战(二):讲师管理模块搭建
155 0
谷粒学苑项目实战(二):讲师管理模块搭建(下)
|
SQL Java 程序员
谷粒学苑项目实战(十三):课程管理模块搭建
谷粒学苑项目实战(十三):课程管理模块搭建
176 0
谷粒学苑项目实战(十三):课程管理模块搭建
|
存储 JSON 前端开发
谷粒学院——Day02【环境搭建和讲师管理接口开发】
谷粒学院——Day02【环境搭建和讲师管理接口开发】
330 0
谷粒学院——Day02【环境搭建和讲师管理接口开发】
|
JSON 前端开发 easyexcel
谷粒学苑项目实战(十二):课程分类管理模块搭建
谷粒学苑项目实战(十二):课程分类管理模块搭建
191 0
谷粒学苑项目实战(十二):课程分类管理模块搭建
|
编解码 JavaScript 前端开发
谷粒学院——Day04【项目前端相关基础知识二】
谷粒学院——Day04【项目前端相关基础知识二】
102 0
谷粒学院——Day04【项目前端相关基础知识二】