一、搭建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目录下
然后修改里面的配置 :
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方法,有单元测试的注解,我们直接运行他。
可能会出错,出错了就把报错的地方修改一下再试几次。生成好了之后是这样的
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注解
4、 使用postman测试删除
5、再次查询
已经没有id为1的数据了
再看数据库
数据依然存在,只是 is deleted变为了1
这样就实现了逻辑删除。
十一、整合Swagger
整合教程在下一篇文章:
https://blog.csdn.net/m0_49499183/article/details/121823275
1、测试逻辑删除
在数据库中把id为1的is deleted改为0
在swagger中填入1
也能看到和postman同样的效果,并且比postman更简洁方便。
2、编写文档注释