自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

原创 SpringBoot用配置文件对Properties的静态变量赋值

由于工具类为静态的,所以我们的Properties里的变量也必须为静态的,那么我们就不能直接用。方法,因为自动生成的默认为static方法,而想要通过配置文件来对其赋值,其。我们经常通过配置文件来设置代码中可以变的值,来降低代码与这些值的耦合度。如果在静态工具类中,比如Jwt工具类。我们想要自定义配置其默认的过期时间。这样就可以正常通过配置文件赋值。或者IDE工具来直接生成。方法必须为非static。...

2022-07-17 20:09:58 771 1

原创 SpringBoot2解决Long型数据上传前端时精度不够的情况

SpringBoot后端在队某个对象进行序列化为JSON时。默认会以作为消息转换器,而该转换器会默认将对象属性封装成对应类型的数据放在Json中传至前端,但中的整数精度只到14位,因此,如果上传的Long值大于14位,会导致精度丢失,造成数据不正确,解决办法有两种:之后在中重写方法来扩展转换器:...

2022-06-07 02:20:09 373

原创 关于使用springboot-devtools工具产生类型转换问题

我在使用SpringBoot的dev-tools进行热部署时会出现类型强转错误问题在进行热部署后都会出现,而为了实现热部署,dev-tools原有自己的类加载器,进行更新,由于类加载器的不同导致类型转换失败。只需要重新开启服务器即可...

2022-05-17 20:07:41 452 1

原创 Java可变参数的传参

函数中的可变参数需要传入对应类型的数组,有两种方法可以将ArrayList转化为数组: List<String> list = new ArrayList<>(); String[] array = (String[]) list.toArray();这样看上去是没什么问题,但实际上toArray()返回的是Object[]类型,不能直接将其强转为String[],会报以下错误:必须将一个个提取出来转化为目标类型,因此可以用其重载方法to

2022-05-06 00:47:19 4079

原创 SpringBoot集成Redis时的Jackson序列化问题

由于我的序列化实体类中有一个字段是LocalDateTime,该字段为Java8中的新时间类,Jackson默认不支持该时间类型,因此会报SerializationException:解决方法添加时间模块的依赖 <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-dataty

2022-05-05 00:15:06 1166

原创 IDEA开发Java项目常用.gitignore配置

*.class*.log*.lock# Package Files #*.jar*.war*.eartarget/# idea.idea/*.iml/*velocity.log*### STS ###.apt_generated.factorypath.springBeans### IntelliJ IDEA ###*.iml*.ipr*.iws.idea.classpath.project.settings/bin/*.logtem/#r

2022-04-27 19:32:32 2173

原创 SpringSecurity对认证或授权失败的封装

在SpringSecurity中,如果在认证或授权过程发生了异常,会分别将错误封装成AuthenticationException和AccessDeniedException,并且会分别调用AuthenticationEntryPoint和AccessDeniedHandler接口对象的方法来处理,我们可以用已经实现的类也可以自己实现该接口自定义错误处理:@Componentpublic class AccessDeniedHandlerImpl implements AccessDeniedHandl

2022-04-27 13:41:41 723

原创 SpringSecurity整合SpringBoot2实现JWT登录认证

对于JWT的解释,网上有很多,我就不多赘述,主要分为以下两个步骤:用户登录生成Token返回给前端前端在访问某些接口时需要该Token进行鉴权访问编写登录接口,生成Token并返回前端编写service层实现类利用AuthenticationManager的authenticate方法进行用户认证:将用户输入的用户名和密码传入一个实现Authentication接口的类对象(这里选用UsernamePasswordAuthenticationToken )//将用户输入的用户名.

2022-04-26 23:04:32 999

原创 SpringSecurity-Web用户认证

首先引入pom坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>编写配置类继承WebSecurityConfigurerAdapter 类:@.

2022-04-26 02:50:48 216

原创 SpringBoot2-Profile功能

环境切换在实际开发中,生产、开发和测试等环境的配置文件可能会不同,比如数据源信息,因此SpringBoot帮我们引入profile功能来快速切换环境首先我们可以写多个环境的配置文件:第一个是默认配置文件,application-后面加上具体的环境名称,该名称自定义,代表对应环境下的配置文件,如果我们在本地进行开发,可以将配置写在默认配置文件中,当项目部署到生产环境前,可以在默认配置文件中加入以下配置:spring: profiles: active: prod即可将配置文件切换

2022-04-25 20:46:46 946

原创 MyBatis-Plus整合SpringBoot2

首先导入pom坐标: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>该包导入了以下.

2022-04-25 15:34:58 752

原创 SpringBoot整合Mybatis

