数据库脚本
创建数据库和表:
CREATE DATABASE guli;
use guli;
CREATE TABLE `edu_teacher` (
`id` char(19) NOT NULL COMMENT '讲师ID',
`name` varchar(20) NOT NULL COMMENT '讲师姓名',
`intro` varchar(500) NOT NULL DEFAULT '' COMMENT '讲师简介',
`career` varchar(500) DEFAULT NULL COMMENT '讲师资历,一句话说明讲师',
`level` int(10) unsigned NOT NULL COMMENT '头衔 1高级讲师 2首席讲师',
`avatar` varchar(255) DEFAULT NULL COMMENT '讲师头像',
`sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
`is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='讲师';
往表中填充数据:
INSERT INTO `edu_teacher` VALUES ('1','张三','近年主持国家自然科学基金(6项)、江苏省重大科技成果转化项目(5项)、江苏省产学研前瞻性联合研究项目(3项)、省工业科技支撑、省高技术、省自然科学基金等省部级及其企业的主要科研项目40多个,多个项目在企业成功转化,产生了较好的经济、社会和环境效益。积极开展产学研科技合作,并与省内16家企业建立了江苏省研究生工作站,其中6家为江苏省优秀研究生工作站','高级',1,'https://guli-file-190513.oss-cn-beijing.aliyuncs.com/avatar/default.jpg',0,0,'2019-10-30 14:18:46','2019-11-12 13:36:36'),('1189389726308478977','晴天','高级讲师简介','高级讲师资历',2,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/10/30/de47ee9b-7fec-43c5-8173-13c5f7f689b2.png',1,0,'2019-10-30 11:53:03','2019-10-30 11:53:03'),('1189390295668469762','李刚','高级讲师简介','高级讲师',2,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/10/30/b8aa36a2-db50-4eca-a6e3-cc6e608355e0.png',2,0,'2019-10-30 11:55:19','2019-11-12 13:37:52'),('1189426437876985857','王二','高级讲师简介','高级讲师',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/11/08/e44a2e92-2421-4ea3-bb49-46f2ec96ef88.png',0,0,'2019-10-30 14:18:56','2019-11-12 13:37:35'),('1189426464967995393','王五','高级讲师简介','高级讲师',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/10/30/65423f14-49a9-4092-baf5-6d0ef9686a85.png',0,0,'2019-10-30 14:19:02','2019-11-12 13:37:18'),('1192249914833055746','李四','高级讲师简介','高级讲师',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/11/07/91871e25-fd83-4af6-845f-ea8d471d825d.png',0,0,'2019-11-07 09:18:25','2019-11-12 13:37:01'),('1192327476087115778','1222-12-12','1111','11',1,'https://online-teach-file.oss-cn-beijing.aliyuncs.com/teacher/2019/11/08/5805c6cd-c8ad-4a77-aafd-d2e083bfd8a4.png',0,1,'2019-11-07 14:26:37','2019-11-11 16:26:26'),('1195337453429129218','test','sdfsdf','sdfdf',1,'https://guli-file-190513.oss-cn-beijing.aliyuncs.com/avatar/default.jpg',0,1,'2019-11-15 21:47:12','2019-11-15 21:47:27');
模块搭建
创建父工程
在pom.xml中将SpringBoot版本号改为2.2.1
将pom类型加上
父工程中的pom文件用来放依赖的版本,子模块中的pom用来放具体的依赖
把父工程中pom里的依赖 和 jdk版本(以下内容)删除掉
<!--删除properties和dependencies-->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
将老师的版本配置(以下内容)拷贝上去
<properties>
<java.version>1.8</java.version>
<guli.version>0.0.1-SNAPSHOT</guli.version>
<mybatis-plus.version>3.0.5</mybatis-plus.version>
<velocity.version>2.0</velocity.version>
<swagger.version>2.7.0</swagger.version>
<aliyun.oss.version>2.8.3</aliyun.oss.version>
<jodatime.version>2.10.1</jodatime.version>
<poi.version>3.17</poi.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<commons-io.version>2.6</commons-io.version>
<httpclient.version>4.5.1</httpclient.version>
<jwt.version>0.7.0</jwt.version>
<aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version>
<aliyun-sdk-oss.version>3.1.0</aliyun-sdk-oss.version>
<aliyun-java-sdk-vod.version>2.15.2</aliyun-java-sdk-vod.version>
<aliyun-java-vod-upload.version>1.4.11</aliyun-java-vod-upload.version>
<aliyun-sdk-vod-upload.version>1.4.11</aliyun-sdk-vod-upload.version>
<fastjson.version>1.2.28</fastjson.version>
<gson.version>2.8.2</gson.version>
<json.version>20170516</json.version>
<commons-dbutils.version>1.7</commons-dbutils.version>
<canal.client.version>1.1.0</canal.client.version>
<docker.image.prefix>zx</docker.image.prefix>
<cloud-alibaba.version>0.2.2.RELEASE</cloud-alibaba.version>
</properties>
将以下依赖复制到pom中
<dependencyManagement>
<dependencies>
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--mybatis-plus 持久层-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--aliyunOSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.oss.version}</version>
</dependency>
<!--日期时间工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${jodatime.version}</version>
</dependency>
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<!--xlsx-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<!--commons-io-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<!--httpclient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<!--aliyun-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun-java-sdk-core.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-sdk-oss.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>${aliyun-java-sdk-vod.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-vod-upload</artifactId>
<version>${aliyun-java-vod-upload.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-vod-upload</artifactId>
<version>${aliyun-sdk-vod-upload.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>${json.version}</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>${commons-dbutils.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
<version>${canal.client.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
删除src文件夹
创建子模块
创建maven子模块,取名service
将service类型改为pom
<artifactId>service</artifactId>
<!--新加内容-->
<packaging>pom</packaging>
添加依赖,同时把用不到的依赖暂时注释掉
<dependencies>
<!--<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>
删除src文件夹
创建子子模块
在service下创建maven子模块service_edu
环境搭建
我们将代码写在service_edu模块中
创建配置文件
写入
#服务端口
server.port=8001
#服务名
spring.application.name=service-edu
#环境设置
spring.profiles.active=dev
#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
#mysql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
使用mp代码生成器构建项目
创建src\test\java\com\jiabei\demo\CodeGenerator.class
把代码生成器复制进去
public class CodeGenerator {
@Test
public void run() {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("D:\\program\\idea-program\\guli_parent\\service\\service_edu" + "/src/main/java");
gc.setAuthor("jiabei");
gc.setOpen(false); //生成后是否打开文件
gc.setFileOverride(false); //重新生成时文件是否覆盖
gc.setServiceName("%sService"); //默认生成IService,加上后生成Service
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:3306/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.jiabei");
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();
}
}
改动之处:
gc.setOutputDir():输出目录
pc.setModuleName():模块名
strategy.setInclude():根据数据库中的哪张表生成实体类
执行结果
被代码生成器创建出来的框架:
创建controller
@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {
@Autowired
private EduTeacherService teacherService;
//查询所有讲师
@GetMapping("queryAllTeacher")
public List<EduTeacher> queryAllTeacher(){
return teacherService.list(null);
}
}
创建启动类
@SpringBootApplication
public class EduApplication {
public static void main(String[] args) {
SpringApplication.run(EduApplication.class,args);
}
}
创建配置类
创建配置类config.EduConfig.class
添加配置类注解和mapper扫描注解
@Configuration
@MapperScan("com.jiabei.eduservice.mapper")
public class EduConfig {
}
启动工程
访问
得到数据
我们查询出来的时间:"gmtModified":"2019-11-12T05:37:52.000+0000"
默认此时间格式(json格式)带有时区,并且是世界标准时间,和我们的时间相差8小时
在apllication.properties中设置
#json时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
重启服务
访问,得到的数据就有了正常格式:"gmtModified":"2019-11-12 13:37:52"
代码构建
逻辑删除功能
在EduConfig中配置逻辑删除插件
@Configuration
@MapperScan("com.jiabei.eduservice.mapper")
public class EduConfig {
//逻辑删除插件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
}
在实体类的isDeleted属性上添加逻辑删除注解
在controller中编写逻辑删除讲师方法
//根据id逻辑删除讲师
@DeleteMapping("{id}")
public boolean removeTeacher(@PathVariable String id){
boolean res = teacherService.removeById(id);
return res;
}
整合swagger
整合swagger,借助swagger进行delete测试
在guli_parent下创建一个子模块common
给common模块添加pom类型
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>provided </scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<scope>provided </scope>
</dependency>
<!--lombok用来简化实体类:需要安装lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided </scope>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<scope>provided </scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<scope>provided </scope>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>-->
</dependencies>
在common模块中删除src文件夹,并创建maven子模块service_base
在service_base中创建com\jiabei\servicebase\SwaggerConfig.class
复制swagger代码
@Configuration
@EnableSwagger2 //开启swagger
public class SwaggerConfig {
@Bean
public Docket webApiConfig(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("webApi")
.apiInfo(webApiInfo())
.select()
.paths(Predicates.not(PathSelectors.regex("/admin/.*")))
.paths(Predicates.not(PathSelectors.regex("/error.*")))
.build();
}
private ApiInfo webApiInfo(){
return new ApiInfoBuilder()
.title("网站-课程中心API文档")
.description("本文档描述了课程中心微服务接口定义")
.version("1.0")
.contact(new Contact("java", "http://atguigu.com", "1123@qq.com"))
.build();
}
}
在service中引入service_base依赖
启动类上添加组件扫描注解
@SpringBootApplication
@Component("com.jiabei")
public class EduApplication {
public static void main(String[] args) {
SpringApplication.run(EduApplication.class,args);
}
}
启动项目
浏览器访问:
访问结果:
如果报错 :Unable to infer base url.
关闭项目,刷新maven,开启项目,就能访问成功了
点击首行,输入参数,点击try it out,就能进行delete测试了
统一数据返回格式
在common模块中创建子模块common_utils
在common_utils中创建接口com.jiabei.commonutils.ResultCode
public interface ResultCode {
public static final Integer SUCCESS = 2000; //成功
public static final Integer ERROR= 2001; //失败
}
在common_utils中创建类com.jiabei.commonutils.R
R将作为统一的数据返回格式,每次访问都返回一个R对象
@Data
public class R {
private Boolean success; //是否成功
private Integer code; //响应状态码
private String message; //返回消息
private Map<String,Object> data = new HashMap<String,Object>(); //返回数据
private R(){}
public static R ok(){
R r = new R();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS);
r.setMessage("成功");
return r;
}
public static R error(){
R r = new R();
r.setSuccess(false);
r.setCode(ResultCode.ERROR);
r.setMessage("失败");
return r;
}
public R success (Boolean success){
this.setSuccess(success);
return this;
}
public R message(String Message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key,Object value){
this.data.put(key,value);
return this;
}
}
在service模块中引入common_utils依赖
<dependency>
<groupId>com.jiabei</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
修改service_edu模块中的controller中的两个方法
将两个方法的返回值统一设定为R类的对象
//查询所有讲师
@GetMapping("queryAllTeacher")
public R queryAllTeacher(){
List<EduTeacher> list = teacherService.list(null);
return R.ok().data("items",list);
}
//根据id逻辑删除讲师
@DeleteMapping("{id}")
public R removeTeacher(@PathVariable String id){
boolean res = teacherService.removeById(id);
return res?R.ok():R.error();
}
用swagger测试
查询所有讲师的执行结果
删除讲师的执行结果
代码构建
分页查询功能
在EduConfig中配置mp分页插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
在controller中编写分页查询代码
@GetMapping("pageQueryTeacher/{current}/{size}") //current表示当前页,size表示每页记录数
public R pageQueryTeacher(@PathVariable long current,@PathVariable long size){
Page<EduTeacher> page = new Page<>(current,size);
teacherService.page(page,null);
long total = page.getTotal();//总记录数
List<EduTeacher> records = page.getRecords();//所有数据
return R.ok().data("total",total).data("rows",records);
}
swagger测试结果
分页多条件查询
创建com.jiabei.eduservice.vo .TeacherCondition类
vo包下的类作为条件类,封装查询条件
@Data
public class TeacherCondition {
private String name;
private Integer level;//教师头衔
private String begin;//教师入职时间
private String end;//教师离职时间
}
在controller中编写测试代码
@PostMapping("pageConditionQueryTeacher/{current}/{size}")
public R pageConditionQueryTeacher(@PathVariable long current, @PathVariable long size, @RequestBody(required = false) TeacherCondition teacherCondition){
Page<EduTeacher> page = new Page<>(current,size);
QueryWrapper<EduTeacher> queryWrapper = new QueryWrapper<>();
String name = teacherCondition.getName();
Integer level = teacherCondition.getLevel();
String begin = teacherCondition.getBegin();
String end = teacherCondition.getEnd();
if (!StringUtils.isEmpty(name)){
queryWrapper.like("name",name);
}
if (!StringUtils.isEmpty(level)){
queryWrapper.eq("level",level);
}
if (!StringUtils.isEmpty(begin)){
queryWrapper.ge("gmt_create",begin);
}
if (!StringUtils.isEmpty(end)){
queryWrapper.le("gmt_create",end);
}
teacherService.page(page,queryWrapper);
long total = page.getTotal();//总记录数
List<EduTeacher> records = page.getRecords();//所有数据
return R.ok().data("total",total).data("rows",records);
}
swagger测试结果
注意:用post提交,否则空指针异常
属性自动填充
给实体类的属性添加属性自动填充注解
@TableField(fill= FieldFill.INSERT)
private Date gmtCreate;
@TableField(fill=FieldFill.INSERT_UPDATE)
private Date gmtModified;
在service_base模块中创建handler.MyMetaObjectHandler类
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate",new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
}
在controller里写添加讲师的代码
@PostMapping("addTeacher")
public R addTeacher(@RequestBody EduTeacher teacher){
boolean b = teacherService.save(teacher);
return b?R.ok():R.error();
}
swagger测试成功
在controller中写添加讲师和修改讲师的功能
//根据id查询讲师
@GetMapping("queryTeacher/{id}")
public R queryTeacher(@PathVariable String id){
EduTeacher teacher = teacherService.getById(id);
return R.ok().data("teacher",teacher);
}
//修改讲师
@PostMapping("updateTeacher")
public R updateTeacher(@RequestBody EduTeacher teacher){
boolean b = teacherService.updateById(teacher);
return b?R.ok():R.error();
}
用swagger测试成功
统一异常处理
在service_base模块中添加common_utils依赖
<dependencies>
<dependency>
<groupId>com.jiabei</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
在service_base模块中创建com.jiabei.servicebase.exceptionhandler.GlobalExceptionHandler类
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)//指定处理什么类型的异常
@ResponseBody
public R error(Exception e){
e.printStackTrace();
return R.error().message("执行了全局异常处理");
}
}
此时,service_base模块包含了common_utils模块
而service模块里引入了service_base和common_utils,属于重复引入
因而将service模块里的common_utils依赖删除
在controller中人为制造一个异常
启动项目
swagger测试,得到全局异常处理的结果