编辑
2023-12-05
遇到的问题
00

前提

在使用mongodb排序的时候需要构建一个sort对象,传入query.with()方法中,实现排序功能,但是直接new对象会提示

'Sort(org.springframework.data.domain.Sort.Direction, java.util.List<java.lang.String>)' has private access in 'org.springframework.data.domain.Sort'

因为springboot2.2.1(含)以上的版本Sort已经不能再实例化了,构造方法已经是私有的了!

可以改用Sort.by获得Sort对象。

解决方法

使用Sort s=Sort.by()方法创建对象by方法的底层:

java
public static Sort by(List<Sort.Order> orders) { Assert.notNull(orders, "Orders must not be null!"); return orders.isEmpty() ? unsorted() : new Sort(orders); }
编辑
2023-12-04
学习记录
00

验证码依赖

xml
<!-- 验证码 --> <dependency> <groupId>pro.fessional</groupId> <artifactId>kaptcha</artifactId> <version>2.3.3</version> </dependency>
  • kaptcha 是一个很有用的验证码生成工具。有了它,你能够生成各种样式的验证码,由于它是可配置的。
  • kaptcha工作的原理是调用com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片。
  • 同一时候将生成的验证码字符串放到 HttpSession中。
  • 使用kaptcha可以方便的配置: 验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!) 验证码图片的大小,边框,边框粗细,边框颜色 验证码的干扰线(可以自己继承com.google.code.kaptcha.NoiseProducer写一个自定义的干扰线) 验证码的样式(鱼眼样式、3D、普通模糊……当然也可以继承com.google.code.kaptcha.GimpyEngine自定义样式)

装载验证码启用状态到Redis

这是个方法是在项目初始化执行的,在ruoyi-system模块下的SysConfigServiceImpl中,作者给方法加上了@PostConstruct注解,这个注解的目的是在这个类初始化完成后就会执行这个方法,方法的内容是从sys_confg表中找到基础配置信息,循环的存在redis中

编辑
2023-12-04
学习记录
00

介绍

BOM(Bill of Materials)是由Maven提供的功能,它通过定义一整套相互兼容的jar包版本集合,使用时只需要依赖该BOM文件,即可放心的使用需要的依赖jar包,且无需再指定版本号。BOM的维护方负责版本升级,并保证BOM中定义的jar包版本之间的兼容性。

优势

使用BOM除了可以方便使用者在声明依赖的客户端时不需要指定版本号外,最主要的原因是可以解决依赖冲突,如考虑以下的依赖场景:

项目A依赖项目B 2.1和项目C 1.2版本: 项目B 2.1依赖项目D 1.1版本; 项目C 1.2依赖项目D 1.3版本;

在该例中,项目A对于项目D的依赖就会出现冲突,按照maven dependency mediation的规则,最后生效的可能是:项目A中会依赖到项目D1.1版本(就近原则,取决于路径和依赖的先后,和Maven版本有关系)。 在这种情况下,由于项目C依赖1.3版本的项目D,但是在运行时生效的确是1.1版本,所以在运行时很容易产生问题,如 NoSuchMethodError, ClassNotFoundException等。

编辑
2023-12-04
实用工具
00

简介

Apache RocketMQ 是一款 低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。

概念

  • Topic:消息主题,用于将一类的消息进行归类,比如订单主题,就是所有订单相关的消息都可以由这个主题去承载,生产者向这个主题发送消息。
  • 生产者:负责生产消息并发送消息到 Topic 的角色。
  • 消费者:负责从 Topic 接收并消费消息 的角色。
  • 消息:生产者向 Topic 发送的内容,会被消费者消费。
  • 消息属性:生产者发送的时候可以为消息自定义一些业务相关的属性,比如 Message Key 和 Tag 等。
  • Group:一类生产者或消费者,这类生产者或消费者通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。
编辑
2023-11-30
实用工具
00

MongoDB简介

  • MongoDB是一个基于分布式文件存储的数据库
  • 由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
  • 它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
  • Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

应用场景

  • 社交场景,使用 MongoDB存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
  • 游戏场景,使用 MongoDB存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
  • 物流场景,使用 MongoDB存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来
  • 物联网场景,使用 MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
  • 视频直播,使用 MongoDB存储用户信息、点赞互动信息等。

