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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 谷粒学苑项目实战(二):讲师管理模块搭建

一、搭建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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
监控 JavaScript 安全
杨校老师课堂之基于SpringBoot + Vue 的智能停车场平台设计
杨校老师课堂之基于SpringBoot + Vue 的智能停车场平台设计
15 0
|
1月前
|
监控 Java 测试技术
高校课程知识库系统|基于Springboot+vue实现高校课程知识库在线学校平台
高校课程知识库系统|基于Springboot+vue实现高校课程知识库在线学校平台
|
1月前
|
JSON JavaScript 前端开发
在线教育_Day05-项目讲师管理模块前端开发
在线教育_Day05-项目讲师管理模块前端开发
|
7月前
|
小程序 测试技术 数据库
0022Java程序设计-ssm微信小程序社区互助平台
0022Java程序设计-ssm微信小程序社区互助平台
36 0
|
人工智能 小程序 Java
基于Springboot+Vue2前后端分离框架的智慧校园电子班牌系统源码,智慧学校源码+微信小程序+SaaS运营平台源码
技术开发环境:Java+springboot+vue+element-ui+mysql 用的是最新的技术栈,完全满足开发要求。
283 0
基于Springboot+Vue2前后端分离框架的智慧校园电子班牌系统源码,智慧学校源码+微信小程序+SaaS运营平台源码
|
JSON 数据库 数据格式
谷粒学苑项目实战(二):讲师管理模块搭建(下)
谷粒学苑项目实战(二):讲师管理模块搭建
128 0
谷粒学苑项目实战(二):讲师管理模块搭建(下)
|
SQL Java 程序员
谷粒学苑项目实战(十三):课程管理模块搭建
谷粒学苑项目实战(十三):课程管理模块搭建
148 0
谷粒学苑项目实战(十三):课程管理模块搭建
|
JSON 前端开发 easyexcel
谷粒学苑项目实战(十二):课程分类管理模块搭建
谷粒学苑项目实战(十二):课程分类管理模块搭建
156 0
谷粒学苑项目实战(十二):课程分类管理模块搭建
|
Java 数据库
谷粒学苑项目实战(一):项目介绍和环境搭建
在线教育顾名思义,是以网络为介质的教学方式,通过网络,学员与教师即使相隔万里也可以开展教学 活动;此外,借助网络课件,学员还可以随时随地进行学习,真正打破了时间和空间的限制,对于工作 繁忙,学习时间不固定的职场人而言网络远程教育是最方便不过的学习方式。
1258 0
谷粒学苑项目实战(一):项目介绍和环境搭建
|
存储 JSON 前端开发
谷粒学院——Day02【环境搭建和讲师管理接口开发】
谷粒学院——Day02【环境搭建和讲师管理接口开发】
274 0
谷粒学院——Day02【环境搭建和讲师管理接口开发】