Home » 终极

Tag Archives: 终极

Hibernate教程-终极指南

编者按:Hibernate ORM(简称Hibernate)是一个对象-关系映射框架,用于将面向对象的域模型转换为传统的关系数据库。Hibernate通过将直接的持久性相关的数据库访问替换掉,而高级对象处理功能来替换,解决了对象-关系间不匹配的问题。 Hibernate是最流程的Java框架之一。为此,我们在Java Code Geeks提供了大量的教程,点击这里查看它们。 现在,我们想要创建一个独立的、具有参考性的文章,来提供一个关于如何使用Hibernate的框架,并且帮助你快速开启你的Hibernate应用开发。开始享受吧! 目录 1. 简介 2. 项目搭建 3. 基础知识 3.1. SessionFactory 和Session 3.2. 事务(Transactions) 3.3. 表(Tables) 4. 继承(Inheritance) 5. 关系(Relationships) 5.1. 一对一 5.2. 一对多 5.3. 多对多 5.4. 组件(Components) 6. 用户自定义数据类型 7. 拦截器(Interceptors) 8. 源码下载 简介 Hibernate是Java世界里最流程的对象/关系映射框架(ORM)之一。它允许开发者将普通的Java类的对象结构,映射到数据库中的关系结构。借助于ORM框架,我们的一些工作,比如将内存中的对象实例存储到持久化的数据库,和加载这些数据到原来的对象结构,都变得更加容易。 同时,这些ORM解决方案,比如Hibernate,旨在从那些用于存储数据的数据库产品中建立抽象层。这样,就能够面向不同的数据库产品使用相同的Java代码,而不需面向不同的数据库编写不同的代码,来处理其中细微的差别。 Hibernate也是一个JPA提供者,这意味着它实现了Java持久化API(JPA)。JPA是一个独立于厂商的规范,用于定义Java对象和关系型数据表的映射关系。在终结系列中另一篇文章已经详细解释了JPA,所以我们在本文将重点介绍Hibernate,因此,我们也不会使用JPA注解,而是使用Hibernate专有的配置文件。 Hibernate由三个不同的组件组成: 实体(Entities):Java类(普通Java对象),用于在Hibernate中映射到关系型数据库系统的表。 对象-关系元数据(Object-Relational metadata):实体和关系型数据库的映射信息,可以通过注解(Java 1.5开始支持)实现,或者使用传统的基于XML的配置文件。这些配置信息,用于在运行时执行Java对象和数据库数据的存储和恢复。 Hibernate查询语言(HQL):使用Hibernate时,发送到数据库的查询,不必是原生的SQL格式,而是使用Hibernate专有的查询语言。这些查询语句,会在运行时被翻译成当前应用正在使用的数据库对应方言;所以说,HQL格式的语句是独立于特定数据库供应商的。 在本教程,我们将解释这个框架的各个方面,同时开发一个简单的Java SE应用程序,功能主要包括存储和检索关系型数据库的数据。我们将要使用到的类库/环境如下: maven >= 3.0 :编译环境 Hibernate(4.3.8.Final) H2 (1.3.176):关系型数据库 项目搭建 第一步,我们通过命令行创建一个简单的Maven项目: mvn archetype:create -DgroupId=com.javacodegeeks.ultimate -DartifactId=hibernate 这个命令会在文件系统中生成如下结构: |-- src | |-- main | ...

Read More »

多线程和并发面试问题与答案 – 终极列表(PDF下载)

