Java加载本地路径文件
说明Java中加载文件是通过ClassLoader来加载的,先获取到文件路径,然后在通过File或InputStream加载到内存中 一般加载的访问有lass.getResource和class.getClassloader().getResource()两种 class.getResource() 默认从自己所在的包的路径开始加载, class.getClassloader().getResource() 默认从classpath路径加载,也就是项目的resources目录开始 示例代码Java类的路径在工程目录下的src/main/java/com/kewen/demo/classloader/ResourceTesta资源文件路径为工程目录下的src/main/resources/com/kewen/demo/classloader/a.jsonb资源文件路径为工程目录下的src/main/resources/b.json 1234567891011public class ResourceTest { public static void...
Maven插件及编译配置
插件指定打包版本123456789101112<plugins> <plugin> <!-- 编译时使用 JDK 版本 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>8</source> <target>8</target> </configuration> </plugin></plugins> SpringBoot 打包插件1234567891011<plugins> ...
Netty基础工程搭建
概念Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程,但是你仍然可以使用底层的 API。 Netty 的内部实现是很复杂的,但是 Netty 提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty 是完全基于 NIO 实现的,所以整个 Netty 都是异步的。 Netty 是最流行的 NIO 框架,它已经得到成百上千的商业、商用项目验证,许多框架和开源组件的底层 rpc 都是使用的 Netty,如 Dubbo、Elasticsearch 等等。下面是官网给出的一些 Netty 的特性: 设计方面 对各种传输协议提供统一的 API(使用阻塞和非阻塞套接字时候使用的是同一个 API,只是需要设置的参数不一样)。基于一个灵活、可扩展的事件模型来实现关注点清晰分离。高度可定制的线程模型——单线程、一个或多个线程池。真正的无数据报套接字(UDP)的支持(since 3.1)。易用性 完善的 Javadoc 文档和示例代码。不需要额外的依赖,JDK 5...
JSqlParser使用语法
1. 查询语句构造 select1select * from user 1234567891011public void plainSelect() throws JSQLParserException { Statement parse = CCJSqlParserUtil.parse("select * from user"); Select select = (Select) parse; PlainSelect plainSelect = select.getPlainSelect();}//或者使用下面的构造public void plainSelect2() throws JSQLParserException { Select select = SelectUtils.buildSelectFromTable(new Table("user")); PlainSelect plainSelect = select.getPlainSelect(); ...
JSqlParser强大的SQL改写工具-概念
1. 说明JParser 是一个好用的SQL处理工具,它的强大之处在于可以解析SQL并根据条件随意修改SQL 对于需要某些全局特性的SQL,如添加租户,删除SQL改为逻辑删除、构建动态表等可以实现统一处理,避免业务开发疏忽某些条件参数等。 当然,SQL改写避免不了性能的损耗,它需要解析SQL,修改完成之后再构造SQL,对于高并发场景还是应当慎用 2. 概念对于JParser来说,我也是一个初学者,现在将一些对于框架的理解分析一下。 2.1. Expression:表达式大多数方法都是基于它的实现,而且基本上后续大部分的入参都是它,基本属于顶级的存在 2.2. Select 查询这是对于查询语句的封装,是一个抽象接口,select查询语句就会解析成它。 其实现类有以下集中 PlainSelect 一般的查询语句 ParenthesedSelect:带括号的查询语句,一般用于in子句中 WithItem: with as( )...
MybatisPlus插件使用
插件原理MybatisPlus的插件是基于mybatis的intercepter扩展来的,其本质是在mybatis的一个插件维护一组自己的插件组,并挨个执行 其主类为MybatisPlusInterceptor 12345678910111213141516171819202122232425@Intercepts( { @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class}), @Signature(type = StatementHandler.class, method = "getBoundSql", args = {}), @Signature(type = Executor.class, method = "update", args =...
kewen-framework-auth框架使用案例
1. 说明此工程是kewen-framework-auth框架的示例工程 API接口已经发布在Apifox上kewen-framework-auth框架接口,可以配合使用 通过会议室管理这个具体的案例演示描述了权限框架的使用 单独列出示例工程描述kewen-framework-auth的实际场景,一方面解决开源许可的冲突,一方面更能反映出对框架的引用,更具有独立性 本文以会议室、会议室预约功能举例说明 2. 工程结构1234567891011kewen-framework-auth-sample├─java│ ├─config 配置类│ ├─controller 列表功能,对相关的注解有测试代码│ ├─mp 测试表自动生成的测试代码│ ├─response 统一异常处理、登录成功返回转化等│ └─AuthWebSample ...
MybatisPlus增加Mapper全局自定义方法
说明当MybatisPlus自带的方法不满足我们使用时,我们需要新增全局的通用方法。 实现主要分为以下三个步骤: 新建一个Mapper类来调用, 然后新建一个方法处理器处理新建的公共方法, 最后重建SQL注入器, 自定义Mapper新建一个Mapper继承BaserMapper 12345678910public interface AdviceMapper<T> extends BaseMapper<T> { /** * 批量插入更新 * @param entityList * @return */ int insertOrUpdateBatch(@Param("list") List<T>...
MybatisPlus自定义批量插入更新问题及解决
说明MybtaisPlus自带有批量插入和插入更新,但是其实自带的是有问题的,它是根据单条数据逐个处理的,所以说虽然是批量,实际上也是一条一条数据插入的,对于大量的数据插入来说,无意是不能接收的。 验证自带的插入更新批量插入其余的引入等就不多说了,这里直接插入一组数据 12345678910111213/** * 测试批量插入 */@Testpublic void insertBatch(){ List<MeetingRoom> roomList = Arrays.asList( new MeetingRoom().setName("第一1个会议室").setPlace("第一个地点").setUserCount(11).setIsPhone(1).setIsProjector(1).setIsVideo(1), new...
kewen-framework-auth框架说明
1. 框架简介kewen-framework-auth...

