
JAVA编程
文章平均质量分 81
isea533
《MyBatis从入门到精通》作者,MyBatis分页插件PageHelper作者,通用Mapper作者,个人网站:https://mybatis.io
展开
-
避免啰嗦,不要多此一举!
看到一段代码,写的比较啰嗦就用GitHub Copilot简化了一下,简化结果很简单,复杂度从273%降低到13%(复杂度使用IDEA插件。配合 IOC 使用时,像上面两个实现这样扩展就能增加新的策略,运行时扫描到就会自动注册,做到真正不修改任何代码,直接扩展新策略。你的判断条件和返回结果一致时,直接返回判断条件即可。,遍历放到 Map 中,没想到 Copilot 给出了一个更简单的实现!上面这个是 Copilot 给出的实现,比我常用的方式更简单,我没想到的地方是。的需求,这种方式很方便,附带消除了。原创 2024-06-06 09:58:52 · 622 阅读 · 0 评论 -
来看一段有趣的代码
这段代码是对图片进行缩放,如果宽和高大于500就进行缩放,有意思的地方是明明可以直接计算出缩放倍率,偏偏要从 100%(i++位置调一下也能避免一次无用功)一直尝试到符合为止,我测试的图片是宽795高528,一直尝试到62%才满足,如果图片缩放涉及IO操作,消耗的资源可能会更大,经过查看 itextpdf 源码发现。宽高限制500的情况下和其他PDF格式的发票合并到一起时明显更窄,样式不统一不好看,通过查看PDF的宽高,经过计算将宽度设置为 595 的时候样式是统一的。原创 2024-05-11 11:32:33 · 602 阅读 · 0 评论 -
编码技巧:多条件判断拼接字符串
在写代码业务逻辑的时候,有时候需求稍微变化一下都让代码变的很麻烦,如果只在现有代码基础上硬改,可能会让可读性降低,本文通过一个例子来演示字符串拼接的变化。后来连上面这种写法中如果不满足,前面就是"",此时如果后面条件满足,拼接时会额外带上and导致语法错误,如果不嫌麻烦把and这样倒是能实现功能了,但是不易于阅读,看着就很乱。我们来看看GitHub Copilot会如何解决上面的变化。原创 2024-03-15 08:00:00 · 413 阅读 · 0 评论 -
GitHub Copilot - Elasticsearch 和 MySQL 单表查询耗时比对
当单表数据库超过百万后,数据库查询明显变慢,为了对比 Elasticsearch 的效果,将百万级的测试数据导入到 Elasticsearch 中对比看看效果。导入和查询 Elasticsearch 的过程完全通过辅助编码。原创 2023-12-13 11:45:00 · 627 阅读 · 0 评论 -
Linux环境Runtime如何运行子进程?
这是一个Linux环境特定的问题,最简单避免的方式就是在Linux环境制作Linux的安装包。如果遇到类似问题,可以查看jres中所有可执行程序是否有执行的权限。原创 2023-09-06 08:45:00 · 521 阅读 · 0 评论 -
事务性发件箱模式:解决数据库事务和消息的一致性
事务性发件箱模式是一种解决数据库事务和消息的一致性问题的方法。它的基本思想是,将消息的发送操作与数据库的更新操作绑定在一起,保证这两个操作是原子性的,要么都成功,要么都失败。在传统的数据库应用中,数据库事务与消息的发送是独立的两个操作,如果数据库事务因为某种原因失败了,消息可能已经被发送出去了,这就导致了数据的不一致性。事务性发件箱模式的目的就是解决这个问题。事务性发件箱模式的实现方式有多种,其中一种是将消息的发送操作与数原创 2022-12-07 21:00:00 · 1443 阅读 · 0 评论 -
logback 集成 logstash
到这里可以看到,上面提供的完整配置中,没有介绍常见的控制台输出,其他都是必要的配置。input {tcp {}}output {}stdout {}}上面的配置会为每个appname创建对应的索引,在 Kibana 中的 DavaView 可以配置app*索引来查看所有应用的日志。原创 2022-11-26 12:17:21 · 3686 阅读 · 5 评论 -
实时输出Java8 HashMap数据结构
看过 Java 8 HashMap 源码的知道底层数据结构是数组、链表和红黑树实现的,从Debug调试或者序列化输出的都是K,V值,没法直观的看到上述的数据结构,为了直观的看到数据结构存储方面的变化,本文通过动图演示HashMap的结构变化。下面开始,当链表长度超过8时,会转换树,转换树时会判断 table数组的长度是否超过64,由于此时长度为16,会先通过。等到下一次的时候,链表长度超过8,数组到了64,链表就转换为了红黑树(树形结构中B为黑,R为红)。链表长度10的时候,由于数据大小32,会先。原创 2022-11-23 19:08:16 · 1154 阅读 · 0 评论 -
Java Process:另一个程序正在使用此文件,进程无法访问
debug过程中,修改 getCommands 中的 fileName 时也能成功,有时候修改就不能成功,有时候文件名短的时候能经常性的成功,偶尔会有长文件名的时候也能成功。,错误已经很直接了,但是由于在 Mac 和 Linux 环境没有问题,因此觉得类似的代码在 Windows 上也不存在问题。” 时,这个文件大概率就是你操作的文件,如果找不到其他被使用的地方,可能就是你自己重复使用了同一个文件。最近处理奇怪的问题时,犯了个低级错误,浪费了不少时间,甚至都看了 jdk 底层的 c 代码。原创 2022-09-28 20:36:18 · 6767 阅读 · 0 评论 -
Java 泛型的读写规则:PECS
PECS 是 “Producer Extends Consumer Super” 的缩写,是 Java 泛型中的重要用法。PECS 就是当你需要遍历某一个类型和子类的集合数据时,集合相当于生产者,此时泛型使用 。当需要往某个类型的集合添加类和子类实例时,集合相当于消费者,此时泛型使用 。对 Java 泛型 PECS 的讲解中,大多是从参数使用的角度来的,本文结合调用传值和参数使用对比来看 PECS 的两种情况。当我们想要遍历读取某个集合时,需要使用 ,用上面类型为例,为了方便查看编译时的错误,直接上截图:原创 2022-09-26 19:30:00 · 1347 阅读 · 0 评论 -
【过时】Skywalking Java 插件开发注意点
官方文档:Java Plugin Development Guide官方插件: https://github.com/apache/skywalking-java正常按照官方文档操作后,测试时,可以参考官方 SkyWalking的远程调试。我直接把插件引入到项目中后增加断点即可调试(需要注意和 agent plugins目录中的 jar 一致)。测试过程中一直没有效果,debug才发现在执行过程中抛出了异常,异常没有输出,只能 debug 看到,第一次遇到的错误是 net.bytebuddy 相.原创 2022-05-09 19:00:00 · 1040 阅读 · 0 评论 -
seata-spring-boot-starter 启动配置
2019年看seata时版本还是0.8,再次接触时已经1.4.2了。历史文章:Seata 分布式事务启动配置分析Seata 分布式事务功能测试(一)Seata 分布式事务功能测试(二)Seata 分布式事务功能测试(三)seata特殊的配置文件形式使得入手很容易蒙,最近看官方博客的部分文档发现可能有不少人都有类似的感觉,最主要的原因就是 registry 这个配置文件名字起的不好。如果改成 bootstrap 会更容易理解。seata支持非常多的配置和服务注册发现方式,想要使用zookee原创 2021-06-11 13:14:41 · 4246 阅读 · 5 评论 -
VFS - 虚拟文件系统的加载和导出
再开始 VFS 具体内容前,先看看实现过程中踩到的两个坑。两个坑我博客2012年有一篇 Java解压缩zip - 解压缩多个文件或文件夹,后续工作中偶尔也会用到 ZIP 解压缩的功能,大多数都直接用的现场类库封装的方法。个别情况下需要基于纯内存(不从磁盘读取文件,压缩不写入磁盘)解压缩 ZIP 文件时也直接操作过 Java API。最近遇到一些坑,有些是很基础的内容,本以为自己可以随便玩这些API了,结果被自己坑到了,都是一些细节。如何关闭 Java 文件流我用 ZipOutputStream 导原创 2021-05-23 16:18:29 · 2009 阅读 · 1 评论 -
VFS - 虚拟文件系统基本操作方法的封装
接前一篇 VFS - 代码生成器预览功能实现 ,上一篇讲到了 mkdirs 封装创建目录的方法,接下来先处理前文中的BUG、封装写入文件的基础方法,再扩展一对加载系统目录和导出到系统目录的方法,让VFS虚拟文件系统和真实操作系统真正交互起来。在开始新的内容之后我们先修正前一篇文章中的BUG。文件的 BUG在前一篇文章中,认为一个文件的 name 和 type 同时决定了唯一的一个文件,这个设计没有问题,但是经过在不同操作系统测试发现,同一个文件名只能在一个目录中出现一次,名字决定了唯一的一个文件,类型原创 2021-05-15 18:09:26 · 738 阅读 · 0 评论 -
VFS - 代码生成器预览功能实现
起因去年底计划1月份开源新版 mybatis-mapper 并发布 1.0 的正式版,整个项目的主要功能已经稳定,为了更方便开发人员使用,计划提供一个代码生成器,然后就把精力投入代码生成器的设计和实现,由于石家庄疫情和多方面的原因搁置。后来有时间之后就开始设计并实现最简单的代码生成器,代码生成器非常简单,功能很强大,这是一个和 MyBatis 没有直接关系的工具,因此不包含在 mybatis-mapper 项目中,mybatis-mapper项目中会包含一个可用的代码生成器 jar 包和模板示例文件,这原创 2021-05-13 23:08:08 · 5188 阅读 · 8 评论 -
Dubbo, Hessian 序列化注意事项
最近遇到一个问题,A 服务调用 B 服务时,返回值反序列化时,POJO对象变成了Map类型。在B服务单独测试的时候一直还原不了,在 A 服务进行测试的时候,跟到序列化数据时才看到原因。原因很简单A 服务的接口方法返回的结果是一个接口,接口的实现不在 A 服务的 API 包中,因此在 B 服务找不到该接口真正的实现类,在 B 服务调用接口返回结果反序列化找不到具体的类型时,就会以 Map 类型进...原创 2019-10-28 19:26:31 · 3225 阅读 · 0 评论 -
Java 操作 office 的辅助工具
当使用 docx4j, poi等工具处理 office 文件时,如果想要实现复杂的功能,使用明面上的简单接口已经很难实现。这个时候如果配合一个工具,按照 XML 结构递归处理,就能实现很多强大的功能。这里说的工具就是 **Open XML SDK 2.5 for Microsoft Office **:下载地址:https://www.microsoft.com/en-us/download...原创 2019-10-23 16:33:09 · 1844 阅读 · 0 评论 -
Jacob 使用细节优化
Jacob 可以用来做很多事,我这里主要用到了通过 office 转 pdf 的功能。在使用过程中,偶尔会出现(1%的概率)进程异常,出现弹框等问题导致程序假死。为了解决类似问题,在使用过程中,可以从以下细节进行优化。1. 只读模式使用 office 时,如果文件被占用,在打开始会弹框进行提示:出现该弹窗后会导致程序卡住不动。如果改为只读模式,就不存在这个问题,代码如下:注意上面...原创 2019-10-20 23:46:40 · 2404 阅读 · 3 评论 -
JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
什么是序列化 java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。 正确使用序列化机制 一般而言,要使得一个类可以序列化,只需简原创 2012-08-13 13:35:57 · 10518 阅读 · 2 评论 -
JAVA Annotation(注解):java.lang.annotation
使用注解功能时,如果需要用反射读取注解,就必须设置@Retention(RetentionPolicy.RUNTIME),因为默认情况下为CLASS,读取的时候会报异常@Retention可选参数:RetentionPolicyCLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。RUNTIME原创 2012-08-13 16:24:31 · 9986 阅读 · 0 评论 -
获取html页面全部标签或者标签内容
首先是两个正则表达式:1.]+>:这个正则表达式可以匹配所有html标签,可以100%匹配(注意页面编码方式和读取的编码方式)。2.>[^下面上程序:import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.util.regex.Matc原创 2012-10-30 14:54:48 · 11569 阅读 · 2 评论 -
Java Winform 开发 技术要点 记录
很早之前写了一个批量导入excel数据到Oracle的程序,成批导入,每批都有一个不同的上级编码,每导入一批,都要动手修改程序代码...批量导入过程中,这些excel的名字是需要和数据库中存的名字保持一致,否则就找不到数据。在这个程序里面,这个名字就是村名,但是客户给的数据名字都是口语中的,很早以前导入数据前修改400以上的excel文件,修改的头疼。为了解决上原创 2012-11-09 16:55:34 · 9834 阅读 · 0 评论 -
Java 处理Map<K,V>的方法
1.删除map中值为null,"",0,0.0的map/** * 检查map,去除其中为0或者为"",或者为Null的键 * @param map */ @SuppressWarnings("rawtypes") public static void checkMap(Map map){ checkMap(map, true, true, true); }原创 2012-11-15 17:08:41 · 10328 阅读 · 0 评论 -
Java 判断操作系统类型(适用于各种操作系统)
最近一段时间写一个授权的程序,需要获取很多信息来保证程序不能随意复制使用,必须经过授权才可以。为了限制用户使用的操作系统,必须有统一的方法来获取才可以。在JAVA中,通过System.getProperty("os.name")来获取,通过参考:http://lopica.sourceforge.net/os.html 来实现各操作系统的判断。针对windows原创 2012-12-29 11:21:22 · 76456 阅读 · 13 评论 -
Java 获取系统信息和服务器信息
Java 获取系统信息可以获取一些基本的电脑信息和服务器信息,还有更多的信息没有写进下面的方法:import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Date;import java.util.Formatter;import java.util.Locale;import ja原创 2012-12-20 16:45:18 · 17024 阅读 · 1 评论 -
[Java 常用类库]:DateUtils(严格日期转换通用类)
该类库由于设置lenient为false,所以执行的是严格的日期转换(判断日期字符串是否正确我通过会严格转换日期捕获异常来判断)。例如:2013-2-30这样的日期,在不严格(宽松)的条件下,可以转换成功。转换结果为:2013-3-2 0:00:00在严格的情况下就会报错:Exception in thread "main" java.text.ParseExc原创 2013-01-06 15:57:09 · 15706 阅读 · 0 评论 -
[Java 常用类库]:StringCompress(字符串压缩)
[Java 常用类库]StringCompress(字符串压缩)方法说明:1.compress(String):对字符串进行ZIP压缩饼返回字节数组2.decompress(byte[]):将压缩的字节数组还原成字符串用途:保存到数据库BOLB中。import java.io.ByteArrayInputStream;import ja原创 2012-11-19 15:51:39 · 15315 阅读 · 0 评论 -
[Java 常用类库]:PropUtils 属性文件类
Java读取和修改properties文件方法说明:1.Properties getProperties(String filepath):根据路径读取属性文件,返回Properties类;2.void SaveProperties(Properties prop,String filepath):保存属性到指定路径(如果文件不存在,请先创建File);3.String原创 2013-01-09 13:31:42 · 3555 阅读 · 0 评论 -
百度贴吧一键签到
首先声明,本工具核心代码来自"java 吧"的大婶"╱―★神★―╲",本人只是根据作者发布的原帖以及讨论内容写了一个界面和一个抢到的功能。下载地址请到贴吧该贴进行下载:百度贴吧签到源码:http://tieba.baidu.com/p/2075392746我增加的这个界面源码在该页面也有下载地址。下面上截图:签原创 2013-01-09 13:48:58 · 5362 阅读 · 0 评论 -
存入数据库的Date类型只有年月日,没有时分秒的原因和解决办法
问题:存入数据库的Date类型只有年月日,没有时分秒我尝试过几种方式,结果都是年月日,明明有些地方可以有时分秒...后来想到,所有和时间有关的地方,有一个地方我没有去注意。我是用jboss的hibernate插件生成的对象和hbm.xml配置文件,虽然我配置了主键的类型,但是其他字段我都用的默认的,经过检查hbm.xml文件,发现一个问题。原因:hibernat原创 2013-01-29 16:52:18 · 20592 阅读 · 0 评论 -
彻底删除jdk - java -version和环境变量设置无效的可能情况
<!--#ad_cen {height:0px; width:0px; color:white}-->我电脑上安装了jdk6.0、jdk6.0_38和jdk7。我环境变量设置的jdk6.0_38,但是在CMD中输入java -version 显示的一直是jdk7,将jdk7卸载后,就开始报错;Error: could not open `C:\P原创 2013-01-29 11:55:58 · 13623 阅读 · 3 评论 -
【Swing基础】setPreferredSize和setSize的区别及用法
首先看 @那十无忧 的【Swing基础】布局管理器 - LayoutManagerhttp://tieba.baidu.com/p/2101752057我以前很喜欢borderlayout的布局方式,每次想特别调整每个区域的大小,但是每次将一个panel放入到north或者其他4个区域时,总是达不到想要的效果,刚刚才发现原来setPreferredSize和setSize是有区别的原创 2013-02-20 09:34:21 · 41327 阅读 · 2 评论 -
Excel通用导出List<Object>对象到excel文件
很早之前写过一个通用的读取模块,使用比较麻烦,当时只写了读取,没有写文件的功能。原文章:Excel通用读取模块这次的这个方法,不需要很麻烦的在类中写参数,但是需要配置一个xml文件。程序根据xml文件来对List对象进行格式化输出。程序中只需要调用一个方法即可完成。方法:使用该方法的方法:String xmlPath原创 2013-02-25 17:26:04 · 8183 阅读 · 1 评论 -
Xstream转换xml到Object的特殊情况
以前转换的时候从来没有遇到过问题。。今天(准确说是昨天晚上)遇到了一个无法理解的问题。以前在遇到如下XML时: 测试例子 132 133 134 会写一个Tests类,包含String desc和List ts,类Test有一个int id...这样转的时候是没有任何问题的。当遇原创 2013-03-31 00:12:10 · 4362 阅读 · 3 评论 -
[Java]EasyXls - 操作excel很简单
由于经常操作excel,很想避免每次读取、写入excel时繁琐的switch判断,然后转换类型,从对象取出或存入对象,所以就有了EasyXls,在我博客有我之前写过的两篇博客,分别写的是通用的读取excel和写入excel,当时整的不是很方便,所以我后来需要用到时,我重新写了读取和写入。项目地址:https://code.google.com/p/easy-xls/SVN地址:sv原创 2013-04-11 20:23:26 · 4319 阅读 · 0 评论 -
SQL转Java代码小工具
工作中使用SQL的时候很多,当使用Hibernate的时候,经常遇到多行的SQL,通常在PL/SQL或其他地方写好SQL,测试没问题后,需要将SQL写到程序代码中,多行SQL需要拼接字符串,手动一行行添加很不方便,所以,既然经常会遇到,就写个小工具来自动处理吧。该工具使用JAVA进行开发,我上传的程序已经打包成exe了(运行仍然需要系统有jre),源代码会在这里全部贴出,因为只有一个类原创 2013-06-08 20:35:58 · 6679 阅读 · 5 评论 -
编程之“与、或(&|)”的使用技巧
因为手头开着Dev C++,所以示例代码用C语言来演示了,用JAVA的道理是一样的。先看一段基本的代码:#include int PRIVATE = 0x1;int PUBLIC = 0x2;int FINAL = 0x4;int STATIC = 0x8;int main(){ int yu(int a,int b); int isPRIVATE(i原创 2013-07-06 23:49:37 · 2809 阅读 · 0 评论 -
[破解]java打包Exe工具 - Jar2Exe Wizard
打包java文件为exe的方法和软件有很多,还有一些开源的软件和一些免费的软件。我用过的所有打包exe软件中,Jar2Exe Wizard是最好用的,但是只有一个月的试用期,需要的可以从官网下载。这里提供的Jar2Exe Wizard可以任意注册,免除试用期。下面上使用流程图:1.打开程序后:2.随意输入,点击注册(只需要注册一次原创 2013-06-21 19:27:35 · 14851 阅读 · 3 评论 -
JAVA深层拷贝 - DeepCopy
方法实现很简单,提供两中方式: 一种是序列化成数据流,前提是所有对象(对象中包含的对象...)都需要继承Serializable接口,如果都继承了那很容易,如果没有继承,而且也不打算修改所有类,可以用第二种方式。 第二种是将对象序列化为json,通过json来实现拷贝,这种方式需要用到net.sf.json.JSONObject。原创 2013-07-19 08:50:43 · 12968 阅读 · 2 评论 -
【送给新手】重复代码解决示例一
举例说明了遇到重复代码应该如何去处理。原创 2013-07-05 11:47:06 · 10137 阅读 · 0 评论