编者按: 并发一直是开发者的挑战,编写并发程序可以是非常困难的。当涉及并发,有一系列事情可能会出现和系统复杂性大幅提高。但是,编写健壮的并发程序的能力是开发者的一个伟大的工具,可以帮助建立复杂的企业级的应用。在这篇文章中,我们将讨论可用于编程面试的不同类型问题,以评估面试者对并发和多线程的的认识问题。这些问题不仅是Java的特异性,同时也关于常规的编程原则。享受 提示,您是否在寻找Java中的职业发展机会?   请访问我们的Job Board 搜索和查看一个为世界各地的IT专业人员手工挑选 Java就业机会的平台.   此外,您可以将您的简历发给我们的 Resumes Board 推广自己的技能给全球广泛的Java招聘人员。 目录 1. 什么是我们理解的并发? 2. 进程和线程之间的区别是什么? 3. 在Java中,什么是进程和线程? 4. 什么是调度器? 5. 一个Java程序至少有多少个线程? 6. 如何在Java应用程序中访问当前线程? 7. 每一个Java线程有哪些特性? 8. 线程组的目的是什么? 9. 线程有什么状态,每一个状态的意思是什么? 10. 我们如何设置线程的优先级? 11. 如何在Java创建线程? 12. 我们如何停止在Java的线程? 13. 为什么一个线程不会被调用的方法stop()停止? 14. 是否有可能启动一个线程两次? 15. 下列代码的输出结果是什么? 16. 什么是守护线程? 17. 有可能当一个普通用户线程已经开始了,将它转为守护线程吗? 18. 我们怎么理解忙等待? 19. 怎么避免忙等待? 20. 我们能否把Thread.sleep()用于实时处理? 21. 一个线程在被放在使用线程休眠Thread.sleep()前怎么被唤醒? 22. 怎么查询一个线程是否已经中断? 23. 如何处理一个InterruptedException异常? 24. 在启动子线程后,我们如何在父线程等待子线程终止? ...

Read More »

JPA入门教程 – 终极指南

java-interview-questions-answers

编者按:Java持久化API(JPA)是Java语言中的应用程序编程接口规范,在基于Java平台标准版和Java平台企业版的应用程序中,JPA负责管理关系数据。 JPA已经成为事实上的标准,用于编写与数据库交互的代码。也正由于此,我们已经在Java Code Geeks提供了丰富的教程,可以在这里访问这些教程。此外,我们还制作了一本JPA迷你书,它能够帮助你入门JPA,而且顺利过渡到更高级的概念(加入我们的newsletter,可以免费获取)。 现在,我们想要建立一篇独立的、可做参考的文章:提供一个帮助你了解如何使用JPA的框架;并帮助你快速启动你的JPA应用程序开发。开始享受吧! 目录 1. 简介 2. 创建项目 3. 基础知识 3.1. EntityManager和持久化单元(Persistence Unit) 3.2. 事务(Transactions) 3.3. 数据库表(Tables) 4. 继承(Inheritance) 5. 实体关系(Relationships) 5.1. 一对一(OneToOne) 5.2. 一对多(OneToMany) 5.3. 多对多(ManyToMany) 5.4. Embedded / ElementCollection 6. 数据类型和转换器(Converters) 7. 条件查询(Criteria) API 8. 序列(Sequences) 9. 源码下载 1. 简介 Java持久化API(JPA)是一个独立于供应商的、用于映射Java对象和关系型数据库表的规范。此规范的实现,使得应用程序的开发者们可以不依赖于他们工作中面对的特定数据库产品,从而开发出可以与不同数据库产品良好工作的CRUD(创建、读取、更新、删除)操作代码。这些框架除了可以用于处理与数据库交互的代码(JDBC代码),也可以用于映射数据和应用程序中的对象。 JPA由三个不同的组件构成: 实体(Entities): 在当前版本的JPA中实体是普通Java对象(POJO)。老版本的JPA中实体类需要继承JPA提供的实体基类,但是这样的设计导致框架中存在了严重的依赖关系,测试变得更加困难;所以在新版JPA中不再要求实体类继承任何框架类。 对象-关系型元数据(Object-relational metadata): 应用程序的开发者们必须正确设定Java类和它们的属性与数据库中的表和列的映射关系。有两种设定方式:通过特定的配置文件建立映射;或者使用在新版本中支持的注解。 Java持久化查询语句(Java Persistence Query Language - JPQL): 因为JPA旨在建立不依赖于特定的数据库的抽象层,所以它也提供了一种专有查询语言来代替SQL。 这种由JPQL到SQL语言的转换,为JPA提供了支持不同数据库方言的特性,使得开发者们在实现查询逻辑时不需要考虑特定的数据库类型。 在本教程中,我们会纵览JPA框架的不同方面,同时开发一个简单的、可以从关系数据库中存储和检索数据的Java SE应用程序。我们使用到的类库/环境如下: ...

