Freemarker 操作字符串substring(start,end)从一个字符串中截取子串。1234567891011start:截取子串开始的索引,start 必须大于等于 0,小于等于 endend: 截取子串的长度,end 必须大于等于 0,小于等于字符串长度,如果省略该参数,默认为字符串长度。例子:${'str'?substring(0)} 结果...
阅读全文 »

JVM 字节码指令大全,用到的时候来这查阅即可。 字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 0x06 iconst_3 ...
阅读全文 »

引言在项目的开发中,代码分层经常简单划分为 Controller、Service、Mapper三层,但是并没有把职责边界划分清晰。经常会出现以下情况: Controller 层出现业务逻辑。 Service 层大而笨重,甚至有可能在 Service 层出现 Mapper 层应关心的 Sql 拼接等问题。 这样往往造成代码无法复用,并且各分层的职责边界不清晰,后续代码维护起来会非常麻烦。 在真正的团...
阅读全文 »

今天分享一个生成静态文档的工具 JApiDocs。 首先看一下生成效果 和 Swagger 对比优点 和 Swagger 相比,JApiDocs 对现有代码无任何侵入,只需按 javadoc 格式添加注释,就能生成文档。 缺点 JApiDocs 适合生成静态文档,目前没有 Swagger 的调试功能。 需要解析的对象必须在项目的源码中,不支持 Jar 包内的注释解析。 下面来快速入门首先引入依赖1...
阅读全文 »

引言: 最近有个需求:后端所有数据的 ID 字段返回前段时均需要加密处理,前端传入后端需要解密处理,你会如何设计呢? 普通做法: 返回数据时直接调用工具类进行 ID 字符串的加密,前端传入数据后再调用工具类进行 ID 的解密 这样做的问题是所有地方都需要进行加解密的处理,但是此操作和业务无关,不应该被感知,所以本文带大家来从框架层面解决这个问题。 方案一:无感知版本 需按以下规范使用1、返回前端数...
阅读全文 »

在 Spring Boot 项目中,提供了对 Liquibase 的内置支持。 什么是数据库版本控制?为什么要进行数据库版本控制?可参考我上一篇文章 SpringBoot 集成数据库版本管理工具 Flyway。 Liquibase 通过在变更日志(Change Log)文件,配置每一个变更集(Change Set),实现数据库变更的管理。 Liquibase 提供了多种格式,如下: XML For...
阅读全文 »

在 Spring Boot 项目中,提供了对 Liquibase 的内置支持。 引言 什么是数据库版本控制?为什么要进行数据库版本控制?可参考我上一篇文章 SpringBoot 集成数据库版本管理工具 Flyway。 Liquibase 通过在变更日志(Change Log)文件,配置每一个变更集(Change Set),实现数据库变更的管理。 Liquibase 提供了多种格式,如下: XML ...
阅读全文 »

为什么要进行数据库版本控制?假设我们有一个名为 Shiny 的项目,其主要交付项目是一个名为 Shiny Soft 的软件,该软件连接到名为 Shiny DB 的数据库。最简单的图可能看起来像这样: 但是在大多数项目中,我们的数据库都是像以下这样:通常,我们的环境不仅仅只有一套,一般来说会有 DEV、TEST、PROD 三套环境。而在每次发版的时候,我们可能都会对数据库的表结构进行新增和变更,又或...
阅读全文 »