springboot工作笔记

springboot+Maven

https://spring.io/projects/spring-boot->projects->Spring Initializr

mybatis-plus

  • 添加依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>


<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>
  • 新建pojo包 用于实例化数据
  • 新建Mapper包,用于拓展BasePapper接口

查询

list<user> list =usermapper.selectList(null);  全部查询

usermapper.selectById   根据id查询  

usermapper.selectBatchIds();  根据括号中id批量查询

usermapper.selectByMap();  根据括号中条件精准查询

增加

- 如果不给id赋值,默认生产一个随机的id(雪花算法)
- 创建一个user对象:user x =new  user();
- x.setXXXX(参数);
- usermapper.insert(x);

删除

usermapper.deleteById();  根据id进行删除



usermapper.deleteByMap(); 根据Map中数值进行对比删除



usermapper.deleteBatchIds();根据括号中的id批量删除

修改

usermapper.updateByid 根据id进行修改

查询分页插件

//分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

Page page = new Page<>(1,3); //当前页对象,每页3个
mpMapper.selectPage(page, null);


Swagger

@Postmapper

配置文件中要加:

spring.mvc.pathmatch.matching-strategy=ant-path-matcher

启动网址:http://localhost:端口号/swagger-ui.html

Springboot集成Redis

要先启动才有数据,不能运行了程序再启动

安装

​ 打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis 运行:

		redis-server.exe redis.windows.conf
			
	这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。

	切换到 redis 目录下运行
		redis-cli.exe -h 127.0.0.1 -p 6379
  • String(字符串) set
  • Hash(哈希) hset
  • List(列表) lpush
  • Set(集合) sadd
  • zset(sorted set:有序集合) zadd
  • stream 主要用于消息队列
Redis HyperLogLog
PFADD   PFCOUNT   计算基数(不同元素个数)

  • 开启本地 Redis 服务,开启两个 redis-cli 客户端。
  • 第一个 redis-cli 客户端输入 SUBSCRIBE runoobChat,意思是订阅 runoobChat 频道。
  • 第二个 redis-cli 客户端输入 PUBLISH runoobChat “Redis PUBLISH test” 往 runoobChat 频道发送消息,这个时候在第一个 redis-cli 客户端就会看到由第二个 redis-cli 客户端发送的测试消息。
Redis 事务
MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC
  • ​ 打包执行,非原子性事务
  • ​ 如果在 某 处失败,不会回滚,继续执行。

springboot中使用的对象不能存入Redis中。redis只支持5大类型,不包括对象。

==>序列化

  1. 通过序列化将对象转换成json字符串导入redis
  2. 导入rdis后将json还原成指定对象类型

将json字符串还原成user类型需要用到JSONObject.fromObject(jsonStr);

报错==>导入json工具包,不能用系统自带的,系统自带的没有JSONObject.fromObject


RabbitMQ

  • Direct Exchange id对应**
  • Fanout Exchange 提前绑定的信道
  • Topic Exchange 模糊匹配

@Controller f返回到网页

@RestController 返回json字符串

无法访问http://127.0.0.1:15672

1、打开rabbitmq命令行窗口

2、rabbitmq-service remove(输入正确后按回车)

3、rabbitmq-service install(输入正确后按回车)

4、rabbitmq-service start(输入正确后按回车)

5、rabbitmq-plugins enable rabbitmq_management(输入正确后按回车)

6、rabbitmq-service stop(输入正确后按回车)

7、rabbitmq-service start(输入正确后按回车)

交换机类型:

广播(扇形):无差别发送信息

路由(直连):精准匹配

通配符(主题):RoutingKey包含对应的指定的内容就可以接收到

首部(键值对):精准匹配,优势在于类型不限(Object)


http

  • B/S模式

  • 只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。

  • 无状态 没有记忆 中断传输需重新

  • 无连接 完成即断开

  • h t t p : / / h o s t [ " : " p o r t ] [ a b s p a t h ] http://host[":"port][abs_path] http://host[":"port][abspath]

  • GET一般用于获取/查询资源信息,而POST一般用于更新资源信息


eureka

SpringCloud中的一个组件,通过依赖导入

<!--eureka服务端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

版本冲突

Cannot resolve org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:unknown

官网生成的springboot.WAR包选择的Eureka依赖会出错
要用IDEA新建SpringBoot项目,用IDEA自带的依赖选择功能导入(社区版没有这个功能)

通过eureka调用的话Controller中地址与Eurka中的名称要一致


Aop

AOP切面模式:**将相同的代码集成在一个模块中,通过切面模式插入对应的位置,降低代码的工作量。

编写Aop切面代码时,报错rdeisUTtil工具类

加入AOP切面代码后,rdeisUTtil工具类无法被扫描

  • 将@Pointcut依赖具体到某一个文件而不是一整个文件夹
  • 将Redis工具类移到其他目录下

SpringBoot 整合 apollo