Read More »

用于Java和XML绑定的JAXB教程– 终极指南

Java为处理XML结构和文件提供了一系列的选项。JAXB是其中最常见使用的一种。JAXB全称是Java Architecture for XML Binding。它能够将Java对象装换为XML结构,反过来亦然。JAXB是在JRE 1.6的第一个版本中随着JRE标准包一起发布的。 JAXB的第一个规范在2003年3月完成,实现过程由 Java Specification Request 31: https://jcp.org/en/jsr/detail?id=31所跟踪。在这个规范请求中你可发现很多关于JAXB的成长和所有的改进。 就像刚才提到的,JAXB实在1.6中加入JRE包的。在此之前,要使用它必须将它的包加入到工程中。 在JAXB可以使用之前(很久之前),Java处理XML的方式是DOM: http://www.w3.org/DOM/。这种方式并不是最好的,因为没有很好的抽象来映射XML节点,所有的值类型都被认为是字符串。JAXB有许多的优点,比如面向对象方式的操作XML节点和属性,值类型,注解和本文中将要阐述的其他优点。 本文中的所有例子程序都是使用以下版本来实现的: JRE 1.8.0 for 32b。所使用的IDE是Eclipse SDK 版本: Luna (4.4)。但是其他所有包含JAXB API的Java版本和IDE也能够完美的工作,只要是基于Java 8的。 目录 1. 映射(Mapping) 2. 编组(Marshal) 3. 反编组(Un-marshal) 4. 适配器(Adapters) 5. XSDs 6. 注解 7. 工具 8. 最佳实践 9. 总结 10. 资源 11. 下载   1. 映射(Mapping) 使用一些注解和以下的特定的规则,Java对象就能和XML结构绑定起来。这就是我们称之为映射的原因。在本教程中,我们将使用例子、资源和其他的一些信息来解释以下几点。 我们将展示一些关于如何将Java对象转换为XML结构的例子程序, 这种转换被称为编组(marshaling)。我们将展示如何使用适配器(adapter)处理原始类型,集合和更加复杂的类型。 我们还会解释如何进行相反的操作,也就是反编组(un-marshaling),例如将XML文件转换为Java对象。 所有这些都是通过使用Java注解来完成的。我们会列举并解释和JAXB一起使用的最重要的注解。 我们还会介绍用来校验的XSD(XML Schema),这也是JAXB所支持的一个重要的工具。我们也会看一下XSD在编组时如何起作用。 最后,我们会列举一些与JAXB一起配合使用的工具,它们能在很多的方面都对程序员起到帮助。 ...

Read More »

JDBC入门教程 – 终极指南

