- 博客(63)
- 资源 (3)
- 收藏
- 关注

原创 Mybatis结合Redis缓存以注解开发时的查询优化方案——重新实现@One、@Many注解
前言该问题最早提出是在20年9月份开发新院统战项目时提出的,也就是我刚刚搭完第一版后端框架,其中持久层使用的框架是mybatis plus,缓存使用的是sprinboot缓存注解+redis,其中将缓存注解加在service层。当时在使用mybatis plus并以注解开发时,由于过度使用@One与@Many注解进行属性的封装,例如:@Select("SELECT id,dept_id,username,nick_name,gender,phone,email,avatar_path,passwo
2021-01-20 21:07:31
458
原创 vue-cli3项目配置和自定义webpack打包,使用CDN加载减小打包体积
在使用vue-cli3创建项目后,自动帮你做了很多的配置,包括原本的vue.config.js配置文件也没有帮你生成,而我的一些关于项目的配置和自定义webpack打包都需要写在这个配置文件中。以下说开发模式/环境 (development) 就是指 npm run serve 生产模式/环境 (production) 就是指 npm run build &
2020-08-12 22:13:08
1942
原创 Springboot默认日志的通用配置文件logback.xml,并设置日志时区
Springboot中引入spring-boot-starter-web时,默认会引入self4j + logback,所以如果没有其他日志的需求,这两个就可以,他们支持的日志配置文件名可以为logback.xml,放在resources下即可生效:<configuration> <!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同 --> <property nam
2020-08-11 16:19:41
1409
1
原创 Springboot通过@ControllerAdvice实现简单的全局统一异常处理
当我们的业务层出现异常,后台报错而没有给前端合理的响应,这种情况是肯定不能出现的,但是我们也不能每个接口都try/catch一遍,自己处理异常。我们可以通过SpringMVC提供的@ControllerAdvice注解来进行简单的全局统一异常处理。//api下包含了controller和service和mapper@ControllerAdvice(basePackages = "com.winner.api")pub
2020-08-11 16:05:14
247
原创 Springboot项目中使用过滤器Filter+ThreadLocal实现对请求用户的拦截和保存
由于jwt的出现,使请求方法的参数中不再携带用户的标识,而是将含有用户信息的token放入请求头中,在该请求进入业务之前就要进行层层过滤拦截,这时候就会牵扯出来了一个问题,如何在当前请求的线程中保存该请求用户的信息。1. ThreadLocalThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocal为变量在每个线程中都创建了一个副本,
2020-08-11 15:38:08
7349
原创 Jmeter第一次启动WARNING:Could not open/create prefs root node Software\JavaSoft\Prefs at root 的两种解决方法
Windows系统中,启动Jmeter GUI的一般方法就是在cmd窗口输入jmeter就可以了,但是一开始可能会报一个警告:WARNING:Could not open/create prefs root node Software\JavaSoft\Prefs at root 主要是由于权限不足无法在注册表中创建Prefs文件夹,解决
2020-08-11 11:27:14
1097
原创 Springboot中基于java-jwt的简单基础jwt工具类(生成token与校验)
我们知道 jwt(JSON Web Token)是基于RFC 7519标准的方法,并不是某公司的开源项目,所以jwt在java端有很多的实现库,主流的有jjwt、java-jwt、JOSE4j等,其实基础功能都差不多。本文提供的是基于 java-jwt 的工具类。1. 依赖 <!-- jwt --> <dependency> <group
2020-08-11 09:59:22
875
原创 【悲观锁】和【乐观锁】来解决秒杀系统中的超卖问题
我们知道在秒杀系统中肯定是会碰到超卖的问题的,原因就是高并发请求导致了数据库的脏读和不可重复读,进而造成了超额用户下了订单。 解决方法可以通过封锁协议在数据库端对操作进行加锁,进而提高事务的隔离级别,来到达可串行化调度(多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同。可串行化调度当然也保持数据库的一致状态
2020-08-10 22:57:12
1791
原创 Could not create connection to database server. Attempted reconnect 3 times. Giving up.的几种解决方案
今天通过swagger调用接口的时候,后台就突然报错,查看是数据库方面的——Could not create connection to database server. Attempted reconnect 3 times. Giving up. 一时间也不清楚问题出现在哪,只知道是数据库连不上了,到网上查了不少解决方法,分别是以下几个:
2020-08-09 21:11:51
6999
原创 springboot后端发请求——Http工具类
public class HttpClientUtil { public static String doGet(String url, Map<String, String> param) { // 创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDefault(); String resultString = ""; Closeab
2020-08-09 21:04:42
2049
1
原创 Springboot 自定义简单的全局统一响应体
一般来说控制层加的都是@RestController来表明任何一个请求都会有一个相应结果,规范的情况下都会定义一个全局的响应体,这里先展示一种简单的,有关响应码直接定义在该响应体类中:public class AjaxResponse { public static final String ERROR_MSG = "操作失败"; public static final String SUCCESS_M
2020-08-09 16:16:35
811
原创 Springboot自定义注解实现简单的接口权限控制,替代Shiro/SpringSecurity
我们知道权限控制是不能交给前端去做的,因为一但后端的接口所暴露,是十分危险的一件事,所以前端发起的请求的安全性无从考证,最终的权限控制还是要交给后端去判断。 Shiro和SpringSecurity是都具备权限控制的两个框架,但是如果自己的小项目在权限控制方面要求比较简单,那么这两个框架就显得有些“重”,而且SpringSecurity配置起
2020-08-09 14:44:07
2672
3
原创 DO、BO、DTO之间相互转换工具类
在springboot项目单靠实体类不能够满足前后端传输模型的需求,所以我们又建了DO、BO、DTO等模型来方便数据的传输,但是他们之间往往又会进行转换,下面是一个任意两个模型相互转换的工具类:public class MyBeanUtils { public static String[] getNullPropertyNames(Object source) { final BeanWrappe
2020-08-09 10:54:01
1165
原创 springboot中Mybatis Plus 分页 + 注解联表查询 + 自定义wrapper
我们都知道 mybatis plus 是基于mybatis的增强,可以实现单表无需再写CRUD操作,但是对于多表的联合查询,还是需要自己手动写sql,而且使用的也是mybatis中的@One和@Many,如果此时还需要用到分页和自定义wrapper,就再麻烦了一些,下面说下大致的代码: mybatis plus的依赖: <dep
2020-08-09 10:40:24
2036
原创 vue-cli中package.json和package-lock.json的作用和npm install后的参数
一般来说,vue项目的根路径都会有package.json和package-lock.json这两个文件
2020-08-09 09:41:30
1172
原创 Springboot项目中全部时间、时区设置统一设置,包括Jackson、日志、数据库
经过上一次后端的开发后,一共总结了后端在开发过程中会有三个地方涉及到时间与时区的设置,分别是:存入数据库数据时的时间日志打印的时间Jackson在进行数据格式转换时的时间 这里我们所用的数据库为 Mysql,字段中的时间类型为 datetime,java实体类中所使用的时间类型为 Date。 &
2020-08-08 15:56:36
6846
1
原创 vue-cli3中使用echarts的步骤【精简】
在官方教程中所提供的案例基本都是直接在html页面中展示的。那么在vue-cli中引入echarts的方法如下,首先通过npm安装:npm install echarts --save 之后在vue页面中的script中导入import * as echarts from 'echarts' &nb
2020-08-07 22:44:17
2345
3
原创 BO中toString()方法输出父级私有属性的两种方式
我们都知道子类是无法集成父类的私有属性的,特别在实体类中属性都是私有的,而经常又要写BO来继承这些实体类,如果使用IDEA直接自动生成toString()方法默认是不输出父类的,必须在改方法里显示调用父级toString():public class UserDepartmentBO extends User { //关联院系实体类 private Department department;
2020-08-07 22:18:57
1077
原创 Winner Club项目总结(三)
这应该是这次项目的总后一篇总结文章了,Winner Club作为三月演武堂成立来完成的第一个商业项目,于7月28日正式交付,项目组人员也在当晚进行了总结。 下面是会议总结的要点:1. 学长之后可能就不再参与代码环节了。 确实这次学长参与了项目很多重要代码部分
2020-08-07 11:40:10
254
原创 Winner Club项目总结(二)
这篇主要总结项目过程中遇到的问题和小的知识。(删除线指已经总结过)整合druid高版本springboot。springboot中配置filter的注意事项(urlPattern不生效)git flow总结学长搭建的springboot框架filter & intercepter & LocalThread 拦截请求用户并获取信息package.json和package-lock.json和np
2020-08-03 14:38:41
185
原创 Winner Club项目总结(一)
距从6月29号开始到现在已经过去了接近一个月了,接手的第一个项目——Winner Club也算是告一段落了。这是第一个商业形式的项目,要求比较高,由小桑学长和腾飞学长一起带着做,收获确实非常非常的大,比我以前做的任何一个作品收获的都要多。不管是技术选用、工作流程、代码质量、结构设计等都和以前有了质的飞跃。 这次的Winner Club项目是一
2020-08-03 14:30:01
315
原创 软件工程第二次自考总结(2020年8月)
今天是2020年8月2日,我结束了自学考试的第二次考试。这次报的科目有《多媒体计算机技术》、《软件开发工具和环境》和《计算机网络》。一、先说“预习”历程: 我是7月9号开始,进行《软件开发工具和环境》的预习的,虽然当时我负责Winner项目的后端,白天还有实习,我还是挤了一些时间用来看《软件开发工具和环境》。还好这本书整体来说比较通俗易懂,
2020-08-03 14:20:26
1371
3
原创 springboot里编写filter过滤器,urlPatterns属性失败的解决方法
springboot里编写filter过滤器常用来,拦截请求,获取其中的token,来获取用户数据,filter过滤器要被springboot加载,由于是相当于一个组件类,可能第一时间想到的就是加@Component,如下:@Component@WebFilter(filterName = "testFilter",urlPatterns = {"/api/*"})public class CommonFilter i
2020-07-10 22:07:55
4723
1
原创 springboot整合高版本druid数据源(1.1.20+),解决监控页打不开的问题
druid是我们springboot项目中经常会使用的数据源之一,良好的性能并且自带监控页面,十分强大。下面总结下依赖和配置方法:<!--druid数据源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-
2020-07-10 21:54:38
2534
1
原创 【精简全流程】带你了解实际工作中git的使用流程
一、简介 我们常常会将自己的代码托管至一些代码管理平台进行托管,比如Github、Gitee、或是自己搭建的托管平台等,其中Git就是重要的传输控制工具。在一开始学习git的时候可能大多数小伙伴并没有合作和分支相关的概念,只是熟悉git最基本的pull、commit和push。如下图: Remote是远程仓库,Repository是本地仓库,
2020-07-03 20:33:50
6335
1
原创 @RequestBody的使用场合
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),一般使用在前后端分离的项目中,前端使用ajax类的post请求时,会在请求体中携带json格式的数据,例如:this.$http.post("http://localhost:8989/vue/user/add",this.user).then(res =>{ console.log(res); }); 
2020-06-16 16:47:01
2020
原创 Lombok快速使用,快速编写实体类
首先是导入依赖:<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </depen
2020-06-16 16:30:28
479
原创 springboot有关数据库的依赖与默认配置
首先是pom依赖: <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId>
2020-06-16 16:21:28
1021
原创 随机盐生成类——SaltUtils
用户在注册账户时,通常在后端的业务部分会对用户的密码进行加密处理,大多采用 md5 + salt + 散列。盐是一定长度的随机乱码(字母、数字、特殊符号),每次都是随机生成的,所以可以写一个随机盐生成类来完成随机盐的生成。public class SaltUtils { public static String getSalt(int n){ char[] chars = ("ABCDEFGHIJK
2020-06-16 16:11:38
3465
原创 java -jar启动的springboot项目如何使用https协议访问
这里以微信小程序为例。我们都知道微信小程序在做请求的时候是只支持https协议的,所以你后端项目不能直接再使用http+公网ip访问了,而是https+域名进行访问。 首先是部署在服务端的tomcat,可以安装SSL证书,你再把项目打包成war,进行部署,就可以通过https进行访问了。 &nb
2020-06-11 11:10:13
4384
原创 linux中screen的简单实用,创建多个子会话
当我们在使用SSH连接远程服务器时,就像是在自己电脑上打开了cmd,此时运行一个jar包之后,大多数情况下该程序都会占用该会话,而你不能进行其他操作,但关闭远程连接后该程序又会停掉,这对部署项目或是部署某些服务器时是很不方便的,当然启动时可以选择后台启动,但是这里给大家推荐screen,可以主会话下创建多个子会话,并在关闭主会话后并不会影响到子会话。 &
2020-06-06 09:03:53
778
原创 vue中router的懒加载
在使用vue-cli3中的手动创建项目,选择router,那么在项目初始化创建的时候就会将router自动安装到项目中,其中在router目录下的index.js里就配置好了router的相关内容。import Vue from 'vue'import VueRouter from 'vue-router'import Home from '../views/Home.vue'import Button from "
2020-06-06 08:48:35
184
原创 使用transition实现弹幕滚动效果
想要实现比较理想的弹幕滚动效果还是有一定难度的。这里以vue为基础,讲一种实现弹幕滚动的方法,不考虑重叠,弹幕过长或其他问题。 一个弹幕即为一个组件,所以要实现设计此子组件,即弹幕组件,这里属性要包含该弹幕的位置(随机、定端、底端),大小,颜色,内容等等,由父组件循环渲染并赋值。 &
2020-06-04 08:58:47
3244
原创 vue中调整某一div的滚动条始终触底
举一个比较长见的例子,在聊天框中,每一条消息都是一个组件,通过在父组件中根据数据v-for循环出来该组件,接收到消息之后也能快速渲染出来,这是很方便的方法。 但是要注意的一点是,每次该div里添加一条新的消息之后右边的滚动条应该是立马触底的,也就是显示最新的一条消息,因为消息一般都是添加在一个集合的末尾,当然也就是最后渲染,位置在div的最下
2020-06-04 08:53:20
987
原创 netty如何“嵌入”到springboot中
为什么说是netty如何“嵌入”到springboot中,因为netty本身需要绑定一个端口,需要新线程去跑,如果你直接把netty的类作为组件加入springboot的话,那么当加载netty时,netty启动后就把springboot给阻塞掉了,http请求都无法处理,特别是使用netty实现websocket的时候,还不支持springMVC,所以netty更应该作为一个独立的maven项目去构建部署。 &
2020-06-04 08:51:24
594
1
原创 html中absolute和relative对子div的宽高的影响
css中的postion是一个比较重要的样式,其中的absolute和relative不仅对自身的位置有影响,对子div的位置也会有影响。 不仅如此,对子div的宽高也有影响。 我们都知道将div的width和height设置为百分比可以实现自适应,但是有时候
2020-06-04 08:49:50
1021
原创 vue-cli3引入uuid
首先安装就不多说了。npm install --save uuid uuid不需要在main.js中做配置,在需要使用的vue页面引入即可。 但是我原先使用uuid的时候(使用的VScode),直接在import uuid from "uuid" &nb
2020-06-04 08:48:46
3248
1
原创 关于vue和springboot的打包与部署
目前前端如果使用vue的话,大多就是基于vue-cli的,这里我以vue-cli3为主,其实和2差不多,4我还没用过。 vue-cli3打包直接在package.json目录下输入npm run build,生成的dist文件夹就是输出目录,里面有index.html和css、js。然后你可以直接拿到服务器上使用nignx代理,当然需要再做一些配置。 &
2020-06-04 08:45:20
958
1
通信/信工大二课程设计——单片机AT89C51双向流水灯.rar
2020-08-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人