day01-项目基础搭建相关

news/2024/10/5 8:06:41/文章来源:https://www.cnblogs.com/yuqiu2004/p/18286887

1 dependencies 和 dependencymanagement

  • dependencies
    • 需要自己指定版本
  • dependencymanagement
    • 可以通过maven的依赖传递 在子模块中不指定项目版本 通过父模块指定使用父模块指定的版本

2 utf8 和 utf8mb4

utf8可以满足中文编码的要求,但是由于移动端需要存储表情之类的字符,所以需要使用utf8mb4

3 加微服务模块步骤

  1. 建module

    1. 设置父模块
    2. 设置包名
  2. 改pom

    1. 在建立的子模块中引入需要的依赖
  3. 写yml

  4. 主启动

    1. 修改Main类名为Main8001

    2. 加注解

      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import tk.mybatis.spring.annotation.MapperScan;@SpringBootApplication
      @MapperScan("com.atguigu.cloud.mapper") // 启动包扫描 就不再需要重复编写@Mapper注解了
      public class Main8001 {public static void main(String[] args) {SpringApplication.run(Main8001.class, args);}
      }
      
  5. 业务类

4 mybatis-generator

  • 在一个工具模块中建立mybatis-generator
  • 首先引入依赖
<!-- Mybatis Generator 自己独有+自带版本号--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.4.2</version></dependency><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.2</version><configuration><configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile><overwrite>true</overwrite><verbose>true</verbose></configuration><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>4.2.3</version></dependency></dependencies></plugin>
  • 同时添加数据库以及generator的相关配置

    #t_pay表包名
    package.name=com.atguigu.cloud# mysql8.0
    jdbc.driverClass = com.mysql.cj.jdbc.Driver
    jdbc.url= jdbc:mysql://localhost:3306/cloud2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
    jdbc.user = root
    jdbc.password =123456
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><properties resource="config.properties"/><context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"><property name="beginningDelimiter" value="`"/><property name="endingDelimiter" value="`"/><plugin type="tk.mybatis.mapper.generator.MapperPlugin"><property name="mappers" value="tk.mybatis.mapper.common.Mapper"/><property name="caseSensitive" value="true"/></plugin><jdbcConnection driverClass="${jdbc.driverClass}"connectionURL="${jdbc.url}"userId="${jdbc.user}"password="${jdbc.password}"></jdbcConnection><javaModelGenerator targetPackage="${package.name}.entities" targetProject="src/main/java"/><sqlMapGenerator targetPackage="${package.name}.mapper" targetProject="src/main/java"/><javaClientGenerator targetPackage="${package.name}.mapper" targetProject="src/main/java" type="XMLMAPPER"/><table tableName="t_pay" domainObjectName="Pay"><generatedKey column="id" sqlStatement="JDBC"/></table></context>
    </generatorConfiguration>
    
  • 通过插件中的mybatis-generator:generate一键生成实体类和mapper

  • 生成之后手动将相关代码拷贝至正式的模块中,然后将生成的地方的文件删除以免引发歧义

5 Controller和RestController

1. Controller, RestController的共同点

​ 都是用来表示Spring某个类的是否可以接收HTTP请求。

2. Controller, RestController的不同点

  • @Controller:标识一个Spring类是Spring MVC controller处理器,@RestController:@RestController是@Controller
  • @ResponseBody的结合体,两个标注合并起来的作用。@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。

前后端分离的模式中后端处理请求基本都是返回数据,所以跳转模板页面一般用不上,使用@RestController使用起来就更加方便了

6 swagger注解

  • 针对controller类使用注解@Tag(name="", description=""),针对具体的接口使用注解@Operation(summary="", description="")
  • 针对实体类以及它的每一个字段使用注解@Schema(title="")

同时还要添加配置类SwaggerConfig.class,例子如下

package com.atguigu.cloud.config;import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class Swagger3Config
{/*** 将接口根据模块进行分组*/@Beanpublic GroupedOpenApi PayApi(){return GroupedOpenApi.builder().group("支付微服务模块").pathsToMatch("/pay/**").build();}@Beanpublic GroupedOpenApi OtherApi(){return GroupedOpenApi.builder().group("其它微服务模块").pathsToMatch("/other/**", "/others").build();}/*@Beanpublic GroupedOpenApi CustomerApi(){return GroupedOpenApi.builder().group("客户微服务模块").pathsToMatch("/customer/**", "/customers").build();}*//**总的项目说明*/@Beanpublic OpenAPI docsOpenApi(){return new OpenAPI().info(new Info().title("cloud2024").description("通用设计rest").version("v1.0")).externalDocs(new ExternalDocumentation().description("www.atguigu.com").url("https://yiyan.baidu.com/"));}
}