本教程主要介绍JDBC(Java数据库连接)—— 一个Oracle提供的API,它可以帮助程序员处理Java应用程序中不同数据库的访问问题:程序员可以通过它建立与数据库的连接;定义特定的客户端使之可以访问给定的数据库;提供一种能够读取、插入、更新和删除数据库中的数据项的机制;以及控制由不同SQL语句组成的事务。 在本文中我们会介绍主要的JDBC组件,包括声明(Statement)、结果集(Result Set)、存储过程(Stored Procedure)。 程序员们需要针对不同的数据库提供相应的驱动程序;在后面的章节我们会结合一些实例来详细解释。 JDBC是伴随Java的产生而产生的;它的第一个版本产生于1997年2月,也就是JDK1.1的发布日期;自那以后,JDBC已经成为Java的一个重要组成部分。JDBC相关的主要包有: http://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html 和http://docs.oracle.com/javase/8/docs/api/javax/sql/package-summary.html. 关于JDBC的最新版本和开发、维护信息可以访问JSR 221获得。 本文中的所有例子的实现环境是Java 8 update 0_25和Eclipse SDK  Luna 4.4. 你可以在本文的最后下载所有这些例子,而且还可以下载其他更多的例子! 目录 1. 组件(Components) 2. 数据库连接(Connections) 3. 数据类型(Data types) 4. 驱动程序(Drivers) 5. 数据库(Databases) 6. 结果集(Result Sets) 7. 存储过程(Stored Procedures) 8. 声明(Statements) 9. 批处理命令(Batch Commands) 10. 事务(Transactions) 11. CRUD 命令 12. Java 8 13. 基于JDBC的SQL类库 14. 单元测试 15. 总结 16. 源码下载 17. 相关链接 1. 组件(Components) JDBC API使得程序员和Java应用程序可以与数据库进行交互。它能够在各种数据源环境下:执行不同的SQL语句、处理返回的结果集。 在这一节中,我们会综述并列出一些最重要的JDBC组件,他们都是Java应用程序的一部分;我们会在接下来的章节详细介绍它们。 首先,Java应用需要创建并建立与特定数据库的连接。这可以通过Driven Manager完成,比如,接口java.sql.DriveManager的实例;或者直接通过JDBC数据源进行连接。接口javax.sq.DataSource可以用来建立JDBC数据源连接。后面的章节会详细介绍这些组件。 一旦连接到数据库,我们就可以使用java.sql.Connection来执行CRUD (创建-create, 读取-read, 更新-update, 删除delete) SQL 语句或操作。后面的章节会详细介绍这些语句。 为了执行这些操作,程序员可以使用基于java.sql.Statement and java.sql.PreparedStatement 的类。需要多次执行相同的语句,后者会更高效一些,另外它也提供了一些我们将会在本教程后面章节提到的优点。接口JDBC连接提供了很多机制来创建statement实例: PreparedStatement countriesStatement = connection.prepareStatement("UPDATE COUNTRIES SET ...

Read More »

69 个Spring 面试问题和答案 – 终极列表 (PDF 下载)

spring-interview-questions-answers

这篇文章是关于Spring框架的一些最重要问题的总结,在面试或笔试过程中可能被问到! 不用担心您的下一个面试的的测试,因为Java Code Geeks会为您服务!您可能被问到的大部分问题都列在了这里。所有的核心模块, 从基础的Spring功能例如Spring Beans到 Spring MVC 框架都被列在了这里而且简单的介绍了。在查看了这些面试问题后,您可以查看我们的 Spring教程页面。那么,我们开始吧…! 提示:您在寻找java方面的工作机会吗?访问我们的工作面板  来搜索和查看精心选择的为全世界的IT专业人士准备的Java工作。另外,您也可以把您的简历添加到我们的  简历面板来提高您的技能来使全世界的Java招聘者看到您。 目录 Spring 概述 依赖注入 Spring Beans Spring 注解 Spring 数据访问 Spring 面向方面编程 (AOP) Spring 模型视图控制器 (MVC) Spring 概述 1. Spring是什么? Spring是针对企业版 Java的开源的开发框架 。Spring框架的核心功能能被用于开发任何的Java程序,但有针对基于Java EE平台上的Web应用程序的扩展。Spring框架的目标是使JavaEE的开发更加容易并通过使用基于POJO的编程模型来促进编程最佳实践的应用。 2. Spring 框架有什么优势? 轻量级: 在尺寸和透明度方面Spring 是轻量级的。spring框架的基础版本只有大约 2MB 大小。 控制反转 (IOC): 通过控制反转技术 ,Spring实现了松耦合。对象间只是给出了依赖性,而不是创建或寻找依赖对象。 面向切面 (AOP): Spring 支持面向切面编程 而且把应用的业务逻辑从系统服务分离开了。 容器: Spring 包含并管理应用对象的生命周期和配置。 MVC 框架: Spring的 web 框架是一个设计良好的 web MVC 框架, 它可以作为其他web框架的替代。 事务管理: Spring ...

