java常用第三方类库

2023-10-26

几乎每个程序员都知道要“避免重复发明轮子”的道理——尽可能使用那些优秀的第三方框架或库,但当真正进入开发 时,我却经常发现他们有时并不知道那些轮子在哪里。最近,我在业余时间带几个年轻的程序员一起做了一个很小的商业项目,而在一起开发的过程中,我几乎在所 有需要判断字符串是否为空的地方,看到了下面的代码:

if(inputString == null || inputString.length == 0){......}

除了字符串判断是否为空之外,还有很多字符串处理或其他数据类型判断的方法,缺少经验的程序员们往往都会想办法自己来写。这些代码当然都没有错,但我们应该尽可能去利用那些已经非常成熟的第三方库,以更标准的方式去解决这些通用的问题,并且提高开发效率。

下面便是我整理的,在大部分项目中使用到的优秀JAVA第三方库 ,供大家参考:

JAVA核心扩展

正如前面说到的字符串判断的例子,JAVA的标准库虽然提供了那些最基本的数据类型操作方法,但仍然对一些常见的需求场景,缺少实用的工具类。而另一些则是JAVA标准库本身不够完善,需要第三方库去加以补充的。

Apache Commons Lang

Apache Commons Lang是Apache最著名的JAVA库 (GitHub上的代码库),它是对java.lang的很好扩展,包含了大量非常实用的工具类,其中用的最多的有StringUtils,DateUtils,NumberUtils等。之前提到的代码利用StringUtils可以改写为:

if(StringUtils.isBlank(inputString)){...}

除了Apache Commons Lang,还有一些其他的Apache库也是对JAVA本身的很好补充,如Apache Commons CollectionApache Commons IOApache Commons Math

在Maven项目中加入Apache Commons Lang这个库:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.4</version></dependency>
Google Cuava

Google Cuava在国内项目中很少使用,但我合作过的一些国外JAVA工程师几乎都会推荐这个JAVA库。它包含了Google在自己的JAVA项目中所使用的一些核心JAVA库。包含了对:集合,缓存,并发库,字符串处理, I/O等各个方面的支持。另外Google开发的库总是以性能著称。

添加下面的引用,在Maven项目中加入这个库

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>19.0</version></dependency>
Joda-Time

Java SE 8之前的JAVA版本中对日期的支持是比较差的,Joda-Time被经常被使用来替换原有的日期系统,它能够支持更多的日历体系,并提供了很多非常方便的日期处理方法,而且它的性能也是非常出色的。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库

<dependency>
  <groupId>joda-time</groupId>
  <artifactId>joda-time</artifactId>
  <version>2.9.3</version></dependency>

Web框架

Web框架是一个应用最核心的部分,因此我总是推荐使用那些最标准的,并且有良好社区支持的框架,比如Spring和Struts。

Spring

