- 博客(23)
- 问答 (3)
- 收藏
- 关注
原创 Mybatis/Mybatis-plus多表关联分页数目偏小问题
A表:id,a_nameB表:id,b_name ,aid(外键,关联A表id)若要分页查询A表的a_name,同时要关联查询B表的b_name,由于A表的一列可能对应多个B表记录,所以若将sql写成A表和B表等值连接,并用collection标签将b_name封装进一个list,将会出现重复列如下例:aida_nameb_name1a1b11a1b22a2b33a3b4若此时对结果分页,每页4条记录,实际查询出来只会有3条记录解决方
2020-09-18 16:40:39 693
原创 token防止重复提交
客户端获取页面时请求一次获取token的接口,服务器端生成随机token,并将其存放在session或者redis中,并将其返回给客户端客户端请求放重复提交接口时要带上此token(一般是存放至请求头中),服务器端将检验此token,若token能够在session或redis中查找到,则删除此token并放行接口,若没能查找到,说明不是第一次提交,则拒绝放行使用spring时可以利用AOP完成防重流程图:...
2020-09-14 10:00:33 1861 1
原创 操作系统死锁与饥饿超细致思维导图
高清无水印原文件下载:链接:https://pan.baidu.com/s/1xrJgW0IeEyuyjifjCgwFHQ提取码:3el5注意该文件需要使用MindMaster软件打开
2020-07-12 20:09:59 474
原创 docker常用命令举例演示
镜像相关操作启动docker(CentOS 7.x版本): systemctl start docker设置开机启动docker(CentOS 7.x版本): systemctl enable docker搜索镜像:docker search 软件名 如:搜索的结果如下:下载镜像:docker pull 镜像名:tag 这里的镜像名就是上图中NAME那一栏的名称,tag是版本号,也可直接使用latest下载最新版本,默认tag就是latest如:显示本机镜像: do
2020-07-02 11:15:18 192
原创 Spring Boot图解静态资源映射规则
通过jar包引入静态资源点击 webJars官网,在里面可以找到绝大多数的静态资源的jar包,并可通过maven引入项目引入项目后,Spring Boot对此种方式添加了默认资源映射方式。路径 /webjars/** 会被映射到 classpath:/META-INF/resources/webjars/在上图中,我可以通过路径 /webjars/bootstrap/4.5.0/css/bootstrap.css访问到我们上图所导入的bootstrap包中的bootstrap.css对于我们
2020-06-30 14:45:15 166
原创 Spring Boot默认配置文件位置及优先级
默认情况下Spring Boot配置文件位置按优先级由高到低排序如下:项目根路径下的config文件夹项目根路径下类路径下的config文件夹类路径下优先级高的配置会覆盖低优先级的配置
2020-06-28 15:20:13 172
原创 Spring Boot yaml和properties格式的多环境配置
前言一般软件在不同环境下需要有不同的配置,Spring Boot支持为不同环境编写不同的配置文件正文Spring Boot支持两种格式的配置文件,分别命名为application.properties,application.yml 。这两种配置文件可同时存在,同时生效,但前者的优先级更高对于properties格式的配置文件Spring Boot对命名格式有要求,文件名必须是application-环境标识名,其中标识名可以任起如:测试环境配置文件:application-test.prop
2020-06-28 14:16:57 205
原创 yaml语法格式及@ConfigurationProperties
前言yaml是一种以数据为中心的文件格式。相比于传统的json、xml格式的文件,它能够以更简洁的语法来记录数据。基本用法yaml文件最基本的格式是键值对,即key: value。注意冒号和value直接必须有一个空格隔开。yaml的键值对是可以嵌套的,即value也可以是一个键值对用法展示最简单的键值对在yaml中普通字符串无需使用引号包裹。如果使用""包裹字符串,则串内支持转义;而使用’'包裹字符串,则不支持转义,所有字符将被当作普通字符userName: root 嵌套的
2020-06-28 11:24:27 961
转载 spring容器ApplicationContext初始化源码解析
测试用例:public class BaseTest { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("config.xml"); TestBean testBean = context.getBean("testBean", TestBean.class); t
2020-06-27 16:44:23 266
原创 spring指定环境以及@Profile用法简介
软件开发一般有多个环境,比如测试环境,开发环境,生产环境。spring运行根据不同环境注册不同组件。以指定环境启动容器当不需要指定环境时,我们仅需调用AnnotationConfigApplicationContext的有参构造器(传入配置类的class)即可启动容器。但是当我们需要设置环境时,便需要使用如下方法启动容器:AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
2020-06-22 18:05:39 438
原创 spring自动装配之@Autowired
对于自动装配,最为常用的注解就是@Autowired此注解可标注在字段、方法、构造器、参数上。spring创建组件对象并注入容器时,一般调用组件的无参构造方法,当使用@Autowired注解标注有参构造器时,容器将调用该有参构造器。不能再同一个组件的多个构造器上同时标注@Autowired注解,这样spring将不知道该调用哪个构造器,会抛出异常。将@Autowired注解标注再方法上,该方法的参数将从容器中获取,该方法将会在组件被创建后,初始化方法调用之前(包括后置处理器的初始化前置方法)被调用@
2020-06-22 17:38:43 215
原创 spring属性赋值相关注解
我们可以直接使用@Value注解,标注在组件的字段上,为其赋值@Value注解仅有一个属性:String value();可以传入SpEl表达式,如@Value("#{18-2}")也可以从properties文件中读出值需要注意的是,如果我们需要从配置文件中读出值,需要先在配置类上使用@PropertySource注解指定配置文件位置如@PropertySource("classpath:/test.properties") //引入类路径下的test.properties配置文件此外,该注解
2020-06-22 11:16:30 198
原创 spring组件生命周期
指定组件初始化和销毁方法1、 通过@Bean指定可以通过使用@Bean的initMethod和destroyMethod属性来指定初始化和销毁方法。通常情况下,这些方法就在对应组件内部,且无参、可抛异常initMethod属性注释:Not commonly used, given that the method may be called programmatically directly within the body of a Bean-annotated method.官方文档注释提示该方
2020-06-21 19:47:39 257
原创 spring组件注册系列注解源码详解
前言spring注解开发的组件注册可以完全使用注解来做到,舍弃了传统的xml配置文件,取而代之的是使用配置类来设置配置信息@Configuration此注解标注在类上,表名该类为配置类,配置类的作用和配置文件一样。@Bean该注解可标注在方法上,容器初始化时将调用该方法,并将该方法的返回值注入到容器中,组件的名字默认为方法名。如果显式的指定了组件名称,方法名将被忽略`@AliasFor("name") String[] value() default {};`用于设置要被注入的组件
2020-06-21 13:30:55 179
原创 java泛型以及类型擦除机制
前言泛型程序设计大大的提高了代码的重用程度。它通过引入类型变量,来控制整个类定义中方法的返回类型,参数类型以及类字段和局部变量的类型。习惯上,用大写字母表示类型变量。java库使用E表示集合元素类型,K和V分别表示表的键和值。T,S表示任何类型泛型的形式泛型类:示例:public class Pair<T> { private T first; private T second; //...省略getter、setter方法}可以使用具体类型来实例化泛型
2020-06-17 10:46:50 360
原创 Java内部类举例浅析
前言内部类即为定义在一个类内部的类,它的基本特点是可以访问外部内的数据。内部类主要有以下几种形式:内部类静态内部类局部内部类匿名内部类内部类这里指的内部类是定义在类内部但不是在类方法中的类,如:class Outer{ private int a; public class Inner{ private int i=a; }}从上例中我们看到,内部类Inner可以访问外部类Outer的字段a,那么这种机制是如何实现的呢?原来,编译器会为内部类增加一个字段,用来存储外
2020-06-14 18:45:08 243
原创 由浅入深学习lambda表达式
前言lambda表达式采用的是一种简洁的语法,来传递代码块。使得java能够支持函数式编程。问题引入我们先来看一个简单的java API:Arrays.sort(T[] a, Comparator<? super T> c)其中,a是待排序数组,c是一个实现了Comparator接口的比较器对象。在没有lambda表达式之前,我们需要自己创建一个类并实现Comparator接口的compare方法,并在调用Arrays.sort时传入我们所创建的这个比较器的对象。如:class
2020-06-13 20:29:37 298
原创 java深浅克隆详解以及奇怪的标记接口——Cloneable
深克隆与浅克隆一个对象的浅克隆是指,创建一个新对象,这个对象拥有原对象所有字段的一个副本。这样的浅克隆往往会造成一些问题。比如,当一个对象的某个字段,是另外一个可变对象的引用时,浅克隆仅仅为克隆对象复制了该子对象的引用,也就是说,克隆对象与原对象共享这个子对象。如上图所示,初始对象origin和克隆对象copy的hireDay字段指向同一个Date对象。而对于深拷贝而言,要求一并深拷贝所有引用类型的字段,确保克隆对象和原对象不共享任何字段。这个过程可能是递归的,因为子对象也有可能拥有引用类型的字段。
2020-06-12 23:34:45 985 1
原创 java反射的基本用法
能够分析类能力的程序称为反射,反射机制可以用来:在运行时分析类实现像C++中的函数指针功能在程序运行期间,java运行时系统为每一个类型(对象,基本类型,甚至是void)提供一个特殊的java类来保存这些类型的各种信息,这个类叫做Class反射机制便是基于这个特殊的类——Class获取一个类型的Class对象的方式有以下三种:除基本类型和void外,所有类型均继承自Object类,该类提供了一个getClass方法,该方法将返回一个Class类型的实例在Class类中,有一个静态方法fo
2020-06-11 15:18:19 217 1
原创 java自动装拆箱易于忽视的细节
在java中,除去基本类型外,所有的类型都是对象,包括对象数组以及基本类型数组。在某些情况下,我们需要将基本类型转化为对象。java为基本类型提供了包装器类:Integer、Long、Float、Short、Double、Byte、Character、Boolean。自动装箱:编译器自动将基本类型转化为其对应的包装类自动拆箱:编译器自动将包装类转化为其对应的基本类型自动装拆箱的操作是由编译器而非虚拟机完成的通常情况下:Integer a=1000;Integer b=1000;if(a==b
2020-06-10 20:10:06 192 1
原创 java权限修饰符( protected ):什么叫对包和子类可见
protected修饰符的官方解释是:对本包,以及所有子类可见这读起来不免让人疑惑。经过我的验证,可以如此理解:对本包可见:所有调用protected成员(字段或方法)的地方,只要是和定义该成员的类处于同一个包类,均是正确的示例1:package p1;public class Father { protected void f(){ System.out.println("f方法执行了"); }}package p1;public class Mai
2020-06-10 12:25:56 3077 3
原创 java字符串详解——码点与代码单元
从概念上讲,java字符串就是Unicode字符序列。例如字符串"java\u2122"由5个Unicode字符j,a,v,a和™组成。java没有内置的字符串类型,而是在标准java类库中提供了一个预定义类,叫做String。每个由""括起来的字符串都是String类的实例。拼接字符串java允许使用+号拼接两个字符串,当一个字符串和一个非字符串进行拼接市,后者会转换为字符串,如果后者是对象,则会调用它的toString方法,这种情况常出现在打印语句中如需要将多个字符串以特定分隔符连接起来,可使用
2020-06-07 19:16:39 804 1
原创 java的基本数据类型详解
整型类型大小取值范围int4字节[-2^31, 2^31-1]short2字节[-32 768 ,32 767]long8字节[-9 223 372 036 854 775, 9 223 372 036 854 775 807]byte1字节[-128,127]与c++/c程序不同的是,java的整型大小与运行java的机器无关,此外,java也没有任何无符号形式的int、long、short、或byte类型浮点类型类型大小取值
2020-06-07 14:33:32 233 1
空空如也
chrome浏览器,vant组件库的list无限刷新问ti
2020-10-02
jquery克隆的节点无法设置属性值
2020-04-03
网上商城列表页,如何展示后端任意数量的商品信息
2020-04-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人