Read More »

单元测试Junit入门(PDF下载)

编者按:在Java Code Geeks,我们已经提供了大量JUnit的教程,例如JUnit入门示例,使用JUnit的断言和注释例子,JUnit的注释示例等。然而,我们倾向收集所有的JUnit特性在一个详细的指南以方便读者。我们希望你喜欢它! 目录 1.单元测试的介绍 1.1. 什么是单元测试? 1.2. 测试覆盖 1.3. 在Java中的单元测试 2. JUnit的介绍 2.1. 使用Eclipse JUnit的简单示例 2.2. JUnit的注释 2.3. JUnit断言 3. JUnit的使用Eclipse完整的例子 3.1. 初始步骤 3.2. 创建一个Java类进行测试 3.3. 创建和运行JUnit测试案例 3.4. 使用@Ignore注释 3.5. 创建测试套件 3.6. 创建参数化测试 3.7. 规则 3.8. 分类 4.在命令行运行JUnit测试 5.结论   1.单元测试的介绍 1.1. 什么是单元测试? 一个单位可以是一个函数,一个类,一个包,或者一个子系统。所以,术语单元测试是指测试这样小单位的代码,以确保它们正常工作。例如,我们可以测试在给定的输入或者某给定条件的情况下,输出是否是我们所希望看到的。这种做法可以帮助开发人员发现代码逻辑背后的故障,提高其代码的质量。另外,单元测试可以用来以确保代码在未来变化中可以正常实现逻辑。 1.2. 测试覆盖 一般情况下,开发社区对关于代码应测试的百分比(测试覆盖)有不同的看法。一些开发者认为代码应该有100%的测试覆盖率,而有些则认为有50%或更低的测试覆盖率也可以。在任何情况下,你应该写测试你的代码中复杂或关键部分。 1.3. 在Java单元测试 在Java中最流行的测试框架是JUnit。本指南主要集中于JUnit,下面的章节有更多测试框架的细节。在Java中另一种流行的测试框架是TestNG。 2. JUnit的介绍 JUnit 是一个开源测试框架,用于编写和运行可重复的自动化测试,让我们可以确保我们的代码按预期工作。 JUnit 广泛应用于行业,可以用作单独的Java程序(在命令行)或在一个IDE如Eclipse内。 JUnit提供: 断言测试预期结果. 测试功能共享通用的测试数据. ...

Read More »

115 Java面试问题和答案 –终极列表(PDF 下载)

