java
卖栗
这个作者很懒,什么都没留下…
展开
-
Validation数据校验注解
原创 2022-04-20 14:19:52 · 299 阅读 · 0 评论 -
如何使用@AllArgsConstructor和final 代替 @Autowired
@AllArgsConstructor和final 代替 @AutowiredSpringboot官方建议使用final来修饰成员变量,然后通过构造方法来进行注入原因:final修饰的成员变量是不能够被修改的,反射那就没办法了。spring代替 @Autowired(lombok相关注解) (前提:使用lombok)@Slf4j@RestController//生成一个包含过所有字段的构造方法//@AllArgsConstructor//会将类的每一个final字段或者non-null字段生原创 2022-03-28 21:43:29 · 3862 阅读 · 1 评论 -
使用Apache commons-text进行占位符替换
Apache commons-lang3包中的 StrSubstitutor可以将字符串中的变量替换为指定的值从commons-lang3-3.6.jar版本起 org.apache.commons.lang3.text.StrSubstitutor已经过时,文档上建议用commons-text的org.apache.commons.text.StrSubstitutor代替。先引入 <dependency> <groupId>org.ap转载 2022-03-28 11:46:36 · 3360 阅读 · 0 评论 -
Java内部类
一、什么是内部类?可以将一个类的定义放在里另一个类的内部,这就是内部类。广义上我们将内部类分为四种:成员内部类、静态内部类、局部(方法)内部类、匿名内部类。/*** 我是一个外部类(外部是相对内部而言)*/public class Outer{ /** * 我是一个内部类 */ class Inner{ //... }}二、为什么要用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影转载 2022-03-20 17:16:09 · 236 阅读 · 0 评论 -
泛型体系知识
一、什么是泛型1.背景:JAVA推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合的过程中,需要程序员明确知道存储每个元素的数据类型,否则很容易引发ClassCastException异常2.概念:Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许我们在编译时检测到非法的类型数据结构。泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数。3.好处:类型安全消除了强制转载 2022-03-19 23:36:27 · 128 阅读 · 0 评论 -
plantuml使用
plantuml的安装1.idea安装plantuml的插件2.安装graphviz,安装路径默认在c盘。画er图file->new ->classdemo:@startuml'https://plantuml.com/use-case-diagrampackage 订单{ entity (totalorder) { 订单总表 -- # string id 主键 stri原创 2022-02-25 11:02:08 · 2324 阅读 · 0 评论 -
hutool的使用总结
一.计时器TimeInterval的使用TimeInterval timer = DateUtil.timer();......代码执行log.info("执行耗时:{}ms",timer.interval());timer.intervalRestart();// 重置log.info("耗时:{}ms",timer.interval());TimeInterval的其他方法:package cn.hutool.core.date;import cn.hutool.core.util.原创 2022-02-17 14:45:04 · 3217 阅读 · 0 评论 -
Optional 的使用
一.简介Optional 是一个对象容器,具有以下两个特点:提示用户要注意该对象有可能为null简化if else代码二. 方法介绍创建:Optional.empty(): 创建一个空的 Optional 实例Optional.of(T t):创建一个 Optional 实例,当 t为null时抛出异常Optional.ofNullable(T t):创建一个 Optional 实例,但当 t为null时不会抛出异常,而是返回一个空的实例获取:get():获取optional实例转载 2021-11-25 18:11:15 · 409 阅读 · 0 评论 -
WebClient网络请求工具类
网络请求工具类:package com.xx.xx.xx.helper;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.ObjectMapper;import io.netty.channel.ChannelOption;import io.netty.handler.timeout.ReadTimeoutHandler;import org.springfra原创 2021-11-04 20:28:31 · 828 阅读 · 0 评论 -
注解切面打印日志
SysLog定义日志注解:/** * 系统日志注解 * * @author admin * @since 2020-09-01 10:25 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface SysLog {}定义切面:/** * * 切面 * @author admin * @since 2020-09-01 10:25 */@S原创 2021-11-02 14:53:11 · 201 阅读 · 0 评论 -
java自带延时队列
创建消息体对象import java.util.Date;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;/** * 延时任务消息体 * * @author * @since 2021-07-15 17:27 */public class DelayTask implements Delayed { final private String totalOrderId;原创 2021-07-23 17:49:21 · 234 阅读 · 0 评论 -
函数式接口
函数式接口:有且只有一个方法抽象方法的接口,可以有其他的方法.格式;intface in{//有且只有一个抽象方法//可以有其它默认方法,静态方法,私有方法…}@FunctionalInterfaceinterface ai {public void show();}自己定义函数式接口:demo1:demo2:定义无参数无返回接口方法定义一个函数式接口@FunctionalInterfacepublic interface LockExecutor { /**原创 2021-04-16 19:47:29 · 230 阅读 · 0 评论 -
获取自定义注解
自定义注解:@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ToJsonField { /** * key名 */ String name() default "";}注解使用:@Datapublic class LeaveFormReqDTO { /** * 泛微用户id */ @Require原创 2021-03-02 20:09:53 · 374 阅读 · 0 评论 -
Java8中的foreach跳出循环break/return
java8中跳出循环不能使用break?通过测试发现:对于java8中的特殊写法lamada表达式中,不能使用break,会提示错误;java8中使用return,会跳出当前循环,继续下一次循环,作用类似continue;java8中使用foreach,但是不是lamada表达式写法,可以正常使用break或者return,可以直接跳出循环.public class TestForEachJava8 { public static void main(String[] args) {转载 2020-12-18 21:15:02 · 415 阅读 · 1 评论 -
将list分成多个list集合
1:按指定大小,分隔集合,将集合按规定个数分为n个部分/** * 将集合按len数量分成若干个list * @param list * @param len 每个集合的数量 * @return */ public static List<List<TotalorderDO>> splitList(List<TotalorderDO> list, int len) { if (list == nul转载 2020-11-30 11:15:22 · 10098 阅读 · 0 评论 -
Java中的BigDecimal,你真的会用吗?
一、BigDecimal概述Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDeci转载 2020-11-08 15:43:27 · 271 阅读 · 0 评论 -
程序中新建表
有时候我们单表数据量大,需要按去生成每个月的统计表,这时就需要程序自动生成数据库表判断数据库中是否存在表 <select id="existTable" parameterType="java.lang.String" resultType="java.lang.Integer"> select count(*) from information_schema.TABLES where LCASE(table_name)=#{tableName}原创 2020-09-20 22:03:49 · 141 阅读 · 0 评论 -
java8的时间处理类
从Java 8之后,Java里面添加了许多的新特性,其中一个最常见也是最实用的便是日期处理的类——LocalDate。新增的日期jar主要有三种:java.time.LocalDate ->只对年月日做出处理java.time.LocalTime ->只对时分秒纳秒做出处理java.time.LocalDateTime ->同时可以处理年月日和时分秒LocalDate基本方法LocalDate today = LocalDate.now() //获取当前日期 年月日Local原创 2020-09-18 17:37:30 · 886 阅读 · 0 评论 -
SpringBoot2.x配置logback
由于SpringBoot默认整合的就是logback,所以相关的依赖是不需要引入的。spring-boot-starter包下已经把相关依赖引入好了。所以我们只需要加入logback相关的配置就可以了。在application.yml文件中配置;logging: level: root: info config: classpath:logback.xml在resources中新建文件logback.xml<?xml version="1.0" encoding="UTF-8原创 2020-08-12 22:16:39 · 457 阅读 · 0 评论 -
springboot中@Async的使用
@async注解的使用springboot中的启动类中需要添加注解@EnableAsync来开启异步调用,在需要异步执行的方法上添加@Async(“taskExecutor”)注解进行标注启动类:@EnableScheduling@EnableAsync@SpringBootApplication@ComponentScan("com.swj")public class WebApiApplication { public static void main(String[] args转载 2020-08-12 15:23:43 · 722 阅读 · 0 评论 -
集合的remove()和removeAll()的区别
集合中:List,Setremove():删除指定的元素removeAll():删除特定元素内包含的元素set1.remove(“语文”);set1.removeAll(set2);原创 2020-08-12 13:42:11 · 2910 阅读 · 0 评论 -
@DateTimeFormat和@JsonFormat
@JsonFormat:将后台返回给接口的Date属性值时间格式化@DateTimeFormat:将前端传过来的时间字符串格式化用Date接受@DateTimeFormat无效:@DateTimeFormat只会在类似@RequestParam的请求参数(url拼接的参数才生效,如果是放到RequestBody中的form-data也是无效的)上生效,如果@DateTimeFormat放到@RequestBody下是无效的在@RequestBody中则可以使用**@JsonFormat把传给后台的原创 2020-07-02 20:01:50 · 277 阅读 · 0 评论 -
JAVA 接口返回树形结构工具类
前后端分离,接口返回树形结构给前端DTO:import lombok.Data;import java.util.List;/** * @Description dto目前只有这几个子段,具体看业务 * @Author jbh * @Date: 2020/6/28 14:27 * @Version 1.0 */@Datapublic class MenuTreeDto { private String id; private String parentI原创 2020-06-28 16:32:06 · 1109 阅读 · 2 评论 -
自定义注解-aop实现日志记录
关于注解,平时接触的可不少,像是 @Controller、@Service、@Autowried 等等,不知道你是否有过这种疑惑,使用 @Service 注解的类成为我们的业务类,使用 @Controller 注解的类就成了请求的控制器,使用 @Autowried 注解的类就会帮我们实现自动注入…以前,我们只知道使用注解,今天我们要手写一个注解。一、以日志记录为例在没有使用注解实现记录日志之前,我们往往自己去调用日志记录的 Service,然后写入数据库表。今天我们将从方法上添加自定义注解实现日志自转载 2020-06-28 10:10:44 · 701 阅读 · 0 评论 -
MapStruct优雅的对象转换
按照日常开发习惯,对于不同领域层使用不同JavaBean对象传输数据,避免相互影响,因此基于数据库实体对象User衍生出比如UserDto、UserVo等对象,于是在不同层之间进行数据传输时,不可避免地需要将这些对象进行互相转换操作。常见的转换方式有:调用getter/setter方法进行属性赋值调用BeanUtil.copyPropertie进行反射属性赋值第一种方式不必说,属性多了就需要写一大坨getter/setter代码。第二种方式比第一种方式要简便很多,但是坑巨多,比如sources与ta转载 2020-06-22 15:46:06 · 2089 阅读 · 1 评论 -
Collections对list集合的sort()
Collections与Collection的区别:Collection是集合体系的最顶层,包含了集合体系的共性Collections是一个工具类,方法都是用于操作CollectionCollections.sort();对于list里面的是基本数据类型,默认是正序的,以Integer为例,如果需要降序,可以使用集合正序之后集合反转,或者以下方法可以看到,默认的排序是正序,那么如何实现逆序呢,这就要使用第二种方式了,即通过实现Comparator接口的compare方法来完成自定义排序,代码如下:原创 2020-06-18 10:18:00 · 167 阅读 · 0 评论 -
springboot中返回json串,jackson的注解
一:当某个字段为空不返回,不为空时有返回1.局部配置:@JsonInclude(JsonInclude.Include.NON_NULL)我们只需要在类上加上该注解 该类为 null 的对象就不会被返回给前端2.全局配置spring: jackson: default-property-inclusion: non_null二:返回时间处理1.局部配置/更新时间 用户可以点击更新,保存最新更新的时间。/@JsonFormat(pattern=“yyyy-MM-dd HH:m原创 2020-06-11 18:53:41 · 623 阅读 · 0 评论 -
springboot 中CommandLineRunner接口的作用
平常开发中有可能需要实现在项目启动后执行的功能,SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的代码放在实现的run方法中。先看CommandLineRunner接口的API:import org.springframework.core.annotation.Order;public interface CommandLineRunner { /** * Callback used to run the be转载 2020-06-09 19:18:34 · 255 阅读 · 0 评论 -
tkmybatis VS mybatisplus
本文章向大家介绍tkmybatis VS mybatisplus,主要包括tkmybatis VS mybatisplus使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。文章目录TkMybatis Vs MybatisPlus1.基础CRUD BaseMapper2.代码生成器3. 全局主键 Sequence主键4. 热加载5. 分页Mybatis-PlusTk.Mybatis6. 额外功能Mybatis-PlusTk.MybatisT原创 2020-06-09 15:58:38 · 4985 阅读 · 0 评论 -
@Valid介绍及相关注解
主要用途主要用于表单验证,减轻了代码量相关依赖implementation 'org.springframework.boot:spring-boot-starter-web'在Springboot启动器的web包下包含了javax.validation.Valid所以无需添加多余的依赖Valid相关注解的使用方式1.在相关的实体类的相关字段添加用于充当验证条件的注解示例:字段:(ps:这里只是为了演示,大家要注意命名规范) @NotNull(message = "用户名不能为空")转载 2020-06-08 18:25:34 · 770 阅读 · 0 评论 -
CAS算法的理解
CAS:Compare and Swap,即比较再替换感觉就是一种乐观锁的思路:jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁对CAS的理解,CAS是一种无锁算法。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当要将v修改成B的时候,需要先将v和A进行比较,如果相等,才操作,如果不等,则不进行操作。在原子类变量中,如java.util.concurrent.atomic中的AtomicXX原创 2020-05-19 16:52:34 · 375 阅读 · 0 评论 -
volatile和synchronized的区别
volatile与可见性:先说一下可见性,所谓的可见性就是指可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。因为CPU内存屏障会把之前的写入值都刷新到缓存,所以其他线程能看到新修改的值olatile和synchronized的区别:1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。2.volatile仅能使用原创 2020-05-19 16:49:05 · 240 阅读 · 0 评论 -
syschronized去锁对象底层monitor的原理
每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下:1、如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者。2、如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1.重入锁3.如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor的所有原创 2020-05-19 16:34:06 · 218 阅读 · 0 评论 -
springboot2.x+Spring-Security+JWT
springboot2.x+Spring-Security+JWT的整合jwt(json web token)jwt官网:https://jwt.io/使用的是HS256算法一个JWT由三个部分组成:header,payload,signature。分别保存了不同的信息header部分由以下的json结构生成:typ用来标识整个token是一个jwt字符串,alg代表签名和摘要算法,一般签发JWT的时候,只要typ和alg就够了,生成方式是将header部分的json字符串经过Base64Ur原创 2020-05-19 12:20:04 · 611 阅读 · 0 评论 -
Spring的注解@RestControllerAdvice,抛出异常后统一返回处理
看@RestControllerAdvice源码可以知道,它就是@ControllerAdvice和@ResponseBody的合并。此注解通过对异常的拦截实现的统一异常返回处理demo:创建一个自定义BaseException 异常,可以根据需要自定义各种异常package com.ruoyi.common.exception;import com.ruoyi.common.utils.MessageUtils;import com.ruoyi.common.utils.StringUtils;原创 2020-05-19 09:27:36 · 1016 阅读 · 0 评论 -
mybatis中mapper xml常用标签
一、SQL语句标签:1、<!--查询语句--> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select </select> 2、<!--插入语句--> <insert id="insert" parameterType="pojo.OrderTable" > i转载 2020-05-18 10:47:44 · 994 阅读 · 0 评论 -
PageHelper的源码方法
PageHelper的源码方法/* * The MIT License (MIT) * * Copyright (c) 2014 abel533@gmail.com * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in原创 2020-05-17 19:12:11 · 207 阅读 · 0 评论 -
Java8的stream流式编程
stream流的使用:一个 Stream 只可以使用一次写在前面:在少低数据量的处理场景中(size<=1000),stream 的处理效率是不如传统的 iterator 外部迭代器处理速度快的,但是实际上这些处理任务本身运行时间都低于毫秒,这点效率的差距对普通业务几乎没有影响,反而 stream 可以使得代码更加简洁;在大数据量(szie>10000)时,stream 的处理效率会高于 iterator,特别是使用了并行流,在cpu恰好将线程分配到多个核心的条件下(当然paral原创 2020-05-16 17:23:39 · 1003 阅读 · 0 评论 -
Java常用工具类使用
BeanMapper去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.// An highlighted blockvar foo = 'bar';生成一个适合你的列表项目项目项目项目1项目2项目3 计划任务 完成任务创建一个表格一个简单的表格是这么创建的:项目Value电脑$1600手机$12导管$1设定内容居中、居左、居右使用:---------:居中使用:---------转载 2020-05-16 14:45:40 · 488 阅读 · 0 评论