运行项目之后访问

localhost:port/swagger-ui/index.html

可以查看生成的接口声明,也可以通过其进行接口测试 try-it-out --> execute

7 时间格式统一

两种方式解决

  • 相应的属性上添加注解@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")

  • 如果是springboot项目,可以通过配置解决

    spring:jackson:date-format: yyyy-MM-dd HH:mm:sstimezone: GMT+8
    

8 请求响应状态规范

分类 区间 分类描述
1** 100-199 信息,服务器收到请求,需要请求者继续执行操作
2** 200-299 成功,操作被成功接收并处理
3** 300-399 重定向,需要进一步的操作以完成请求
4** 400-499 客户端错误,请求包含语法错误或无法完成请求
5** 500-599 服务器错误,服务器在处理请求的过程中发生了错误

9 stream流式计算

Java8中的新特性,使用函数式编程方式,对集合或数组进行链状流式的操作

原理:每一个集合的父类Collection都有一个stream方法,返回一个Stream流对象

中间操作:

  • filter
    • 对流中的元素进行条件过滤,符合的保留在流中
    • 通常通过λ表达式的方式编写条件
  • map
    • 对流中的元素进行计算或转换
    • 方法参数中传入一个function函数型接口,重写其中的apply方法,通过遍历拿到某个对象的某个属性
  • distinct
    • 去除流中重复的元素
    • 依赖对象的equals方法完成,自定义对象需要重写equals
  • sorted
    • 对流中的元素进行排序
    • 如果调用无参数的方法,被排序的对象需要实现Comparable以及实现compareTo方法;调用带参的方法就通过匿名内部类的方式重写compareTo方法
  • limit
    • 设置流的最大长度,超出的部分将被抛弃
  • skip
    • 跳过流中的前n个元素,返回剩下的元素
  • flatMap
    • map只能把一个对象转换成另一个对象来作为流中的元素,而flatMap可以把一个对象转换成多个对象作为流中的元素
    • 调用这个方法,可以将对象中的集合,再转换成Stream流,那么这个新的Stream流中的泛型类型就是原来对象中集合的元素类型
  • peek
    • 在Stream中提供调试的功能,他虽然传入了一个消费型接口,但是并不是真正的去消费数据,供开发人员调试用
    • 传入一个Consumer匿名内部类,对流中的元素进行调试操作

终结操作:

  • forEach
    • 对流中的元素进行遍历操作,我们通过传入的参数去指定对遍历到的元素进行什么具体的操作
  • count
    • 可以用来获取当前流中元素的个数
  • min | max
    • 获取最值
  • collect
    • 把当前的流转换成一个集合
    • 例如:
      • .collect(Collectors.toList())
      • .collect(Collectors.toSet())
      • .collect(Collectors.toMap(obj -> obj.getParam1(), obj -> obj.getParam2()))

查找与匹配

  • anyMatch
    • 可以用来判断是否有任意符合匹配条件的元素,结果为布尔类型
  • allMatch
    • 可以用来判断是否都符合匹配的条件,结果为布尔类型。如果都符合则为true,否则为false
  • noneMatch
    • 可以判断流中的元素是否都不符合匹配的条件。如果都不符合结果为true,否则则为false
  • findAny
    • 获取流中的任意一个元素,该方法没有办法保证获取的一定是流中的第一个元素
  • findFirst
    • 获取流中的第一个元素