在本教程中我们会讨论在Java面试中可能被用到的各种类型的问题,以便面试官来测试你的Java和面向对象开发(OOP)方面的大概水平。 在接下来的章节我们会讨论面向对象编程(OOP)和它的特点,关于Java及其功能的常见问题,Java 集合框架(Collections), 垃圾回收,异常处理,Java applets, Swing, JDBC, 远程方法调用(RMI), Servlet 和JSP。 让我们开始吧! 目录 面试对象编程(OOP) Java的一些常见问题 Java线程 Java集合 垃圾回收 异常处理 Java Applets Swing JDBC 远程方法调用(RMI) Servlets JSP 面试对象编程(OOP) Java是并发的,基于类和面向对象的编程语言。面向对象的软件开发具有以下优点: 模块化的代码开发,使维护和修改更加容易。 代码的复用性。 提高代码的可靠性和灵活性。 代码更易理解。 面向对象的编程具有一些重要的特征, 例如封装,继承,多多和抽象。我们会在以下章节逐个分析这些特征。 封装 封装为对象赋予了隐藏其内部特征和行为的能力。每一个对象都有一些方法,这些方法能被其他对象访问并改变对象内部数据。在Java中,有三种访问修饰符:public,private和protected。每一种修饰符赋予其他类一些访问权限,这些类可以是在同一个包里或者不同包。下面列出了使用封装的好处: 每一个对象的内部状态都通过隐藏其属性来保护。 提高了代码的复用性和可维护性,因为对象的行为可以被独立的改变或扩展。 通过阻止对象间的非预期的相互访问,提高了模块化水平。 你可以参考一下文档here来获得更多的关于封装的细节和例子。 多态 多态是编程语言用来为底层数据类型提供不同接口的能力。一个多态类型的操作也可以被应用到一些其他类型的值。 继承 继承为对象赋予了访问其他类的成员字段和方法的能力,这个其他类也被称作基类。继承提供了代码的可重用性,而且可以被用来为已存在的类增加新的功能,而不用改变基类。 抽象 抽象是分离概念(idea)和特定实例(specific instances)的过程,所以可以开发一些具有特定功能的类,而不是一些具体实现细节。Java支持抽象类,它们并不是所有方法都有具体实现。抽象技术的目的是分离类的行为和实现细节。 抽象和封装的区别 抽象和封装是互补的概念。一方面,抽象关注于一个对象的行为。另一方面,封装关注对象行为的实现细节。封装通常是通过隐藏对象内部状态来达到的,所以,可以视作一种提供抽象的策略。 Java的一些常见问题 1. 什么是Java虚拟机?为什么java被称作平台独立的编程语言?  Java虚拟机是一个能处理Java字节码的进程。每一个Java源文件都会被编译成字节码文件,然后被Java虚拟机执行。从设计上看,Java允许程序在任何一个平台上执行,而不用程序员在每一个不同平台上进行重写或重编译。Java虚拟机能做到这一点,是因为它了解底层硬件平台的指令长度和其他细节。 2. JDK和JRE有什么区别?  JRE基本上就是java虚拟机,也就是Java程序执行的地方。它也包含浏览器的applet插件。JDK是java的全功能开发软件包(SDK),包括了JRE,编译器和工具(比如JavaDoc, Java Debugger)。这些功能是为用户用作开发、编译和执行java程序的。 3. 关键字”static”是什么意思? 在Java中能够重写(override)私有或者静态方法吗? static关键字表示一个变量或方法在不用实例化它所属于的类的情况下就可以访问。在java中用户不能重写(override)静态方法,因为方法重写是基于运行时的动态绑定,而静态方法是在编译时绑定的。一个静态方法不能与这个类的任何实例关联,所以这种说法是不对的。 4. 能够在静态上下文中访问非静态的变量吗? Java中的静态变量属于类,它的值对这个类的所有实例都是一样的。静态变量在类被java虚拟机加载时就就被初始化。如果代码尝试访问没有实例的非静态变量,编译器会报错,因为这些变量还没有被创建,而且它们没有与任何实例关联。 ...

Read More »

JMeter负载测试入门教程 – 终极指南

本教程是关于JMeter的。我们将会涉及到的要点如下: 我们会解释JMeter是用来干什么的。 JMeter是如何设计和实现的以及涉及到哪些技术。 如何正确的安装和配置它。 它的用户界面(UI)的基本功能。 详细介绍如何配置不同的测试计划。 展示如何分析它的输出结果。 最后我们会提到一些重要的最佳实践。 本文所提到的所有示例的配置和实现环境是: Java 8 update 0.20,Eclipse Luna 4.4, JMeter 2.11 和MySQL Community Server 5.6.21. 目录 1. 简介 2. 涉及到的技术 3. 本文主要讲些什么? 4. 安装 5. GUI 概述 6. 可用的请求类型 7. 测试计划和组件 7.1. 线程组 7.2. 取样器 7.3. 逻辑控制器 7.4. 监听器 7.5. 定时器 7.6. 断言 7.7. 配置元件 7.8. 前置处理器 7.9. 后置处理器 8. 测试计划元素的执行顺序 9. 启动/停止测试计划 10. Web (HTTP) 测试计划 11. 数据库测试计划入门 12. Junit测试计划 13. 录制HTTP测试 14. JMeter 插件 ...

Read More »