![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java开发经验积累
文章平均质量分 60
记录平时开发遇到的一些解决方案
林志鹏JAVA
偶尔弹弹吉他
展开
-
Mybatis 获取最终可执行SQL语句
Mybatis 获取参数解析后,最终的可执行SQL原创 2022-07-26 16:41:53 · 8549 阅读 · 0 评论 -
Mybatis插件原理(代理+责任链模式)
Mybatis插件原理以及实现,从设计模式出发,一步一步理解其原理转载 2022-07-21 09:20:05 · 691 阅读 · 0 评论 -
消息中间件选型对比
主流消息中间件选型对比转载 2022-02-20 16:43:42 · 299 阅读 · 0 评论 -
权限控制模型—RBAC
RBAC(Role-Based AccessControl,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。与ACL实现的区别在于,不能直接为用户分配权限,只能从角色那里继承而来。1.RBAC权限模型 在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图) 角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统...转载 2022-02-10 09:41:39 · 3398 阅读 · 0 评论 -
Java代码实现行转列
文章目录前言一、如何转换?二、转换步骤前言最近在写业务的时候,遇到一个需求,要求把数据库的数据行,根据某个维度,把行转换为列去显示。如下图说明: 系统里某个数据有一系列属性,属性值会根据某个时间维度去进行更新。然后就有了版本的概念,为了方便更新之前和之后进行对比,前端页面要求显示如图所示的方式。一、如何转换?如果数据是可以通过连表查询出来左侧样子,可以通过SQL的方式去做行与列的转换。我这边版本信息都是序列化成json字符串存储到db了,所以采取了Java程序转换的方法。二、转换步骤原创 2021-12-23 20:19:57 · 5264 阅读 · 0 评论 -
SpringCloud Alibaba版本与各组件版本对应关系说明
文章目录前言一、组件版本说明二、毕业版本说明三、pom示例前言介绍springcloud alibaba 各版本对应关系一、组件版本说明二、毕业版本说明三、pom示例 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> &l原创 2021-10-21 00:15:42 · 929 阅读 · 0 评论 -
springboot用maven打包外部引入的lib依赖
文章目录前言一、添加外部jar包到lib目录二、配置maven打包1.pom.xml 配置前言大部分我们日常需要的依赖都可以在maven仓库上找到,但是有时候需要引入一些外部的jar包到工程,则会在工程下建一个lib目录,然后添加到工程依赖。提示:以下是本篇文章正文内容,下面案例可供参考一、添加外部jar包到lib目录在工程下建一个lib目录,然后把jar包上传到此目录下,如图本地使用的话,可以使用idea本身的功能添加到工程依赖里面,右键lib目录,选择Add as Library这时原创 2021-08-24 09:19:49 · 13712 阅读 · 5 评论 -
Mybatis integer类型值为0时判断条件无效问题
问题描述:一个数据实体有一个状态标识码,一般为 integer 类型,比如,一篇文章的状态:0-编辑中 1-已发布。然后有一个分页列表,可以进行条件查询,根据文章状态进行过滤。伪代码如下:<select id="pageArticle" resultType="xxxVO"> SELECT * FROM article <where> <if test="queryDTO.status !=null and原创 2021-07-29 09:30:42 · 902 阅读 · 0 评论 -
基于redis实现分布式锁(二)根据资源动态生成锁名称
前言上次写了一篇实现分布式redis锁的文章,见《AOP+自定义注解实现Redis分布式锁》,是在防止定时任务并行启动场景的时候用的。最近业务上又遇到了个新场景,要求:不允许对资源进行并行发布的操作。如此,上次封装的reids锁已经不能满足需求了,主要是,锁的key必须要使用资源id。例如场景:要对某个班级的所有学生手动推送通知,在这个推送通知的过程中,不允许其他人同时对这个班级的学生进行推送通知操作。所以根据班级 id 拼接成分布式锁 key 。按照之前的代码,锁是可以实现的,但是在 aop 的时候原创 2021-07-26 17:12:07 · 397 阅读 · 0 评论 -
安装jar包到本地maven仓库命令
一、需求把一个jar包,安装到本地maven仓库,在jar包目录下执行以下安装命令二、安装命令mvn install:install-file -Dfile=.\infinitus-cloud-common-1.0-SNAPSHOT.2.jar -DgroupId=com.org.infinitus -DartifactId=infinitus-cloud-common -Dversion=1.0-SNAPSHOT.2 -Dpackaging=jar三、说明-Dfile:jar包所在本地的具体原创 2021-07-21 14:25:24 · 364 阅读 · 0 评论 -
Java 后端工程规范
后端工程规范规范的意义和作用编码规范可以最大限度的提高团队开发的合作效率 编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码 规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维开发环境规范开发环境JDK 统一使用 1.8版本开发工具IntelliJ IDEA 2019.3.5 +(安装Lombok Plugin),不使用IDEA2原创 2021-07-16 17:32:10 · 791 阅读 · 3 评论 -
toString输出父类的属性
需求目前的toString只会打印当前类的属性,希望在打印类信息的时候,如果类有父类,则把父类的所有信息也打印出来。方案1、使用Lombok/** * @author linzp * @version 1.0.0 * CreateDate 2020/9/23 14:05 */@Data@ToString(callSuper = true)@TableName("user")public class User extends BaseEntity implements Serial原创 2021-07-15 01:28:32 · 5347 阅读 · 0 评论 -
springboot配置日志格式化输出到文件
文章目录前言一、application.yml指定配置文件路径二、logback-spring.xml 配置内容前言springboot可以配置日志输出控制台格式,输出到文件,利用logback配置可实现一、application.yml指定配置文件路径# 日志配置logging: config: classpath:logback-spring.xml二、logback-spring.xml 配置内容在项目 Resource文件目录下新建logback-spring.xml 配原创 2021-07-04 11:21:11 · 3164 阅读 · 0 评论 -
quartz框架基本配置 quartz.properties
quartz.properties 基本配置#设置默认调度程序的名称,如正在使用群集功能,则必须对群集中“逻辑上”相同的调度程序的每个实例使用相同的名称,重新赋值该值。org.quartz.scheduler.instanceName = DefaultQuartzScheduler#如果您希望Quartz Scheduler通过RMI作为服务器导出本身,则为true。org.quartz.scheduler.rmi.export = false#如果要连接(使用)远程服务的调度程序,则为tr.转载 2021-06-24 23:18:19 · 385 阅读 · 0 评论 -
MybatisPlus注解实现多表联合并且同时分页、条件查询
文章目录前言一、场景需求1、 相关表如下2、相关实体类如下二、MybatisPlus实现前言使用mybatis plus 时,单表的增删改查操作十分便捷,不用写xml,也不用写sql,只要实现相关封装的接口就可以完成大部分的需求。但是对于多表的关联查询来说,mybatisPlus并没有实现这样的需求,大部分人都是通过写xml去实现,其实使用Mybatis Plus加注解也可以实现联合查询的功能,还可以自动分页,条件过滤查询。一、场景需求有一张User表,里面有用户的信息。一张书籍表,里面有书籍相原创 2021-05-03 14:06:59 · 7934 阅读 · 14 评论 -
Java实现基于Redis的发布/订阅
一、场景使用Redis实现消息的发布订阅,由生产者(pub)发布消息,消费者(sub)消费消息。这里有个 channel 的概念,就是一个通道,消费者订阅这个通道,然后发布者在这个通道发布消息,订阅这个通道的消费者都可以消费到。二、命令发布消息# channel是指通道,message是指消息的内容,按照这个格式,可以给该通道发布消息PUBLISH channel message# 比如要往一个叫 demo的通道里发个消息 helloworldPUBLISH demo hellowor原创 2021-01-29 10:34:48 · 3437 阅读 · 0 评论 -
Java生成二维码(附工具类)
后台Java生成二维码这里用到了谷歌的zxing包,maven依赖如下: <!-- 二维码依赖开始--> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.4.0</version>原创 2021-01-26 16:13:37 · 3915 阅读 · 2 评论 -
AOP+自定义注解实现Redis分布式锁
一、场景定时任务,有过项目经历的开发者估计都不陌生,是实现一些定时执行重复操作需求的常见解决方案。在单机的情况下,定时任务当然是越用越爽,简单粗暴直接cron表达式走起就行了,但是在微服务的场景下,要考虑多实例的问题。比如一个定时任务,由于被部署了在多台机器上(或同一台不同端口),这时候,可能会出现定时任务在同一时间被多次执行的问题。为了保证在同一周期内,只有一个定时任务在执行,其他的不执行,可以采用redis分布式锁、数据库锁、zookeeper锁等方式去实现。本文采用redis分布式锁的思路去实原创 2021-01-15 16:38:05 · 598 阅读 · 1 评论 -
解决前后端LocalDateTime日期格式转换问题
场景:后台通过实体接收参数,使用POST,前端通过Json的形式进行交互。前端传 "2020-10-18 11:20:23" 这种格式的时间时,后端无法接收,报解析异常。解决:@JsonFormat后端的 LocalDataTime 只能解析类似【 2020-01-01T10:00:00】 这样的格式。只要在后端的实体类,相应的属性上加如下注解,即可解决。@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "G..原创 2020-10-18 16:00:22 · 7484 阅读 · 2 评论 -
绝对好用!Java 变量名蛇形转驼峰方法
后端数据库变量为蛇形,即以下划线 _ 分割,但是前端要求返回的数据为驼峰命名,怎么办?手动改?当然是写方法转换啦~蛇形转驼峰算法如下: /*** * 下划线命名转为驼峰命名. * * @param para 下划线命名的字符串 */ private String underlineToHump(String para) { if (StringUtils.isBlank(para)) { r...原创 2020-06-02 10:58:25 · 2661 阅读 · 2 评论 -
Java 根据角色权限查询菜单列表(递归)
今天遇到一个新的需求,要求后台可以根据用户的角色来配置前端的菜单权限列表。其实就是很常见的需求,后台根据用户的权限来展示对应的导航菜单。 设计了2个表。DDL如下。菜单地址表CREATE TABLE `t_app_bar_url` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `url` varchar(255) DEFAULT NULL COMMENT '地址', `name` varc...原创 2020-05-29 17:10:31 · 5983 阅读 · 2 评论