首先引入mybatis-springboot整合坐标 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> .

2022-04-24 22:07:06 444

原创 SpringBoot2-Web拦截器基本使用以及拦截流程

拦截器在Http请求处理过程中可以对请求进行筛选,对响应进行渲染…首先需要写一个实现HandlerInterceptor接口的实现类,并重写以下三个方法public class TestInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object hand.

2022-04-17 21:08:57 583

原创 SpringBoot2接口请求处理的注解

@PathVariable(key):当请求格式为/user/{id}时,传进来的参数可以利用该注解:还有一种方法可以直接将多个参数包装成一个Map变量,即:这个map将会储存路径中所有的可变参数@RequestHeader:用于处理请求头@RequestParam:用于处理请求参数@CookieValue:用于处理Cookies@RequestBody:可用于储存POST请求的请求体以上几个注解都可像第一个一样,用Map来封装对应参数...

2022-04-17 16:22:15 433

原创 SpringBoot-Web开发时的Restful风格接口

在对应接口方法上使用@RequestMapping或者细分的@GetMapping、@PostMapping等注解,如果客户端是以表单提交数据,此时无法直接发送PUT、DELETE等请求,应该在表单中增加一个隐藏的_method数据,值为对应的请求类型<form action="/user" method="post"><input name="_method" value="DELETE" type=hidden></form>此时SpringBoot会将该表

2022-04-16 02:02:09 297

原创 SpringBoot2的配置绑定

我们在配置数据库时,经常会把数据库连接信息配置到.properties文件中,之前想要将器取出,我们一般用的是ResourceBundle类来进行资源绑定,相对比较麻烦,但在Spring环境中,借助IOC容器,可以帮我们很便捷的解决这个问题,称为配置绑定有以下两种方法:无论哪种方法,最核心的肯定是需要将配置文件中的信息封装到IOC容器中,Spring才能帮助我们实现想要的功能在将某个自定义类注入到容器时,使用@ConfigurationProperties(prefix="")将SpringBoo

2022-04-15 22:01:28 342

原创 yaml配置文件配置SpringBoot

yaml/yml文件的语法和python几乎一样,唯一不同的是数组换行时用-作前缀,以及键值对中的冒号后必须有一个空格person: key: - value1 - value2 #这是数组形式在SpringBoot中用yml文件代替properties文件:SpringBoot在扫描配置文件时,首先扫描properties文件,再扫描yml文件,properties文件的优先级更高properties文件默认使用的是ISO-8859-1编码模式,解决中文乱码模式比较复杂,yml文

2022-04-15 21:02:32 935

原创 Lombok包的简化开发运用

首先在pom文件下导入坐标 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>只需要在某类中加入@Data注解,即可自动配置对应的setter、getter、以及toString等方法可通过在类中单击右键.

2022-04-15 20:29:07 208

原创 SpringBoot自动配置的底层实现

SpringBoot的自动配置功能可以说是其最引以为傲的功能,下面为其底层实现原理之前用Spring、SpringMVC开发时,自己想要实现某些功能,比如Http解码、视图解析器、文件上传解析器等等,一般做法都是将某个组件注入容器中,也就是说,功能配置的核心就是将功能组件注入到IOC容器中,框架才会帮助我们实现相应的功能那么在SpringBoot实现自动配置的功能时,首先SpringBoot在加载时会自动载入所有开发环境下的自动配置类xxxAutoConfiguration在不同的开发环境中,会.

2022-04-15 15:33:38 362

原创 【SpringBoot2】@ImportResource将原生配置文件导入容器

在SpringBoot中,如果有时想要写一些配置文件来配置组件,SpringBoot框架是无法直接识别Spring配置文件的,必须在配置类中使用@ImportResource(classpath:xxx.xml)来指定Spring配置文件,这样才能将配置文件中的组件添加到容器中...

2022-04-15 12:54:32 299

原创 SpringBoot2组件的添加

组件的添加在SpringBoot2中是利用注解方式实现的,也就是我们常说的注解代替配置文件在某个配置类前加上@Configuration注解,就告诉了SpringBoot这是一个配置类,而在配置类中可以用一个方法来定义一个Bean组件,并且在方法前加上@Bean(value),表示该方法为一个组件,组件id为value,如果没写value则为方法名,返回类型为组件类型,返回值为组件实例该注解中有一个参数是Boolean proxyBeamMethods值为true时,称为Full模式,保证该组.

2022-04-14 02:33:44 199

原创 SpringBoot2的依赖管理特性