这些应用场景中,数据操作方面的共同特点是:

  1. 数据量大
  2. 写入操作频繁(读写都很频繁)
  3. 价值较低的数据,对事务性要求不高

对于这样的数据,我们更适合使用 MongoDB来实现数据的存储。

与关系型数据库术语对照

SQL术语MongoDB术语
databasedatabase
tablecollection
rowdocument
columnfield

Mongodb条件构造器使用

  1. 创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)代码演示如下:
  2. Query query = new Query(Criteria.where("id").is(id));
  3. 精准条件:criteria.and("key").is("条件")
  4. 模糊条件:criteria.and("key").regex("条件")
  5. 封装条件:query.addCriteria(criteria)
  6. 大于:Criteria gt = Criteria.where("key").gt("条件")
  7. 小于:Criteria lt = Criteria.where("key").lt("条件")
  8. 范围查询:query.addCriteria(Criteria.where("key").gte("条件").lte("条件")

Query对象方法

  1. addCriteria(Criteria criteria) 添加一个Criteria对象作为查询条件。
  2. limit(int limit) 设置查询结果的限制,指定返回的文档数量
  3. isSorted() 用于检查查询结果是否已排序
  4. skip() 设置查询结果跳过的文档数量
  5. withHint() 配置查询以在执行时使用给定的提示。 hint可以是索引名称或 json Document表示形式
  6. with(Pageable pageable) 在Query实例上设置给定的分页信息。将透明地设置skip和limit以及应用使用Pageable定义的Sort实例。
  7. with(Sort sort)向Query实例添加Sort 排序
  8. getSkip() 获取要跳过的文档数
  9. getLimit() 获取要返回的最大文档数。
  10. comment(String comment)向传播到配置文件日志的查询添加注释
  11. cursorBatchSize(int batchSize) 设置每个响应批次中返回的文档数。 使用 0(零)表示没有限制。负限制会在返回单个批次后关闭游标,指示服务器客户端不会请求后续批次。

Criteria 对象方法

  1. where(String key) 相当于sql的where后输入字段名,key是字段名
  2. and(String key) and方法
  3. is(Object value) 相等 相当于eq
  4. ne(Object value) 不相等
  5. lt(Object value) 小于
  6. lte(Object value) 小于或者等于
  7. gt(Object value) 大于
  8. gte(Object value) 大于或者等于'
  9. in(Object... values) 包含
  10. in(Collection<?> values) 包含
  11. nin(Object... values) 不包含
  12. nin(Collection<?> values) 不包含
  13. mod(Number value, Number remainder) 模运算
  14. all(Object... values) 数据库的数组类型里的元素同时等于values里的值
  15. all(Collection<?> values) 含义如上
  16. size(int size) 查询数组大小为多少
  17. exists(boolean value) 字段内容是否存在 true存在 false不存在
  18. type(int typeNumber) 查找文档值为xx的信息
  19. type(Type... types) 如上
  20. not() 不包含
  21. not( Object value) 不包含
  22. regex(String regex) 正则表达式 可以用来模糊查询,全匹配
  23. regex(String regex, @Nullable String options) options选项
  24. regex(Pattern pattern) is(Object)的语法糖明显表明我们创建了一个正则表达式谓词。
  25. withinSphere(Circle circle) 根据地理坐标操作
  26. elemMatch(Criteria criteria) 包含一个数组字段,该字段至少有一个元素与所有 指定的查询条件
  27. alike(Example<?> sample) 使用给定对象作为模式创建标准。
  28. orOperator(Criteria... criteria) or 相当于sql中的 or(criteria)or(criteria),方法传入多个criteria那这些逻辑之间都是or的关系
  29. norOperator(Criteria... criteria) 返回不满足or逻辑的内容
  30. andOperator(Criteria... criteria) and 方法传入多个criteria那这些逻辑之间都是and的关系

MongoDB搭建

windows-msi形式

官网下载,选择msi的形式下载文件

双击打开,选择Custom 自定义安装目录比如说D

,选择自己想要的地址,一直next就行了

在最后的页面,安装 "Install MongoDB Compass" 不勾选,否则可能要很长时间都一直在执行安装

window-zip形式

官网下载,选择zip的形式下载文件,解压到本地

进入解压后的文件夹,和bin目录同级下创建data和logs文件夹