-
- 8.1、首先在配置类中引入mybatis-plus分页插件
-
8.2、在controller类中编写讲师分页查询方法
-
9、后台讲师管理模块,带条件的分页查询
-
- 9.1、引入分页插件
-
9.2、编写讲师分页查询接口的方法
-
- 案例1、查询数据controller代码
-
案例2、使用json传查询的数据
-
10、后台管理–添加,修改讲师模块
-
- 准备1、:自动填充封装
-
准备2、在实体类添加自动填充注解
-
10.1、添加讲师的controller方法定义
-
10.2、修改讲师的controller方法定义
-
11、统一异常数据
-
- 11.1、什么是统一异常处理?
-
11.2、创建统一异常处理器
-
12、自定义异常
-
- 12.1、创建自定义异常类继承RuntimeTimeException,写异常属性
-
12.2、在同一异常类添加规则
-
12.3、执行自定义异常
-
12.4、运行程序,查看结果
========================================================================
===================================================================================
项目的打包类型:pom、jar、war
packing默认是jar类型,
- pom ---------> 父类型都为pom类型。
pom 项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的。
-
jar ---------> 内部调用或者是作服务使用
-
war ---------> 需要部署的项目
=========================================================================
3.1、创建applications.properties配置文件
服务端口
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:3306/guli?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.2、编写controller,service,mapper代码
3.2.1、使用代码生成器
package com.nonglin.demo;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;
/**
-
@author
-
@since 2021/2/21
*/
public class CodeGenerator {
@Test
public void run() {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty(“user.dir”);
//修改1、projectPath:替换代码生成的绝对路径
gc.setOutputDir(“E:\workspaces\IDEA\SpringBoot\cui_parent\service\service_edu” + “/src/main/java”);
gc.setAuthor(“Lenovo”);//生成代码作者的名字
gc.setOpen(false); //生成后是否打开资源管理器
gc.setFileOverride(false); //重新生成时文件是否覆盖
gc.setServiceName(“%sService”); //去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER_STR); //主键策略
gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
gc.setSwagger2(true);//开启Swagger2模式
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
//修改2、
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();
//修改3、
//会生成com.nonglin.eduservice包
pc.setModuleName(“eduservice”); //模块名
pc.setParent(“com.nonglin”);
pc.setController(“controller”);//会生成com.nonglin.eduservice.controller包
pc.setEntity(“entity”);//会生成com.nonglin.eduservice.entity包
pc.setService(“service”);//会生成com.nonglin.eduservice.service包
pc.setMapper(“mapper”);//会生成com.nonglin.eduservice.mapper包
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
//修改4、
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();
}
}
==============================================================================
默认情况下json时间格式带有时区,并且是世界标准时间,和我们的时间差了八个小时
在application.properties中设置
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
==============================================================================
1、在配置文件类中配置逻辑删除插件
2、在实体类对应数据库中逻辑删除字段的属性上添加注解@TableLogic
3、编写controller里面的方法
===========================================================================
swagger作用:生成一个在线的文档,在这个文档里可以方便接口的测试。
package com.nonglin.baseservice;
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@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();
}
}
com.nonglin
service_base
0.0.1-SNAPSHOT
package com.nonglin.eduservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
/**
-
@Description :
-
@Author :lenovo
-
@Date :2021/2/21 18:59
*/
@SpringBootApplication
@ComponentScan(basePackages = {“com.nonglin”})
public class EduApplication {
public static void main(String[] args) {
SpringApplication.run(EduApplication.class,args);
}
}
6.4、浏览器地址栏访问:http://localhost:8001/swagger-ui.html
定义在类上:@Api
定义在方法上:@ApiOperation
定义在参数上:@ApiParam
package com.nonglin.eduservice.controller;
import com.nonglin.eduservice.entity.EduTeacher;
import com.nonglin.eduservice.service.EduTeacherService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
-
-
讲师 前端控制器
-
@author Lenovo
-
@since 2021-02-21
*/
@Api(description=“讲师管理”)
@RestController
@RequestMapping(“/eduservice/teacher”)
public class EduTeacherController {
//把service注入
@Autowired
private EduTeacherService eduTeacherService;
//查询所有讲师信息
@ApiOperation(value = “所有讲师列表”)
@GetMapping(“/findAll”)
public List findAll() {
List list = eduTeacherService.list(null);
return list;
}
//删除讲师
@ApiOperation(value = “根据ID删除讲师”)
@DeleteMapping(“{id}”)
public boolean deleteTeacher( @ApiParam(name = “id”, value = “讲师ID”, required = true) @PathVariable String id) {
boolean flag = eduTeacherService.removeById(id);
return flag;
}
}
=======================================================================
7.1、在common模块里创建子模块common_utils
package com.nonglin.commonutils;
/**
-
@Description :
-
@Author :lenovo
-
@Date :2021/2/21 21:19
*/
public interface ReslutCode {
public static Integer SUCCESS = 20000;//成功
public static Integer ERROR = 20001;//失败
}
package com.nonglin.commonutils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class R {
@ApiModelProperty(value = “是否成功”)
private Boolean success;
@ApiModelProperty(value = “返回码”)
private Integer code;
@ApiModelProperty(value = “返回消息”)
private String message;
@ApiModelProperty(value = “返回数据”)
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;
}
public R data(Map<String, Object> map){
this.setData(map);
return this;
}
}
com.nonglin
common_utils
0.0.1-SNAPSHOT
package com.nonglin.eduservice.controller;
import com.nonglin.commonutils.R;
import com.nonglin.eduservice.entity.EduTeacher;
import com.nonglin.eduservice.service.EduTeacherService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
-
-
讲师 前端控制器
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
读者福利
========
由于篇幅过长,就不展示所有面试题了,想要完整面试题目的朋友(另有小编自己整理的2024大厂高频面试题及答案附赠)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-4M7qpBI6-1712716402447)]
读者福利
========
由于篇幅过长,就不展示所有面试题了,想要完整面试题目的朋友(另有小编自己整理的2024大厂高频面试题及答案附赠)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-yC0AxQdR-1712716402447)]