reduce

  • 对流中的数据(多个)按照你指定的计算方式,计算出一个结果(缩减操作

  • 原理

    T result = identity;
    for(T element : this stream){result = accumulator.apply(result,element);
    }
    return result;
    
  • 使用

    • .reduce(T identity, BinaryOperator<T> accumulator)
      • 第一个参数:初值
      • 第二个参数:计算方式
    • .reduce(BinaryOperator<T> binaryOperator)
      • 与上面的区别在于初值不需要手动指定,而是赋值为第一个值

10 全局异常处理器

使用注解@RestControllerAdvice定义一个全局异常处理的类GlobalExceptionHandler,作用是:

  • 通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。

  • 注解了@RestControllerAdvice的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。

  • @RestControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上。

  • @ExceptionHandler:用于指定异常处理方法。当与@RestControllerAdvice配合使用时,用于全局处理控制器里的异常

  • @InitBinder:用来设置WebDataBinder,用于自动绑定前台请求参数到Model中。

  • @ModelAttribute:本来作用是绑定键值对到Model中,当与@ControllerAdvice配合使用时,可以让全局的@RequestMapping都能获得在此处设置的键值对

例子:

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(RuntimeException.class)@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)public ResultData<String> exception(Exception e){System.out.println("##########come in GlobalExceptionHandler");log.error("全局异常信息:{}",e.getMessage(),e);return ResultData.fail(ReturnCodeEnum.RC500.getCode(), e.getMessage());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739166.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm创建临时文件scatch file

JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 有时您可能需要创建临时注释或在项目上下文之外起草一些代码。为此,您可以使用临时文件和临时缓冲…

P5441

P5441 神仙题目。 tips:后面把 \(4\) 个点说成一个组。我们先考虑一个组怎么连才不是强联通的。一个点 A 向另外三个点 BCD 连一条有向边。在不满足第一种的情况下,BCD 向另一个点 A 连一条有向边。AB 之间连有向边,CD 之间连无向边,然后 AC 和 AD 连一条有向边,BC 和 BD …

二水中分白鹭洲

二水中分白鹭洲 题目大意 假设水中 \(n\) 条体积相等的鱼将按顺序依次排列,准备进行战斗。初始时,每条鱼可以选择向左游或向右游;但是鱼儿不太聪明,它们只会随机选择初始方向。 战斗时,若两条不同方向的鱼相遇,则体积大的鱼会吃掉体积小的鱼;如果两条鱼的体积相同,则向…

git恢复到之前提交的记录

项目搞崩了,还提交上去了怎么办? 那当然是恢复到之前的提交记录了,那怎么操作呢? 首先,到代码托管平台找到你想恢复的提交记录(在此以github为例) 获取 commit id 首先,通过如下图操作获取到commit id {% asset_img image-20240706062921362.png "..." "…

[python]Markdown图片引用格式批处理桌面应用程序

需求 使用python编写一个exe,实现批量修改图片引用,将修改后的文件生成为 文件名_blog.md。有一个编辑框,允许接收拖动过来md文件,拖入文件时获取文件路径,有一个编辑框编辑修改后的文件的输出路径,用户拖入文件时,就能自动得到输出的路径 作用是将md文件中的例如 ![ima…

读人工智能全传04NP完全问题

读人工智能全传04NP完全问题1. 问题解决与搜索 1.1. 解决问题的能力无疑是区分人类和其他动物的关键能力之一 1.1.1. 解决问题是需要智慧的 1.2. 汉诺塔 1.2.1. 对于三个金环而言 1.2.1.1. 你不可能找到少于7次的解决方案了 1.2.2. 最初,我们只能选择移动最小的金环,只有将它…

sunny 拦截不成功解决

可能开了tz,导致无法拦截请求 解决方法:打开这个注释本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18286840

02.内建变量类型

内建变量类型bool,string(u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr 无长度 int 的实际长度取决于操作系统位数(32/64)uintptr 为指针类型byte,rune rune 为 Go 语言的字符型相当于其他语言的 char ,长度为4字节 int32float32,float32,complex64,complex128 complex …

01.变量定义

变量定义 新建项目func variableZeroValue() {//赋空值var a intvar s stringfmt.Printf("%d %q\n", a, s) } 变量赋空值func variableZeroValue() {//赋空值var a intvar s stringfmt.Printf("%d %q\n", a, s) } 变量赋初值func variableInitialValue()…

7.5 - 贪心篇完结

435. 无重叠区间 题意描述:[!WARNING] 给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals = [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠。…

redis zset 多值排序

最近面试老被问到ZSet相关的排序题,平时也没相关的经验,一问一个不吱声。抽有点时间,自己尝试去想了一种解决方案。 ZSet相关常用命令 添加成员ZADD [Key] [Score] [Member] //例 向班级a里面插入小明的80分 ZADD a 80 xiaoming有序获取//从低到高获取指定区间的人…

Git的基本应用

Git工作区:就是你在电脑里能看到的目录。也就是放置源码的地方。和.git文件同级目录下 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 版本库:工作区有一个隐藏目录 .git,这个不算工作区…