肝了一周总结的SpringBoot常用注解大全,看完就炉火纯青了!
平时使用 SpringBoot 开发项目,少不了要使用到它的注解。这些注解让我们摆脱了繁琐的传统 Spring XML 配置,让我们开发项目更加高效,今天我们就来聊聊 SpringBoot 中常用的注解!
#常用注解概览这里整理了一张SpringBoot常用注解的思维导图,本文主要讲解这些注解的用法。
#组件相关注解#@Controller用于修饰MVC中controller层的组件,SpringBoot中的组件扫描功能会识别到该注解,并为修饰的类实例化对象,通常与@RequestMapping联用,当SpringMVC获取到请求时会转发到指定路径的方法进行处理。
1234567891011/** * @auther macrozheng * @description 后台用户管理Controller * @date 2018/4/26 * @github https://github.com/macrozheng */@Controller@RequestMapping("/admin")public class UmsAdminController ...
不要再重复造轮子了,这款开源工具类库贼好使!
Hutool 是一个小而全的 Java 工具类库,它帮助我们简化每一行代码,避免重复造轮子。如果你有需要用到某些工具类的时候,不妨在 Hutool 里面找找。本文总结了平时常用的16个工具类,希望对大家有所帮助!
#Hutool安装Hutool的安装非常简单,Maven项目中只需在pom.xml添加以下依赖即可。
12345<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.0</version></dependency>
#常用工具类
使用一个工具方法代替一段复杂代码,避免复制粘贴代码,可以极大的提高我们的开发效率,下面介绍下我常用的工具方法!
#Convert类型转换工具类,用于各种类型数据的转换。平时我们转换类型经常会面临类型转换失败的问题,要写try catch代码,有了它,就不用写了!
123456789101112//转换为字 ...
SpringBoot中处理校验逻辑的两种方式,真的很机智!
平时在开发接口的时候,常常会需要对参数进行校验,这里提供两种处理校验逻辑的方式。一种是使用 Hibernate Validator 来处理,另一种是使用全局异常来处理,下面我们讲下这两种方式的用法。
#👍 相关视频教程
SpringBoot中处理校验逻辑的两种方式_上篇open in new window
SpringBoot中处理校验逻辑的两种方式_下篇open in new window
#Hibernate Validator
Hibernate Validator是SpringBoot内置的校验框架,只要集成了SpringBoot就自动集成了它,我们可以通过在对象上面使用它提供的注解来完成参数校验。
#常用注解
我们先来了解下常用的注解,对Hibernate Validator所提供的校验功能有个印象。
@Null:被注释的属性必须为null;
@NotNull:被注释的属性不能为null;
@AssertTrue:被注释的属性必须为true;
@AssertFalse:被注释的属性必须为false;
@Min:被注释的属性必须大于等于其value值;
@Max: ...
SpringBoot应用中使用AOP记录接口访问日志
本文主要讲述 AOP 在 mall 项目中的应用,通过在 controller 层建一个切面来实现接口访问的统一日志记录。
#👍 相关视频教程SpringBoot应用中使用AOP记录接口访问日志open in new window
#AOP
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
#AOP的相关术语#通知(Advice)通知描述了切面要完成的工作以及何时执行。比如我们的日志切面需要记录每个接口调用时长,就需要在接口调用前后分别记录当前时间,再取差值。
前置通知(Before):在目标方法调用前调用通知功能;
后置通知(After):在目标方法调用之后调用通知功能,不关心方法的返回结果;
返回通知(AfterReturning):在目标方法成功执行之后调用通知功能;
异常通知(AfterThrowing):在目标方法抛出异常后调用通知功能; ...
RabbitMQ实现延迟消息居然如此简单,整个插件就完事了!
RabbitMQ 实现延迟消息的方式有两种,一种是使用 死信队列 实现,另一种是使用 延迟插件 实现。死信队列 实现我们以前曾经讲过,具体参考 《mall整合RabbitMQ实现延迟消息》,这次我们讲个更简单的,使用 延迟插件 实现。
#学前准备学习本文需要对RabbitMQ有所了解,还不了解的朋友可以看下:《花了3天总结的RabbitMQ实用技巧,有点东西!》
#插件安装
首先我们需要下载并安装RabbitMQ的延迟插件。
去RabbitMQ的官网下载插件,插件地址:https://www.rabbitmq.com/community-plugins.html
直接搜索rabbitmq_delayed_message_exchange即可找到我们需要下载的插件,下载和RabbitMQ配套的版本,不要弄错;
将插件文件复制到RabbitMQ安装目录的plugins目录下;
进入RabbitMQ安装目录的sbin目录下,使用如下命令启用延迟插件;
1rabbitmq-plugins enable rabbitmq_delayed_message_exchange ...
MyBatis Generator使用过程中踩过的一个坑
在使用 MyBatis Generator 生成代码的过程中,曾经遇到一个坑,每次生成 mapper.xml 的时候并不是直接覆盖原文件,而是在原文件中追加了新的内容,导致运行项目出错,本文主要讲解如何解决这个问题。
#👍 相关视频教程
MyBatis Generator使用教程_上篇open in new window
MyBatis Generator使用教程_下篇open in new window
#问题重现#示例代码使用的是mall-tiny-02的代码,代码地址:https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-02open in new window
#直接运行MallTinyApplication的main函数发现正常运行,启动成功!
#运行代码生成器运行com.macro.mall.tiny.mbg.Generator的main方法
#重新启动MallTinyApplication的main函数发现已经无法正常运行,其中有这么一行关键性的错误:
123nested except ...
Java 8都出那么久了,Stream API了解下?
Java 8 引入了全新的 Stream API,可以使用声明的方式来处理数据,极大地方便了集合操作,让我们可以使用更少的代码来实现更为复杂的逻辑,本文主要对一些常用的 Stream API 进行介绍。
#👍 相关视频教程Java 8 Stream API的使用open in new window
#什么是Stream?Stream(流)是一个来自数据源的元素队列,它可以支持聚合操作。
数据源:流的数据来源,构造Stream对象的数据源,比如通过一个List来构造Stream对象,这个List就是数据源;
聚合操作:对Stream对象进行处理后使得Stream对象返回指定规则数据的操作称之为聚合操作,比如filter、map、limit、sorted等都是聚合操作。
#Stream 聚合操作#背景介绍本文将以mall中的UmsPermission对象为例来介绍Stream API的常用操作。UmsPermission是一个权限对象,主要分为三种权限,目录、菜单以及按钮,对象定义如下。
1234567891011121314151617181920212223242526272 ...
Elasticsearch项目实战,商品搜索功能设计与实现!
上次写了一篇 《Elasticsearch快速入门,掌握这些刚刚好!》,带大家学习了下 Elasticsearch 的基本用法,这次我们来篇实战教程,以 mall 项目中的商品搜索为例,把 Elasticsearch 用起来!
#👍 相关视频教程
商品搜索功能设计与实现_上篇open in new window
商品搜索功能设计与实现_下篇open in new window
#中文分词器
由于商品搜索会涉及中文搜索,Elasticsearch需要安装插件才可以支持,我们先来了解下中文分词器,这里使用的是IKAnalyzer。在《Elasticsearch快速入门,掌握这些刚刚好!》中已经讲过其安装方式,这里直接讲解它的用法。
#使用IKAnalyzer
使用默认分词器,可以发现默认分词器只是将中文逐词分隔,并不符合我们的需求;
12345GET /pms/_analyze{ "text": "小米手机性价比很高", "tokenizer": "standard"}
...
Elasticsearch 升级 7.x 版本后,我感觉掉坑里了!
最近想把我的 mall 项目升级下,支持 SpringBoot 2.3.0 版本。升级过程中发现需要升级 Elasticsearch 到 7.x 版本,学习过我的 mall 项目的朋友应该知道, 我用的 Elasticsearch 是 6.x 版本,升级到 7.x 以后 ElasticsearchTemplate 都不让用了。本文记录了 Elasticsearch 从 6.x 升级到 7.x 所遇到的一些问题,给大家排排坑!
#版本选择
既然我们要升级到Elasticsearch7.x版本,首先要选择合适的版本。如何选择合适的版本,这里有个小技巧分享给大家。
首先我们可以在pom.xml中修改SpringBoot依赖的版本为2.3.0;
123456<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.R ...
手把手教你搞定权限管理,结合Vue实现菜单的动态权限控制!
权限管理在后端项目中主要体现在对接口访问权限的控制,在前端项目中主要体现在对菜单访问权限的控制。在 《手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!》中我们实现了对后端接口的动态权限控制,今天我们讲下如何结合 Vue 来实现菜单的动态权限控制。
#👍 相关视频教程
权限模块数据库表解析open in new window
权限模块接口设计与实现_上篇open in new window
权限模块接口设计与实现_下篇open in new window
结合Spring Security实现接口的动态权限控制open in new window
#使用技术
mall-admin-web实现菜单的动态权限控制使用到了两种技术,一种是Vue Router,另一种是Vuex,我们先来了解下这两种技术。
#Vue RouterVue Router是Vue.js官方的路由管理器。路由就是一个路径,当我们访问指定路径时就会跳转到指定页面。 我们项目的路由都是在src/router/index.js文件中定义的,举个例子,比如我们的商品列表页面路由定义如下 ...