在学习SpringBoot之前,我们经常因为某个jar包的maven坐标版本问题,导致项目运行问题,在SpringBoot2中,会将符合SpringBoot的所有包的推荐版本进行默认封装,保证版本的正确性,这被称为自动版本仲裁机制,我们只需要在Maven项目中导入spring-boot-starter-*坐标即可自动导入对应场景(比如web)开发中常用的jar包,如果我们想要导入坐标,可以不用写version,因为SpringBoot帮我们封装好了推荐的版本号,而如果我们想要强制改变某包的版本,则需要加入以

2022-04-14 01:28:05 307

原创 MyBatis多表查询时的映射配置

MyBatis进行多表查询时,比如用户和订单两个类(对应两个表)中,一个用户可以有多个订单,因此在用户的类中需要加上一个List<Order> orders属性;而一个订单只对应着一个用户,因此在订单类中需要加上User user来匹配该订单对应的用户信息此时需要在映射文件配置中配置结果类型的映射关系:一对一的关系 <resultMap id="order" type="Order"> <id column="oid" property="id"

2022-04-13 21:12:50 1840

原创 AOP的注解开发

和前面学过的Spring注解开发一样,Bean注入可以用@Component注解来定义,切面类中可以用@Pointcut(切点表达式)来定义一个切点方法,该切点方法名即为切点的id,在增强方法中用对应类型注解来将切点织入@Before(MyAspect.pointcut())最后别忘了在配置文件中配置注解扫描和自动代理...

2022-04-13 16:10:51 100

原创 AOP开发的入门步骤