先下载压缩包(旧版本需要三个压缩包,现在官网提供整合包)

这里的sql目录文件里面放入了两个sql执行语句的sql文件,我们可以去本地数据库新建两个数据库取名为: ApolloPortalDB和ApolloConfigDB

在mysql中导入两个系统数据库

电脑必须安装git,然后git去启动apollo ( apollo目录下 ./demo.sh start )(不启动访问不到http://localhost:8070 )

访问http://localhost:8070 通过界面使用Apollo配置中心,输入用户名apollo密码admin登录。


Mvc三层结构

dao层、service层和controller层

dao层主要与数据库交互

server层进行逻辑结构的设计

controller层对请求的控制 决定该调用哪种sever业务处理 必要时候对请求进行处理

在mybatis-plus中,server和dao之间的界限变得模糊,产生了一个mapper层(dao层),controller通过一个继承BaseMapper接口的mapper对象,就可以直接调用数据库的增删改查相关操作。


实名制系统

许多个maven与springboot项目组成

枚举类

enum

lam表达式

没有函数名的函数 最显著的特征为 ->

Lambda表达式只支持函数式接口 也就是只有一个抽象方法的接口


pojo

分别为do vo po dto

VO (View Object)视图对象

用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

DTO(Data Transfer Object)数据传输对象

主要用于展示层与服务层之间的数据传输对象

DO(Domain Object)对象

一个业务的实体

PO(Persistent Object):持久化对象

数据表中的每个字段就对应PO的一个属性,一个po就是一条数据库内容。


@Autowierd 和@bean

都是写的是接口 默认是实现类
但是有2个实现类的时候
要指定注入哪个类

getBean获取的其实是这个实现类

@Autowierd 是将注解部分进行自动装配,@bean是将注解的部分放进容器中,当使用时通过getbean获得


java反射机制

​ 对一个类来说,有三种获取对象的方式:

​ public class X(){

​ F f=new F(); }

​ Class c1=F.class();

​ Class c2=f.getclass();


entityToVO

​ 使用 mybatis-plus 操作后获得的数据类型为 Entity,但是前端界面往往需要展示一些其他的字段数据,此时就需要 将 Entity 转化为 Vo。

​ entity: 对应数据库表模型

​ vo: 对应需要返回到前端的数据模型

​ dto: 对应后台内部调用的数据模型


RespEntity

是一个泛型类

这是一个设计的封装对象 来保证每个人使用这个对象返回给前端的值都是一种特定的格式

不然每个人可能有自己的返回习惯 可能是封装对象,可能是直接返回


异步多线程

Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
线程需要执行的内容 }
});
// 开启 thread1
thread1.start();

springboot可以通过@EnableAysc 和@Aysc注解进行异步


querywrapper

基于mybatis=plus 一个方法,其中存放的并不是查询后的结果,而是sql语句的封装。

Couldn’t find type java.sql.Date. Are you missing a dependency on your classpath?

idea运行项目代码报错

Settings -> Build, Execution, Deployment -> Build Tools -> Maven/Gradle -> Runner -> tic on “Delegate IDE build/run actions”

Exception in thread “main” java.lang.AssertionError

idea运行报错

这个问题确实是由较高版本的JDK编译的java class文件试图在较低版本的JVM上运行产生的错误。

解决措施就是保证jvm(java命令)和jdk(javac命令)版本一致。如果是windows版本,则在命令行中分别输入java -version和javac -version命令来查看版本是否一致。

CreateProcess error=206, 文件名或扩展名太长

Windows命令行支持的字符串长度有限制。

1.修改Maven默认仓库路径。

  1. Android Studio -> Run -> Edit Configurations -> Templates -> Application

-> shorten command line: 选择 JAR manifest -java -cp classpath.jar classname [args]

Java项目启动报错:Process exited with an error: 1 (Exit value: 1)

端口占用问题,但是我看idea中没有说这个问题

在windows上,通过dos命令,即输入cmd回车,然后输入:netstat -ano | findstr 7400

taskkill /pid xxx /f 或者 taskkill -f /pid XXXX


SQL IsDeleted(@TableLogic)

逻辑删除与物理删除

物理删除就是在数据库中删除这条记录

逻辑删除是在程序中看不到这条数据,但是在数据库中还是真实存在的。(isdeleted=1)


@RequestParam使用

加与不加的区别

(1)不加@RequestParam前端的参数名需要和后端控制器的变量名保持一致才能生效

(2)不加@RequestParam参数为非必传,加@RequestParam写法参数为必传。但@RequestParam可以通过@RequestParam(required = false)设置为非必传。

(3)@RequestParam可以通过@RequestParam(“userId”)或者@RequestParam(value = “userId”)指定传入的参数名。

(4)@RequestParam可以通过@RequestParam(defaultValue = “0”)指定参数默认值

(5)如果接口除了前端调用还有后端RPC调用,则不能省略@RequestParam,否则RPC会找不到参数报错

(6)访问时:

