自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 Spring 拦截器Interception 和 AOP 做全局处理的使用方式与使用场景分析

简介:Interceptor和aop:依赖spring框架,基于java反射和动态代理实现,只能拦截controller的请求,可以获取ioc容器中的bean拦截顺序:Interception > AOP > 具体执行的方法 > AOP > @ControllerAdvice > InterceptionInterceptorInterceptor是依赖于Spring框架,是aop的一种表现,基于Java的动态代理实现的。使用步骤:声明拦截器的类:通过实现 Han

2021-08-06 15:41:46 1335

原创 Redis原生SET、SETNX、SETEX方法以及RedisTemplate的方法 + 分布式锁的实现

Redis原生GET/SET方法SET()命令:有两个参数 set(key, value),将字符串值 value 关联到 key ,如果 key 已经持有其他值, SET 就覆写旧值,无视类型SETNX():含义就是SET if Not Exists,有两个参数 setnx(key, value),该方法是原子的,如果key不存在,则设置当前key成功,返回1;如果当前key已经存在,则设置当前key失败,返回0。SETEX()命令:有三个参数 set(key, time, value),在设置的

2021-08-05 18:18:51 12270

原创 Java8之StringJoiner类 按指定分隔符拼接字符串

JAVA8——StringJoiner类在实际开发代码中,我们经常会对多个字符串按指定的分隔符进行拼接,首先想到的是用StringBuilder作字符串拼接,比如: List<String> list = new ArrayList<>(Arrays.asList("aaa","bbb","ccc")); /** 用StringBuilder作字符串拼接 */ StringBuilder sb = new StringBuilder(); sb.append(

2021-08-04 14:06:44 5095

原创 Spring Boot 自定义注解实现AOP切面织入

自定义注解实现AOPAOP简要概述自定义注解annotation配置AOP切面使用AOP简要概述AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。所谓的动态代理就是说AOP框架不会去改动原有代码,而是在内存中临时为方法生成一个AOP对象,这个对象在特定的切点做了增强处理。Spring AOP中的动态代理主要有两种实现方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,

2021-08-01 21:47:56 3436 1

原创 MyBatis插入数据之ON DUPLICATE KEY UPDATE避免唯一键冲突

在创建数据库表的时候,我们可能会对表中的除主键id外的其它单个字段建立唯一索引UNIQUE INDEX,或者是多个字段组合起来的唯一联合索引(比如‘id, uid, brandId, …’,其中id是主键索引,uid建立唯一索引,uid_brandId建立唯一联合索引)。当执行insert操作对表中插入数据时,如果跟表中已存在的唯一索引的数据冲突,则该操作会执行失败,怎么避免这种情况发生呢?正确做法应该是如果发生冲突则不做插入操作转而做更新操作,以下列举两种方法:先做查询判断,再做操作因为唯一索

2021-07-30 14:30:05 4631

原创 java中对两个List集合中的数据取交集、并集、差集方法

public class CollectionsTest {public static void main(String[] args) {List list1 = new ArrayList<>();list1.add(“1”);list1.add(“2”);list1.add(“3”);list1.add(“4”); List<String> list2 = new ArrayList<>(); list2.add("2"); li

2021-07-22 20:14:45 871

原创 Java之HashMap.values()转List时的错误和正确操作

因为项目中需要获取到Map的值的集合,所以调用了HashMap.values()方法转成List,当时是使用了以下代码。(逻辑上这样想应该没问题,但生活总是会是不是给你一点小“”惊喜“”)List<AreaItemOpt> areaItemOpts = (List<AreaItemOpt>) areaItemOptMap.values();return areaItemOpts;怀着喜悦的心情在测试环境中运行之后,它报错了!报错如下:java.lang.ClassCastE

2021-07-20 10:47:00 2692 2

原创 Bean对象的拷贝方法BeanCopier和BeanUtils

1. BeanCopier默认只复制名称和类型相同的字段,对date为空的情况不进行复制。把相同的进行复制,把不同的,也就是需要我们个性化的一些字段,单独出来用set来赋值,这样程序就会很明确,重点也就聚焦在了不同的地方。BeanCopier支持两种方式:一种是不使用Converter的方式,仅对两个bean间属性名和类型完全相同的变量进行拷贝;另一种则引入Converter,可以对某些特定属性值进行特殊操作。 import org.springframework.cglib.beans.Bea

2021-07-05 15:33:27 2132

原创 HTTP客户端连接请求,对接第三方接口

HTTP客户端连接请求1. Http请求概述2. HttpClient3. OKHttp小结HttpClient超时设置:OkHttp超时设置:小结:本篇文章主要介绍使用HttpClient和OKHttp两种方式进行HTTP请求。1. Http请求概述请求方法主要使用HTTP GET 或 POST 方式发送请求,GET方式下请求参数需要包含在请求的URL中,POST方式下请求参数需要包含在请求的Body中。HTTP请求中,常见的Content-Type类型:1、application/x-www

2021-07-05 14:58:15 778

原创 Java8新特性之Stream流详解+案例

Stream是一个流,在java.util.Stream包路径下,主要作用就是对集合数据进行查找过滤等操作,一种高效且易用的数据处理方式流的创建:此处列举3种常用方法//1. 通过 java.util.Collection.stream() 方法List<String> list = Arrays.asList("a", "b", "c");Stream<String> stream = list.stream // 创建并行流Stream<String>

2021-06-11 10:28:17 1992

原创 Java并发以及多线程基础

Java并发以及多线程基础进程与线程创建线程的三种方式:Runnable接口和Callable接口的区别并发中的乐观锁和悲观锁乐观锁:悲观锁:synchronized同步代码块:同步方法:锁的优化ReentrantLock:(可重入锁)AQS:进程与线程进程是操作系统用来资源分配的最小单位,线程是CPU调度执行的最小单位。为什么要有线程?两者区别?因为进程的创建、销毁、切换产生大量的开销,而线程是比进程更小的能独立运行的基本单位,他是进程的一个实体,可以减少程序并发执行时的时间和空间开销,使得操

2021-06-10 17:12:14 92

原创 map的几种常用遍历方式

map的几种常用遍历方式主要分这三类:Set entrySet = map.entrySet();Set keySet = map.keySet();Collection values = map.values();上代码:public class MapTest { public static void main(String[] args) { // 定义一个Map的容器对象 Map<Integer, String > map = new HashMap<&g

2021-06-03 20:27:18 94

转载 Arrays.asList()方法的使用

首先,该方法是将数组转化为list。有以下几点需要注意:(1)该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean),得使用包装类型(2)该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新(3)不支持add和remove方法上代码:Copyimport java.util.Arrays;import java.util.List;abstract public class AsllistTest { public

2021-06-02 10:04:01 848

原创 Mybatis多表关联查询(一对一、一对多)

Mybatis多表关联查询(一对一、一对多)1. 使用resultMap一对一关联查询2. 使用resultMap一对多关联查询resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。单纯地映射不同的字段和属性名,可以看我上一篇文章中的内容。1. 使用resultMap一对一关联查询查询订单以及该订单的用户信息:在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

2021-05-31 20:41:56 3246 2

原创 Mybatis的传参注意点(单参数、多参数、复杂参数)

Mybatis的传参注意点(单参数、多参数、复杂参数)1. 传入参数为List2. 传入多个不同类型参数3. useGeneratedKeys和keyProperty的使用:1. 传入参数为Listmapper接口:List<User> getUserList(List<Long> list);mapper映射文件:List用foreach去遍历如果查询的实体类的参数和数据库中的字段名不一致,要用resultMap进行映射<select id="getUserLi

2021-05-31 15:06:13 723

原创 HashMap和ConcurrentHashMap底层实现原理以及JDK1.7和1.8之间的区别

HashMap原理:HashMap主要由数组和链表组成,他不是线程安全的。核心的点就是put插入数据的过程,get查询数据以及扩容的方式。put元素: 在put插入的时候会根据key的hashcode去做hash运算得到一个index值(利用元素key的哈希值对数组长度-1按位与操作得到,为什么不用取模%运算呢?因为java的%比位运算慢10倍左右),根据index值放入数组的相应位置。每一个节点(Node)都会保存自身的hash、key、value、以及下个节点为什么要有链表: 因为不同的key可

2021-05-10 22:26:51 577

原创 Java常用集合类List、Set、Map概述

Java常用集合类概述Collection接口List(有序存储)ArrayList:基于索引的数据结构,类似动态数组,查询快,效率高,扩容机制每次1.5倍LinkedList:底层是双向链表(带头节点和尾节点),每个节点都与前一个和下一个节点相连接,增删快,查询稍慢Vector:底层和ArrayList一样也是数组,内部使用synchronized方法保证线程安全,性能较差,扩容机制每次2倍Stack:JUC下有一个CopyOnWriteArrayList,是线程安全的a

2021-05-10 22:05:19 172

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除