自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 springboot 参数校验使用示例

springboot参数校验基本类型校验,对象类型校验,嵌套校验,数组校验,集合校验

2022-02-16 15:27:30 246

原创 springboot controller参数注入使用示例

springboot 参数注入方式基本类型注入,对象类型注入,基本类型数组,基本类型集合,对象类型数组,对象类型集合

2022-02-16 15:26:03 1929

原创 axios 发送请求时携带参数的不同写法

发送get请求SpringBoot后端接口无论是使用类把请求参数封装起来还是使用多个基本类型去接收,axios发送请求时都值需要按照如下方法传参即可:this.axios.get(baseUrl, { params: /*参数对象如 {id:useId} */}).then(resp => { //do something})发送post与get请求不同,如果SpringBoot使用类把请求参数封装起来去接收请求参数,传参方法如下this.axios.post(.

2021-09-26 14:13:43 1602 1

原创 打包包含多个子模块的springboot的方法

打包包含多个子模块的springboot的方法在最外层的父模块的pom文件中需要加入<packaging>pom</packaging>在有main方法的模块的pom文件中需要添加spring-boot-maven-plugin插件。在实际项目中,一般会有xxx-common模块,用于抽象通用类,提供工具类等,这种模块并没有main方法,一般是被实际的业务模块所依赖,在这种没有main方法的模块中不能添加spring-boot-maven-plugin插件,否则打包时会报错。

2021-09-14 17:57:34 909

原创 跨域情况下SameSite属性对Cookie的作用

跨域情况下SameSite属性对Cookie的作用前提假设响应的情况前提假设假设前端页面的运行地址为 http://localhost:8848/demo-cors/index.html,后端接口的运行地址为 http://127.0.0.1:10071/domain-one/method-a。注意,对 cookie 来说, domain=127.0.0.1 和 domain=localhost 是不同的,可以认为是两个域名。响应的情况后端设置cookie时如果没有显式的指定domain和pa

2021-09-12 22:35:38 1036

原创 跨域情况下,如何正确传输Cookie

跨域情况下,如何正确传输Cookie测试环境Ajax配置后端配置踩到的坑参考测试环境前端:jQuery-3.6.0 Chrome-93.0.4577.63后端:SpringBoot 2.4.10Ajax配置发送请求时需要把withCredentials设置为truejQuery的写法$.ajax({ type: '...', url: '...', xhrFields: { withCredentials: true }, success: function(a, b,

2021-09-12 12:32:23 1125

原创 为什么ThreadLocalMap中把ThreadLocal对象存储为Key时使用的是弱引用

为什么ThreadLocalMap中把ThreadLocal对象存储为Key时使用的是弱引用​ 一般来说使用ThreadLocal时会有两个引用指向ThreadLocal对象,一个是创建ThreadLocal对象时的显式的引用(下文称为显式引用),还有一个就是ThreadLocalMap对ThreadLocal对象的弱引用,当我们不再使用ThreadLocal时,显式引用不再指向ThreadLocal对象。这时只有ThreadLocalMap对ThreadLocal对象的弱引用存在。假设ThreadLo

2021-06-14 23:33:46 1883 3

原创 RabbitMQ保证消息发送并被正确处理的几种方式

发送端同步确认机制:waitForConfirms()函数可以确认一条消息或多条消息是否发送(只关心发送给exchange)成功//开启发送端确认机制channel.confirmSelect();//回调函数同步确认消息是否成功发送给exchangeif (channel.waitForConfirms()) { LOG.info("message send");} else { LOG.debug("message error");}发送端异步确认机制:发送端会另起.

2021-03-11 17:25:22 337 3

原创 IDEA 常用快捷键

ctrl+F:本页面搜索ctrl+R:本页面批量修改单词双击shift:全局搜索alt+insert:生成geter、setter、constructorctrl+alt+V或者alt+enter:生成变量ctrl+P:查看方法所需要的参数ctrl+Q:查看类或方法的详细信息ctrl+B:跳转到方法被调用的地方ctrl+alt+H:查看方法的调用链关系alt+7或者ctrl+f12:查看类有哪些方法ctrl+alt+shift+U或者CTRL+alt+H或CTRL+B:查看继承结构图c

2021-03-09 20:14:03 139

原创 Linux命令之uniq

uniq [OPTION]... [INPUT [OUTPUT]]把相邻重复的行归为一行输出(原文件不变)uniq filename统计每行相邻重复的次数输出uniq -c filename

2020-12-14 22:38:01 113

原创 Linux命令之wc

wc [OPTION]... [FILE]...wc [OPTION]... --files0-from=F统计文件内容打印 文件的行数,单词数,字节数,文件名wc filename参数有 -l -w -c -m,分别统计行数,单词数,字节数,字符数

2020-12-14 22:30:32 102

原创 Linux命令之sort

命令sort [OPTION]... [FILE]...sort [OPTION]... --files0-from=F将文件中的行排序后输出(原文件不变)sort filename将文件内容排序后输出到新的文件sort -o dest_filename source_filename将文件内容倒序排序输出(原文件不变)sort -r filename将文件内容随机排序输出(原文件不变)sort -R filename把文件中的数字当作是数值而不是字符串.

2020-12-14 22:24:50 150

原创 Linux命令之grep

命令如下:grep [OPTIONS] PATTERN [FILE...]使用示例在名为myfile的文件中查找出path出现的行grep path myfile在名为myfile的文件中查找出path出现的行,忽略大小写grep -i path myfile在名为myfolder的目录中中查找出文件中包含path出现的行grep -r path myfolder在名为myfile的文件中使用正则表达式查找被表达式所匹配的字符串出现的行grep -E "正.

2020-12-14 22:11:00 153

原创 并发队列小结

ConcurrentlinkedQueue是非阻塞队列,使用内部类Node封装任务,组成单向链表,使用CAS保证出入队的线程安全性ArrayBlockingQueue,该队列是基于数组的有界队列,实例化时必须指定容量,使用ReentrantLock保证线程安全,构造函数的第二个参数可以指定是否公平newFixedThreadPool中使用的LinkedBlockingQueue,该队列使用内部类Node封装任务,由Node组成双向链表,不提供初始化容量的话默认容量是Integer.MAX_VALUE,.

2020-11-06 12:00:07 95 1

原创 SpringBoot2.3.0使用@Valid级联数据验证失败

引用类型需要显式初始化才能进行级联数据校验@Data@Component@ConfigurationProperties("acme")@Validatedpublic class OwnerProperties { @NotNull //javax.validation.constraints提供 private String firstName; @Max(35) private int age; @Email private Strin

2020-10-20 21:28:47 712 1

原创 springboot2.3.0添加数据验证jar包后项目启动失败

不要添加下面这个jar包<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.2.0.Final</version></dependency>添加下面这个starter <dependency>

2020-10-20 21:04:23 226

原创 在IDEA中开启springboot热部署

在pom.xml文件中添加如下依赖:Spring Boot包含一组额外的工具,这些工具可以使应用程序开发体验更加愉快。 spring-boot-devtools模块可以包含在任何项目中,以提供开发时所需要的功能。如果要开启devtools支持,请将模块依赖项添加到您的构建中,如以下Maven清单所示:<dependencies> <dependency> <groupId>org.springframework.boot</group

2020-10-19 22:41:57 220

原创 Bean的生命周期小结

实例化BeanFactoryPostProcessor,执行BeanFactoryPostProcessor.postProcessBeanFactory()作用是:在bean实例创建前,可以获取定义bean的元数据,从而覆盖或者添加bean的属性在bean对象的构造函数调用前调用InstantiationAwareBeanPostProcess.postProcessBeforeInstantiation()...

2020-10-15 22:05:33 105

原创 @Autowired详解与注意事项

@Autowired注意事项:如果容器中存在一个bean,这个bean的类型与id与被标注@Autowired的属性或者方法参数的类型与名称相同,那么此时的@Autowired相当于@Autowired@Qualifier("属性名")例如存在一个接口TestInterface,有两个实现类分别是TestClass1和TestClass2都在spring容器中,此时有一个SomeClass类需要注入一个TestInterface属性,代码如下:@Component@Slf4jpubl

2020-10-13 21:39:14 8395

原创 配置Bean的初始化与销毁方法 与init前后的处理

普通Java程序需要使用((AbstractApplicationContext)context).close();显式指定关闭spring容器,destory方法才会运行普通Bean对象通过init-method和destroy-method指定初始化与销毁方法public class Student implements Serializable { //...... public void init(){ log.debug("init..."); }

2020-10-13 17:12:31 317

原创 从spring容器中获取一个类,如果这个类实现了一个接口并且该类存在一个AOP的切入点方法,那么通过`getBean()`获取到的bean类型只能是这个类的接口类型,不能是具体实现。

从spring容器中获取一个类,如果这个类实现了一个接口并且该类存在一个AOP的切入点方法,那么通过getBean()获取到的bean类型只能是这个类的接口类型,不能是具体实现。猜测是因为在spring容器初始化的时候,对于容器内有切入点方法的bean,会通过JDK的动态代理生成一个代理对象,当获取这个bean的时候获取的是这个bean的代理对象,而不是bean对象本身,并且根据JDK的动态代理规则,这个代理对象也就是原本bean对象的接口类型,所以通过getBean()获取到的bean类型只能是这个接口

2020-10-13 11:24:31 764 2

原创 spring 整合 mybatis 三种方法

第一种:需要另外写dao层继承SqlSessionDaoSupport抽象类,使用super.getSqlSession()获取SqlSession对象后再使用mapper接口,service层使用的是dao层缺点是需要另外实现dao层public class MyBatisCardDao extends SqlSessionDaoSupport{ public Card getCardByStudentId(String id) { SqlSession sqlSes.

2020-10-11 17:26:44 139

原创 spring整合普通Servlet web项目 在web.xml文件中配置spring容器启动

web.xml文件中配置如下:可以通过<param-value>classpath:application.xml</param-value>显式指定spring配置文件的位置;如果不指定的话,spring的配置文件名必须是applicationContext.xml,且必须放在WEB-INF下<param-value>中可以配置多个配置文件,每个配置文件路径使用,分开,也可以使用*通配符对相同前缀或者相同后缀的xml配置文件进行加载<!DOCTYPE

2020-10-11 13:32:58 295 1

原创 spring 基于注解实现aop详细实现代码

需要的包:没有aspectjrt的话会找不到@AspectJ注解除了以上两个之外,只需要导入 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependen

2020-10-10 17:58:38 229

原创 spring 基于xml的AOP 2种方式

第一种通过实现接口实现通知类型需要实现的接口前置通知org.springframework.aop.MethodBeforeAdvice后置通知org.springframework.aop.AfterReturningAdvice异常通知org.springframework.aop.ThrowsAdvice环绕通知org.aopalliance.intercept.MethodInterceptor前置通知的接口实现@Slf4jpubl.

2020-10-10 17:15:34 209

翻译 spring基于xml的自动装配

官网说明表格:mode说明no(默认)无自动装配。 Bean引用必须由ref元素定义。对于大型部署,建议不要更改默认设置,因为明确指定协作者可以提供更好的控制和清晰度。在某种程度上,它记录了系统的结构。byName按属性名称自动装配。 Spring寻找与需要自动装配的属性同名的bean。例如,如果一个bean定义被设置为按名称自动装配,并且包含一个master属性(即,它具有setMaster(…)方法),那么Spring将查找一个名为master的bean定义并使用它来设置

2020-10-09 15:53:31 386

原创 spring 特殊值的依赖注入

注入空(null)<bean class="ExampleBean"> <property name="email"> <null/> </property></bean>注入 > < 等特殊符号<bean class="ExampleBean"> <property name="someString" value="&lt;"></p.

2020-10-09 15:45:40 102

原创 spring 使用静态工厂方法和factoryBean进行依赖注入

类的定义示例如下:public class ExampleBean { // a private constructor private ExampleBean(...) { ... } // a static factory method; the arguments to this method can be // considered the dependencies of the bean that is returned, //

2020-10-09 13:55:49 766

转载 mybatis延迟加载示例

https://juejin.im/post/6844904062362583054官网描述id(colum) 元素在嵌套结果映射中扮演着非常重要的角色。你应该总是指定一个或多个可以唯一标识结果的属性。 虽然,即使不指定这个属性,MyBatis 仍然可以工作,但是会产生严重的性能问题。 只需要指定可以唯一标识结果的最少属性。显然,你可以选择主键(复合主键也可以)。...

2020-10-09 11:04:36 123

原创 spring 基于构造函数的依赖注入

第一种情况:注入的是引用类型不显式的指定构造函数参数索引或类型,此时构造函数注入的顺序必须可以任意,但是ThingTwo和ThingThree不应该存在继承关系public class ThingOne { public ThingOne(ThingTwo thingTwo, ThingThree thingThree) { // ... }}<beans> <bean id="beanOne" class="x.y.ThingOne.

2020-10-09 11:03:36 354

原创 spring 集合 数组 Map类型的依赖注入方式

<bean id="moreComplexObject" class="example.ComplexObject"> <!-- results in a setAdminEmails(java.util.Properties) call --> <property name="adminEmails"> <props> <prop key="administrator">administra

2020-10-09 11:02:07 408

原创 mybatis 三种模糊查询方式

第一种select * from table where colum like '%${value}%'传参数的时候传 %参数%select * from table where colum like #{value}在标签内使用bind子标签

2020-10-08 16:43:12 192

原创 mybatis批量添加数据推荐操作

只需要在openSession( )的时候添加参数即可:sqlSessionFactory.openSession(ExecutorType.BATCH);原因:普通的Executor执行器在对于DML语句的执行方式是 n条语句进行n次预编译,n次的参数处理BATCH执行器对于DML语句的执行方式是 只进行一次预编译,后续只需要处理n次参数即可...

2020-10-08 16:39:37 118

原创 Mybatis缓存机制小结

一级缓存一级缓存默认开启,作用域是同一个SqlSession对象;只要在数据库中查到了结果,mybatis就会把查到的结果放入一级缓存;当执行update类型的语句时,进行了commit()操作,一级缓存就会被刷新;二级缓存二级缓存需要手动开启,在需要使用二级缓存的xml映射文件中添加一个</cache>还需要再xml配置文件中开启<settings> <setting name="cacheEnabled" value="tr.

2020-10-08 16:34:16 88

原创 Mybatis多数据库环境切换

可以配置多个enviroment,根据id区分配置default选择环境示例控制某个SQL标签只在指定数据库环境中使用的方法:首先在mybatis配置文件中添加自己需要的数据库环境<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <propert

2020-10-08 16:02:47 740

原创 mybatis foreach标签的parameterType以及collection该怎么写

ParameterType:简单类型数组使用普通数组 如int[ ]集合类型使用list对象数组使用object[ ]类的属性就写类名collection数组就写array集合就写list

2020-10-08 15:44:29 611

原创 Mybatis 主键由数据库自动生成 update后写回属性的配置

useGeneratedKeys (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。 KeyProperty是JavaBean的属性值...

2020-10-08 15:36:39 197

原创 mybatis mapper接口包含多参数时 XML映射文件获取参数的方法

第一种方法:在接口参数前面加上 @Param() 注解@Select("select * from user where id = #{id} and name= #{name}")User findById(@Param("id") long id,@Param("name") String name);如果加上@Param( ) 注解的参数是对象类型(比如@Param("stu") Student student),那么取值的时候使用 #{stu.属性}第二种方法:使用arg或

2020-10-08 15:29:46 986 1

原创 mapper接口参数存在null时 MySQL与Oracle的不同处理

mybatis对于null,会包装成other类型,mysql对于mybatis的other类型就是以null处理,所以mysql数据库可以不做以下配置,插入的就是nullOracle不认识other类型,所以需要以下处理第一种解决:JDBC 要求,如果一个列允许使用 null 值,并且会使用值为 null 的参数,就必须要指定 JDBC 类型(jdbcType)。要更进一步地自定义类型处理方式,可以指定一个特殊的类型处理器类(或别名),比如:#{age,javaType=int,jd

2020-10-08 15:22:16 597

原创 mybatis中 ${}和#{}的区别 以及底层原理

${}: 不会自动加 ' ',如果传入参数为简单类型,那么必须写 ${value},如果是对象,写的是${属性名}; 底层解析的时候只要sql语句包含 ${ } ,在创建cofigration对象的时候,这条sql就会被解析成动态类型的语句,底层不会把 ${ } 转成 ?(不做处理),只会在使用Mapper接口代理对象进行数据操作的时候把#{ }转成 ?,把${ }转成mapper接口的参数值,所以会存在SQL注入的问题#{}: 对于字符串会自动加 ' ',如果传入参数为简...

2020-10-08 15:17:13 2248

空空如也

空空如也

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

TA关注的人

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