Day02--搭建项目环境、后台讲师模块,2024年最新dubbo常见面试题整理

    • 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、运行程序,查看结果

1、前后端分离概念

========================================================================

在这里插入图片描述

2、maven中的packaging标签

===================================================================================

项目的打包类型:pom、jar、war

packing默认是jar类型,

  • pom ---------> 父类型都为pom类型。

pom 项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的。

  • jar ---------> 内部调用或者是作服务使用

  • war ---------> 需要部署的项目

3、开发讲师管理模块

=========================================================================

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();

}

}

4、统一返回的json时间格式

==============================================================================

默认情况下json时间格式带有时区,并且是世界标准时间,和我们的时间差了八个小时

在application.properties中设置

#返回json的全局时间格式

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone=GMT+8

5、Restful风格增删改查

==============================================================================

5.1、查询


在这里插入图片描述

5.2、删除


1、在配置文件类中配置逻辑删除插件

在这里插入图片描述

2、在实体类对应数据库中逻辑删除字段的属性上添加注解@TableLogic

在这里插入图片描述

3、编写controller里面的方法

在这里插入图片描述

6、配置Swagger2

===========================================================================

swagger作用:生成一个在线的文档,在这个文档里可以方便接口的测试。

在这里插入图片描述

6.1、编写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();

}

}

6.2、


在这里插入图片描述

com.nonglin

service_base

0.0.1-SNAPSHOT

6.3、


在这里插入图片描述

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


在这里插入图片描述

6.5、定义接口说明和参数说明


定义在类上:@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、统一结果返回

=======================================================================

7.1、在common模块里创建子模块common_utils


在这里插入图片描述

7.2、创建interface,定义数据发挥状态码


在这里插入图片描述

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;//失败

}

7.3、


在这里插入图片描述

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;

}

}

7.4、引入依赖


在这里插入图片描述

com.nonglin

common_utils

0.0.1-SNAPSHOT

7.5、把接口返回方法改成R


在这里插入图片描述

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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

读者福利

========

由于篇幅过长,就不展示所有面试题了,想要完整面试题目的朋友(另有小编自己整理的2024大厂高频面试题及答案附赠)


一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-4M7qpBI6-1712716402447)]

读者福利

========

由于篇幅过长,就不展示所有面试题了,想要完整面试题目的朋友(另有小编自己整理的2024大厂高频面试题及答案附赠)


一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-yC0AxQdR-1712716402447)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值