导入AOP坐标 <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.5</version> </dependency>创建目标接口和目标类,也就是需要被增强的目标Target创建切面类,内部含有增强方法(Advi.

2022-04-13 02:57:10 374

原创 对Spring-AOP的理解

AOP(Aspect Oriented Programming) 面向切面编程Spring 使用动态代理技术对一些具有相同增强功能的业务方法进行解耦的一种实现,所谓切面,可以暂时理解为这个增强方法和被增强的业务方法首先应该了解一些重要概念Target(目标对象):被代理的对象joinPoint(连接点):目标对象,所有可以增强的方法。所谓连接点在Spring中指那些被拦截到的方法,也就是可以被增强的方法PointCut(切入点):真正要被增强的方法,是连接点的一部分Ad

2022-04-13 02:12:03 274

原创 【Java】利用动态代理模式来增强方法功能

代理模式作为设计模式的一种,在各大框架的功能底层发挥很重要的作用,比如Spring的AOP,其底层就是用到了动态代理的技术思想,其基本步骤如下:创建接口:package com.pojo;public interface ShowInfo { String showInfo();}创建类实现接口package com.pojo;public class User implements ShowInfo{ private String name; pr.

2022-04-13 01:33:03 1126

原创 SpringMVC的数据回写json字符串

SpringMVC的数据响应有很多格式,字符串解析为ModelAndView、直接返回ModelAndView对象、返回普通字符串(在方法前加上@ResponseBody注解)还有这里重点强调的返回Json字符串在前后端分离的业务需求中大多都是返回Json格式的数据类型,而Json格式在Java中可以以一个POJO的属性来转化想要将一个对象封装成json格式的数据,首先应该在spring-mvc.xml配置文件中导入mvc命名空间,并添加以下配置来导入注解驱动:<mvc:annotation-d

2022-04-12 02:32:09 599

原创 SpringMVC入门开发步骤

在pom.xml中导入SpringMVC相关坐标 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.5.RELEASE</version> </dependency>在web.xml中配置Spri.

2022-04-12 01:42:09 316

原创 Spring的注解开发

Spring框架,包括以后学的几乎所有框架,使用注解开发来代替配置文件开发是整个行业的趋势下面介绍Spring的注解以及用途@Component(String value):在类上用于实例化Bean,参数value可以给该Bean取名,也就是id@Controller()@Serrvice()@Repository()以上三个注解分别表示在web、service和dao三层架构上的实例化Bean,与Component除了能够更快识别该类的类型没有逻辑上的区别@Autowired:根据类型.

2022-04-11 20:21:09 242

原创 Spring配置数据源(连接池)

在这之前,我们用JDBC连接数据库的方法有许多:直接通过JDBC硬代码将数据库连接信息配置到properties文件中,再用ResourceBundle进行读取配置文件用MyBatis框架的mybatis-config核心配置文件来配置数据库信息用连接池来获取连接对象现在我们可以用Spring容器来配置连接池获取连接对象只需要将连接池类路径配置到Bean中,再将相应set方法的属性用property标签配置即可,如果对Spring依赖注入不熟悉可以查看我的上一篇文章Spring依赖注入在

2022-04-11 17:39:14 131

原创 Spring的依赖注入

在JavaWeb开发的三层架构中,业务层接口对持久层方法进行封装,进一步的传递给web层使用,而在业务层对持久层的封装时,Spring容器的依赖注入发挥了很大作用,依赖注入大致分以下几类:对象的注入:我们知道,web层在调用业务层的方法时,无需关心业务层是怎么对持久层进行封装的,只需知道业务层的方法能完成什么业务,因此业务层在封装持久层对象时,可以用Spring的Bean容器进行依赖注入,来完成解耦applicationContext.xml:如上图,在Spring配置文件中,bean标签可以

2022-04-11 17:26:30 484

原创 MyBatis条件查询

单条件查询用select查询数据时,如果需要用户传入的参数只有一个时,可以直接在接口代理方法中设置一个参数:如上图的selectById(int id)方法,定义好方法后需要在对应的映射文件中写上对应的SQL语句只需要将对应的参数名传入#{}中即可实现插入参数,还有一种方法是将#改成$,这两个的区别在于:$代表的是先拼接字符串,再对SQL进行编译,而#则是先预编译SQL语句,再传入参数的值,这样可以防止字符串拼接时的SQL注入问题,具体可看我的另一篇文章JDBC解决SQL注入问题多条件查询当

2022-04-09 10:57:31 4726

原创 用MyBatis简化JDBC连接数据库的基本操作

学习了JDBC操作数据库后,会发现JDBC操作时写的硬代码太多,代码复用性和可维护性都比较低,因此在开发中,我们常用MyBatis框架来简化JDBC的操作,具体步骤如下:这里是用的Maven工具搭建的项目首先将基础的依赖包导入pom.xml文件中:#pom.xml <dependencies> <dependency> <groupId>org.mybatis</groupId> &l

2022-04-08 02:14:55 1454

原创 JDBC事务操作

在JDBC中想要开启事务,实际上就是关闭mysql默认的自动提交机制,将数据库的连接对象调用相应方法即可:con.setAutoCommit(false);//取消自动提交,开启事务con.commit();//手动提交con.rollback();//事务回滚,可在catch代码块中执行...

2022-04-06 23:48:30 471

原创 MySQL的一些笔记

数据类型:varchar:字符串,根据实际情况改变储存空间,效率低,可节省空间char:固定分配内存长度,效率高,可能浪费空间,两者最大长度为255int:最长11bigint:Java中的Longfloat:同Javadouble:同javadate:年月日datetime:年月日时分秒日期格式:%Y 年%m 月%d 日%h 时%i 分%s 秒str_to_date(str,‘%Y-%m-%d’)date_formate(date,‘%Y%m%d’)将日期以指定格

2022-04-06 16:25:46 704

原创 一道数据库查询面试题

有 3 个表 S(学生表),C(课程表),SC(学生选课表)S(SNO,SNAME)代表(学号,姓名)C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)问题:1,找出没选过“黎明”老师的所有学生姓名。2,列出 2 门以上(含2 门)不及格学生姓名及平均成绩。3,即学过 1 号课程又学过 2 号课所有学生的姓名。题解:---------------------------第一题-----------------.

2022-04-05 20:32:58 587

原创 SQL中的union关键字

union关键字旨在连接两个查询后的表,这两个表的字段数量必须一致,在MySQL中,这些字段数据类型、名称可以不同,但数量必须相同,而在Oracle中数据类型也必须相同,union相对多表查询来说可以提高其效率,因为union只是简单的把两个查询结果相加,而join则具有笛卡尔积效应...

2022-04-05 15:07:51 874

原创 SQL子查询

MySQL查询语句中可以在SQL语句中实现嵌套结构,这样的结构称为子查询在from后面的子查询,即将查询之后的新表当成一个实际存在的表,对其进行二次查询在where后的子查询,对于SQL查询语句的执行顺序来说,group by在where语句前执行,因此不能在where语句中直接使用分组函数,但是可以在where中先用分组函数计算出一个值,再利用到条件中:select name from student where (select avg(score) from student) > 90;

2022-04-05 15:04:00 264

原创 MySQL多表查询

内连接将两表简单结合:select stu.name, sch.name from student stu join school sch on stu.id = sch.id;该语句将学生表与学校表连接,该连接会将所有学生信息一一与学校信息比对筛选,也称为为笛卡尔积,其匹配的次数为两表数据之积外连接内连接两表时,如上例,有的学校的id或许在学生中没有出现,也就是说被筛选掉的数据就不显示出来,那么外连接相对来说对两表就用了主次关系,用left join和right join来形成主次关系,

2022-04-05 03:34:56 209

图片等资源与linux系统交互

图片等资源与linux系统交互

2022-03-06

空空如也

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

TA关注的人

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