不加@RequestParam注解:url可带参数也可不带参数,输入 localhost:8080/list1 以及 localhost:8080/list1?userId=xxx 方法都能执行
加@RequestParam注解:url必须带有参数。也就是说你直接输入localhost:8080/list2 会报错,不会执行方法。只能输入localhost:8080/list2?userId=xxx 才能执行相应的方法


7.17


contains函数

用于数值比较,进行数值比较,如果两值不相等,则返回FALSE ,相同则是true。


filter

java8后引入的一个过滤函数,在filter里判断为真的才能留着集合中,起到过滤作用

需要先将过滤的数组集合通过stream()转换为流数据,进行处理后,通过.collect(collectors.toList( ))返回原先的数据类型

filter

filter()方法返回一个盘子流,collect()方法将这个流转换成一个列表。“收集”操作称为终端操作


body和query传参的区别

get方法只能用query传参,post可以用body+query

query是想数据拼接在地址上,body是将数据放在data中


@RequestBody和@RequestParam区别

类似于

body和query传参的区别

@RequestBody只能用在post方法中,get方法无法使用

@RequestParam适用于get/post方法中,适用于简单的数据


List list=null与List list=new ArrayList<>()的区别

直接将null赋值给链表,后续进行lits.add操作时,需要null不为空才能add方法

通过多态new ArrayList创造的链表虽然内容也为空,但是可以进行add操作


对于传参方式@RequestBody

在一个接口参数中,只能出现一次@RequestBody

如果有两个参数,都通过post方法传输,内容放在body中,则需要通过封装一个类来传参数


7.24


Java中Stream方法

java8.0后引入了list.stream().方法,将链表可以转换为流进行更多的操作

最常见的为filter(过滤器) ,distinct(去重),count(计数)


mybaits-plus构造器

构造器可以通过拼接条件完成数据库增删改查操作

误区:如设备id属性为Long,用构造器查询工资卡中设备字段,得到的是WokCard类型的结果,而不是Long


IDEA无法使用VUE

没有Vuejs插件,社区版换成专业版


MVN install不是内部指令

MVN的地址有错误,在环境变量中


Fatal error compiling: 无效的目标 发行版: 1.8 -> [Help 1]

电脑中有多个sdk版本,而环境变量中与idea使用的不是同一个版本


7.31


Vue

生命周期 钩子函数mounted

v-if 和v-show的区别 v-show只是隐藏了数据,数据会泄露,但是性能消耗低 v-if是删除数据,性能消耗大,但是安全

“”和’'的区别 使用过一次“”之后,在“”里面要用‘’不然会报错

自定义组件

1.定义组件

2.声明组件

3.使用组件

.Vue文件 浏览器中不支持import, 放在浏览器中无法运行,要通过脚手架

[Vue warn]: Cannot find element: #App

在index。html中 的body中 没有找到对应的app组件(外部引入注意A还是a)

v-bind和v-model

v-bind为单向数据流,修改的值不会影响原先数据,v-model为双向绑定,修改可以影响数据

8.7

脚手架中默认使用ems.vue (阉割版),必须使用render进行渲染 或者引入完整版vue

@keyup和@keydown

js语言中,监控键盘属性为@onkeyup和@onkeydown,vue和js语句有不同之处

scoped

通过scoped属性可以限定css样式的作用域 防止重名

props

自定义组件 分为单文件组件和非单文件组件

vue采用单文件组件,文件结尾为 .uve

组件分为三部分模板,

组件完成后需要通过export进行暴露,在上一级使用的组件中进行import,用components声明后就可以进行调用

Router

ipmort引入vue-router包(Vue2注意版本)

Vue.use(Router)

new 一个Router对象,在routes中写每个path和name以及对应的组件

在App.vue界面中 来指定连接跳转到哪一个页面

8.14


对于数组的分页查询

运用字符流的方式 .stream().skip((current-1)*size).limit(size). collect(Collectors.toList());

fegin

先定义一个接口,在接口@FeignClient(value = xxxx)里写上被调用端的服务名称 @GetMapping里写调用的接口的地址

最后在controller里通过@autowired 接口 调用接口方法实现

fegin默认禁用get 自动用post


根据业务需要根据 List 元素的某个字段进行大小排序,用 List 的流里的sort 方法:

List newList = voList.stream().
sorted(Comparator.comparing(ReiFmsProjectVO::getPercent, Comparator.reverseOrder())).
collect(Collectors.toList());
高亮部分需要替换,voList是排序前的List,newList是经过排序之后的List,getPercent替换成要根据什么值排序的字段

mybatis默认 分隔符自动转化为驼峰写法

@Select

在注解中使用#{}的方式进行条件注入,遇到Like等 条件 ,需要进行语句拼装需要用到CONCAT 关键字

Mapper.xml映射

构造器需要用到  @Param(Constants.WRAPPER) 注解进行标记     在xml中通过 ${ew.customSqlSegment} 注入查询条件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值