Spring是一个开源的应用框架,它包含很多子项目比如Spring MVC, Spring Security, Spring Data,Sping Boot等等,几乎可以满足你项目上的所有需要。它也是我开发Web项目的首选后端框架。(GitHub上的代码库

添加下面的引用,在Spring MVC项目中加入这个库(以下仅引入Spring Core的支持)

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.2.5.RELEASE</version></dependency>
Struts 2

Struts 2 是Apache最有名的Web框架,它也是一个免费开源的MVC框架。Struts也能很好地支持REST,SOAP,AJAX等最新技术。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.28</version></dependency>

除了上面提到的两个最长哟你的Web框架之外,还有如Google Web ToolkitTapestry,Strips等一些优秀的框架可供选择 。

数据库(持久层)

持久层框架的选择对一个项目的成败同样非常关键,它会直接影响到系统的性能、质量、安全以及稳定性。

MyBatis

MyBatis是我最喜欢的数据库(持久层)框架,因为它完全是基于SQL语句的(通过SQL来提取数据并自动映射为所需的数据对象),能够为我带来足够的灵活性。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库(如需配合Spring使用,可选择对应的Maven库)

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.0</version></dependency>
Spring JDBC / Spring Data

Spring JDBC并不是独立的Spring子项目,而是一个整合在Spring核心库内,为JDBC操作提供基本封装处理的模块。通过简单的配置后,可以通过对Context中的jdbcTemplate进行调用来获得结果。

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Spring Data是Spring的一个子项目,提供了更加强大的持久层功能封装,和对象映射功能。它能与Spring MVC很好地整合。你可以利用JPA和CrudRepository来极大简化持久层的开发。

public interface EmployeeRepository extends CrudRepository<Employee, Long> {

    Employee findByFirstName(String firstName);

    List<Employee> findByLastName(String lastName);
}
Hibernate

可能是国内用得最广泛的持久层框架了,它非常强大,但用好它并不容易,你需要了解它的内部机制,否则可能会出现一些无法预见的性能问题,特别是在数据量特别大的时候。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.1.0.Final</version></dependency>

除了上面一些最常用的持久层库,还有几个优秀的库,比如 JDOJOOQApache DbUtils

日志

JAVA中也包含了日志记录功能,但它在处理日志分级,日志的存储,以及日志的备份、归档方面都不够出色,因此在项目中我们一般都会使用第三方日志库来处理日志。

SLF4J- Simple Logging Facade for Java (SLF4J)

SLF4J为我们提供了一个日志服务的抽象层,基于它你可以选择不同的日志实现,比如:java.util.logging,logback,log4j,当你需要改变日志实现组件时,不需要修改任何代码,只需要更改一些相应的配置就可以了。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version></dependency>
Apache Log4j

Log4j是最有名的日志组件,通过简单的配置后就能在程序中方便地记录各个级别的日志,它的日志文件能够根据不同的规则进行命名以及归档。

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.5</version></dependency>
Logback

Logback比Log4j更新,它被视为是log4j的一个替代者。它比log4j的性能更好,而且更完整地实现了SLF4J的接口,并且自带了更多的功能,比如自动压缩日志,更多的filter等。

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.5</version></dependency>

JSON

JSON已经成为最广泛使用的一种数据传输格式,因此程序中对JSON的处理也正变得越来越多。下面是我推荐的一些JSON处理库:

Jackson

Jackson是一个多用途的Java库,用于处理JSON数据。使用它可以很方便地在JSON数据和Java对象之间进行转换。(GitHub上的代码库

   ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
   User user = mapper.readValue(new File("user.json"), User.class);
Google Gson

Google开发的JSON库,可以实现JSON字符串与JAVA对象之间的转换,使用起来也非常方便。

   Gson gson = new Gson();
   String[] strings = {"abc", "def", "ghi"};
   gson.toJson(strings);  // ==> ["abc", "def", "ghi"]

图表

JFreeChart

能够为你生成各种类型的图表,并且支持多种输出格式,包括PNG和JPEG图片格式,以及向PDF,EPS,SVG等矢量图。

JasperReports

JasperReports 提供了一套完整的报表解决方案,帮助用户使用用Java语言来开发具有报告功能的程序。JasperReports的模版采用XML格式,从数据库中抽取 数据,并以PDF、HTML、XLS、CSV及XML等各种格式生成报表。它的一大优势是能够处理大数据量的报表。

测试

JUnit

JUnit是目前使用最广泛的JAVA单元测试库通过它,你可以i非常方便地编写自己的单元测试代码,并进行自动化测试。(GitHub上的代码库

    @Test    public void lookupEmailAddresses() {
        assertThat(new CartoonCharacterEmailLookupService().getResults("looney"), allOf(
            not(empty()),
            containsInAnyOrder(
                allOf(instanceOf(Map.class), hasEntry("id", "56"), hasEntry("email", "roadrunner@fast.org")),
                allOf(instanceOf(Map.class), hasEntry("id", "76"), hasEntry("email", "wiley@acme.com"))
            )
        ));
    }

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version></dependency>

Office文档处理

Apache POI

Apache POI是一个免费的开源库用于处理Microsoft Office文档。用它可以使用Java读取和创建,修改MS Excel文件,MS Word和MSPowerPoint文件。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.14</version></dependency>
docx4j

docx4j是另一套基于JAXB的Office文档(docx,pptx,xlsx)处理库。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j</artifactId>
    <version>3.3.0</version></dependency>

XML解析

JDOM

JDOM 是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。在 JDOM 中,XML 元素用 Element 表示,XML 属性用 Attribute 表示,XML 文档本身用 Document 表示。因此这些API都非常直观易用。(GitHub上的代码库

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom</artifactId>
    <version>2.0.2</version></dependency>
DOM4J

DOM4J是一个处理XML的开源框架,它整合了对于XPath,并且完全支持DOM,SAX,JAXP等技术。

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version></dependency>
xerces

Xerces是一个开放源代码的XML语法分析器。从JDK1.5以后,Xerces就成了JDK的XML默认实现

添加下面的引用,在Maven项目中加入这个库

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version></dependency>

其他值得关注的代码库

jSOUP

jSOUP提供了一套与外部互联网的网页(HTML)进行交互的API,能够让使用者非常方便地 利用CSS选择器来解析HTML页面,从而获取需要的内容。

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");
Lomobok

Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在IDE中加入Lombok,开发人员可以节省构建诸如 hashCode()和equals()这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。

Netty

Netty 是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户 端程序。也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。


———————————————————————————

文章转自《http://www.techug.com/java-libs-you-should-know》,多谢作者分享!




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java常用第三方类库 的相关文章

  • 数据库知识整理 - 数据库恢复技术(故障种类、数据转储、日志文件、恢复策略)

    主要内容 事务的基本概念 故障的种类 1 事务内部的故障 2 系统故障 3 介质故障 4 计算机病毒 数据库恢复技术 数据转储 登记日志文件 登记日志文件的作用以及原则 恢复策略 事务故障的恢复 系统故障的恢复 介质故障的恢复
  • 如何将CAD绘图软件的语言设置为中文状态下

    我们在进行使用CAD绘图软件来绘制图纸的时候 一般都需要建CAD编辑器进行设置一下在使用 那么 如何将CAD绘图软件的语言设置为中文状态下 具体要怎么来进行操作呢 那下面小编就来教教大家将CAD绘图软件设置为中文状态下的操作方法吧 希望对你
  • 关于struts2和javamail的配合使用

    这几天用到了javamail 开始写了个程序 建了个java项目 可以正常运行 但是后来加入到struts2项目中 就开始报错ClassNotFound之类的错误 解决方法是在myeclipse的安装目录下找到common文件夹 打开其中的
  • Arduino pro micro开发板的程序烧录问题

    Arduino pro micro是我大二的时候买的一个开发板 当时是玩Arduino开发板之后 尝试做一个小东西 但是买回来后 不知道程序怎么下载 多种尝试也没有成功 时隔多年 在家收拾东西翻出来后 再试了一下 发现我当时想多了 没好好地
  • IDEA教程之Activiti插件

    本文作者 Spring ZYL 文章来源 人生就是一个不断学习的过程 码农StayUp CSDN博客 SpringBoot全家桶 Java数据结构与算法分析 设计模式领域博主 版权声明 本文版权归作者所有 转载请注明出处 一 安装Activ
  • 《软件测试》第十四章 网站测试

    软件测试 第十四章 网站测试 14 0 前言 14 1 网页基础 14 2 黑盒测试 14 2 1 文本 14 2 2 超级链接 14 2 3 图片 14 2 4 表单 14 2 5 对象和其他各种简单的功能 14 3 灰盒测试 14 4
  • QQ和MSN 在线代码

    QQ在线聊天代码 a href img src images qq交谈 bmp alt qq交谈 width 68 height 29 border 0 a MSN在线聊天代码 a href target blank img src ima
  • Callable 和 Future

    Callable 和 Future 是 Java 并发编程中用于处理多线程任务的两个关键接口 它们通常与线程池一起使用 以实现异步任务执行和获取结果的功能 Callable Callable 是一个泛型接口 它定义了一个带有返回值的任务 与
  • 多线程爬虫的实现----threading库的使用

    1 作爬虫的时候为了提升抓取的速度 这个时候就需要开启多个线程同时抓取数据 今天就分享一下如何使用Python中的threading库实现多线程抓取数据 from shop import ShopSpider import threadin
  • 微服务框架相关 OpenFeign 源码

    目录 一 基础 二 初始化注册 三 FeignClient 自动配置 四 FeignClient 创建 五 网络请求的发出 六 负载均衡 SpringCloud Loadbalancer 一 基础 使用 OpenFeign 流程 项目中引入
  • 2如何识别操作系统_信创产业成为风口,如何“迁移”值得研究(二)

    在上一讲 信创产业成为风口 如何 迁移 值得研究 中 我们分析了什么是 信创 以及数据迁移在信创过程中的重要意义及其基本要求 本次文章中我们将继续分析 信创实践过程中数据迁移的难点及其解决之道 1难点1 迁移场景复杂 在信创实践过程中 随着
  • html搜索栏热搜效果,CSS3实战开发:百度新闻热搜词特效实战开发_html/css_WEB-ITnose...

    各位网友 今天这篇文章 我将手把手带领大家开发百度新闻首页的 新闻热搜词 特效 在这个特效中应用的知识点都很基础 如果你对这些还不清楚 可以关注我以前写的详细教程 今天讲这个案例 也是希望告诉大家 在开发一个特效的时候 请不要将问题复杂化
  • valn的基础配置

    vlan作业 1 交换机进行vlan配置 lsw1 lsw2 2 进行单臂路由的配置 3 DHCP配置 地址池的配置 端口启动
  • LR-ASPP论文

    论文地址 https arxiv org abs 1905 02244 摘要 我们提出了基于互补搜索技术的组合以及一个新颖的架构设计的下一代移动网络 MobileNetV3通过结合NetAdapt算法补充的硬件网络架构搜索 NAS 调整到移
  • 配置JAVA环境变量

    一 自行安装JDK 位置默认C盘 JDK全称是Java Development Kit 是整个Java的核心 包括了Java运行环境 Java工具和Java基础类库 JDK 是整个Java的核心 包括了Java运行环境 Java工具和Jav
  • 一文读懂 QUIC 协议:更快、更稳、更高效的网络通信

    作者 李龙彦 来源 infoQ 你是否也有这样的困扰 打开 APP 巨耗时 刷剧一直在缓冲 追热搜打不开页面 信号稍微差点就直接加载失败 如果有一个协议能让你的上网速度 在不需要任何修改的情况下就能提升 20 特别是网络差的环境下能够提升
  • 万得Wind量化与东方财富Choice量化接口使用

    接口需要付费 这里接口的付费和配置就不展开了 wind相对容易配置 直接用软件就可以点击并配置 东财请参考 Mac使用Python接入东方财富量化接口Choice 调试与获取数据 但有一点需要注意 wind使用量化接口的时候wind终端需要
  • 王炸功能ChatGPT 联网插件功能放开,视频文章一键变思维导图

    就在上周5月13日 Open AI 发文称 我们将在下周向所有ChatGPT Plus 用户开放联网功能和众多插件 这意味着什么 首先联网功能将使得ChatGPT不再局限于回答2021年9月之前的信息 能直接联网查询最新消息 而插件功能就可
  • BIOS启动过程详解

    BIOS 工作原理 最近几天在看 UNIX 操作系统设计 突然想到计算机是如何启动的呢 那就得从 BIOS 说起 其实这个冬冬早已是 n 多人写过的了 今天就以自己的理解来写写 权当一个学习笔记 一 预备知识 很多人将 BIOS 与 CMO

随机推荐

  • 19.3剪裁

    1 在固定管线中 裁剪是在世界坐标系中 2 在可编程管线中 裁剪是在规格化坐标系中 步骤 1 按照法向量和空间点定义裁剪平面 并归一化 2 根据世界观察投影变换矩阵相乘 求逆转置 即为需要的变换矩阵 3 变换矩阵与裁剪平面变换后就是需要的裁
  • numpy模块(2)

    1 利用布尔值来取元素 import numpy as np mask np array 1 0 1 dtype bool 1表示取对应的元素 0表示不取 arr np array 1 2 3 4 5 6 7 8 9 print arr m
  • Hadoop学习心得---二

    大数据运算解决方案MapReduce Hadoop的分布式计算模型MapReduce 最早是Google提出的 主要用于搜索领域 解决海量数据的计算问题 MapReduce有两个阶段组成 Map和Reduce 用户只需实现map 和redu
  • Three.js(学习)

    在vue项目中使用Three js的流程 1 首先利用npm安装Q three js 具体操作代码如下 npm install three 2 接下来利用npm安装轨道控件插件 npm install three orbit control
  • 表、栈和队列

    表 栈和队列 表 增强的for循环 List
  • DM6437 C64X+ EDMA 疑惑总结记录

    总结一下DM6437中的EDMA的使用出现的问题 方便以后再开发定位问题 1 EDMA Link 和 Chain的区别 link实现了DMA的自动重加载 非静态模式 需要两个param chain是不更新param set表 直接event
  • qt界面叠加视频OSD双层显示

    最终代码存放于 http download csdn net detail lzh445096 8849147 本人负责的是UI界面 提供给底层应用程序接口函数 此接口函数功能为向指定路径的文件中写入命令字符 应用程序去到该文件中读取到相应
  • 基于Protobuf协议的Dubbo与SpringBoot的结合

    文章目录 工程概况 父pom dubbo provider 通过proto3定义服务 打包发布服务 dubbo provider service实现服务 dubbo provider web提供服务 dubbo consumer dubbo
  • 依赖注入和控制反转的理解,写的太好了

    学习过Spring框架的人一定都会听过Spring的IoC 控制反转 DI 依赖注入 这两个概念 对于初学Spring的人来说 总觉得IoC DI这两个概念是模糊不清的 是很难理解的 今天和大家分享网上的一些技术大牛们对Spring框架的I
  • 互联网产品运作模式详解

    互联网产品运作模式详解 https www infoq cn article 3EVku39xVhJYs7ba9uk7 本文主要总结下移动互联网产品的市场运作模式 因为本身我是技术出身 对运作模式中的开发体系这 块相对熟悉 但是其他阶段也是
  • js: for in 循环对象

    var peopleObj man 2 2 2 woman 1 1 1 womanDoctor 100 100 100 for const prop in peopleObj if peopleObj hasOwnProperty prop
  • java将图片转为base64后出现的一些问题

    因为需要对接第三方接口 需要将图片转换为base64编码传参 手动转换base64使用postman完全是OK的 结果java中转换出来死活不行 p 将文件转成base64 字符串 p param path 文件路径 return thro
  • Linux下ps命令实现

    include
  • 思科实验-生成树协议STP

    生成树协议 英语 Spanning Tree Protocol STP 是一种工作在OSI网络模型中的第二层 数据链路层 的通信协议 基本应用是防止交换机冗余链路产生的环路 用于确保以太网中无环路的逻辑拓扑结构 从而避免了广播风暴 大量占用
  • vivado2021.1安装

    首先需要在官网注册一个账号 安装软件时需要使用 账号注册连接 xilink账号注册 vivado下载链接 xilink官网下载 使用官网下载需要注册账号 下载免费 vivado阿里云盘下载 vivado licence阿里云盘下载 官网下载
  • QStringLiteral(str)

    在看项目代码的时候 总会看到下面这种情况 QString str QStringLiteral 123rt QString用QStringLiteral str 来初始化 有点好奇 就查了下 记录一下 这是用QStringLiteral初始
  • Java:记录一下第一次面试经历(新希望六和)

    记录一下本菜鸡两个月前第一次面试新希望六合这家公司 那时的我很多都回答不上来 非常尴尬 不过这第一次面试经历也算是给足了我动力继续努力 记录一下这个第一次面试的题目 也算是记录一下那时候的我 做过什么样的项目 简单介绍一下你的项目 项目的整
  • 客户端请求的端口号是什么?

    我们知道服务器端是要指定和开放端口号的 比如 web 服务 http 请求的 80 https 的 443 端口 都要开放 否则无法请求成功 我们知道通信是由两端组成的 既然服务器需要指定端口 那么客户端呢 比方说我用 chrome 浏览器
  • 模型微调技术

    模型微调 一 迁移学习中的常见技巧 微调 fine tuning 1 1 概念 1 2 步骤 1 3 训练 1 4 实现 一 迁移学习中的常见技巧 微调 fine tuning 1 1 概念 将在大数据集上训练得到的weights作为特定任
  • java常用第三方类库

    几乎每个程序员都知道要 避免重复发明轮子 的道理 尽可能使用那些优秀的第三方框架或库 但当真正进入开发 时 我却经常发现他们有时并不知道那些轮子在哪里 最近 我在业余时间带几个年轻的程序员一起做了一个很小的商业项目 而在一起开发的过程中 我