上海网站设计案例,花都网站制作公司,企业为什么要建网站,wordpress 切换中文当你在实战项目中需要用到SSH时, 如果你之前只用过Mybatis那自然是不能解决问题的, 因为在很多银行类金融类项目中你可能会使用到Hibernate, 那么关于Hibernate你应该要了解什么呢, 本篇文章就以学习Hibernate框架为目的, 巩固在工作中可能需要用到的这种ORM技术, 同时也欢迎家…当你在实战项目中需要用到SSH时, 如果你之前只用过Mybatis那自然是不能解决问题的, 因为在很多银行类金融类项目中你可能会使用到Hibernate, 那么关于Hibernate你应该要了解什么呢, 本篇文章就以学习Hibernate框架为目的, 巩固在工作中可能需要用到的这种ORM技术, 同时也欢迎家人们探讨交流和指正。概述Hibernate是一种Java语言下的对象关系映射(ORM)解决方案。它为面向对象的领域模型到传统的关系型数据库的映射, 提供了使用方便的持久化框架。它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始, 开发人员都可以采用Hibernate。Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射), 还提供了面向对象的数据查询检索机制, 从而极大地缩短了手动处理SQL和JDBC上的开发时间。前面已经提到了Hibernate是一种Java语言下的ORM解决方案, 所以我们要对ORM有一定了解, 再往前走就是JDBC, 所以我们就要先理解JDBC, 那么JDBC是什么呢?什么是JDBC?JDBC代表Java Database Connectivity, 它是提供了一组Java API来访问关系型数据的Java程序, 这些Java API可以使Java程序执行SQL语句, 能够与任何符合规范的SQL数据库进行交互。JDBC提供了一个灵活的框架来编写操作数据库的独立的应用程序, 该应用程序能够运行在不同的平台上且不需要修改, 能够与不同的DBMS进行交互。JDBC的优点和缺点JDBC的优点JDBC的缺点干净整洁的SQL处理大项目中使用很复杂大数据下有良好的性能很大的编程成本对于小应用非常好没有封装易学的简易语法难以实现MVC的概念查询需要指定DBMS为什么是ORM(对象关系映射)?当我们工作在一个面向对象的系统中时, 存在一个对象模型和关系数据库不匹配的问题。RDMS用表格的形式存储数据, 然而像Java或者C#这样的面向对象的语言他表示一个对象关联图。考虑下面的带有构造方法和公有方法的Java类:public class Employee{private int id;private String first_name;private String last_name;private int salary;public Employee(){}public Employee(String fname, String lname, int salary){this.first_name fname;this.last_name lname;this.salary salary;}public int getId(){return id;}public String getFirstName(){return first_name;}public String getLastName(){return last_name;}public int getSalary(){return salary;}
}现考虑以上的对象需要被存储和索引进下面的RDBMS表格中:create table EMPLOYEE(id INT NOT NULL auto_increment,first_name VARCHAR(20) default
NULL,last_name VARCHAR(20) default
NULL,salary int default NULL,PRIMARY KEY(id)
);第一个问题, 如果我们开发了几页代码或应用程序后, 需要修改数据库的设计怎么办?第二个问题, 再关系型数据库中加载和存储对象时我们要面临一下5个不匹配的问题。不匹配描述粒度有时你会有一个对象模型, 该模型类的数量比数据库中关联的表的数量更多继承RDBMS不会定义任何在面向对象编程语言中本来就有的继承身份RDBMS明确定义一个sameness的概念: 主键。然而, Java同时定义了对象判等(ab)和对象值判等(a.equals(b))关联面向对象的编程语言使用对象引用来表示关联, 而一个RDBMS使用外键来表示对象关联导航在Java中和在RDBMS中访问对象的方式完全不相同ORM(Object-Relational Mapping)是以上所有不匹配问题的解决方案。什么是ORM?ORM表示Object-Relational Mapping, 是一个方便在关系型数据库和类似于Java, C#等面向对象的编程语言中转换数据的技术。一个ORM系统相比于普通的JDBC有以下的优点:使用业务代码访问对象而不是数据库中的表从面向对象逻辑中隐藏SQL查询的细节基于JDBC的under the hood没有必要去处理数据库实现实体是基于业务的概念而不是数据库的结构事务管理和键的自动生成应用程序的快速开发一个ORM解决方案由以下四个实体组成:一个API来在持久类的对象上实现基本的CRUD操作一个语言或API来指定引用类和属性的查询一个可配置的服务用来指定映射元数据一个技术和事务对象交互来执行dirty checking, lazy association fetching和其他优化的功能Java ORM框架在Java中有几个持久化的框架和ORM选项。一个持久化的框架是ORM存储和索引对象到关系型数据库的服务。Enterprise JavaBeans Entity BeansJava Data ObjectsCastorTopLinkSpring DAOHibernateAnd many moreHibernate简介Hibernate是由Gavin King于2001年创建的开放源代码的对象关系型框架。它强大且高效的构建具有关系对象持久性和查询服务的Java应用程序。Hibernate将Java类映射到SQL数据类型中, 并把开发人员从95%的公共数据持久性编程工作中解放出来。Hibernate是传统Java对象和数据库服务器之间的桥梁, 用来处理基于O/M映射机制和模式的那些对象。Hibernate优势Hibernate使用XML文件来处理映射Java类别到数据库表格中, 并且不用编写任何代码。为在数据库中直接储存和检索Java对象提供简单的API。如果在数据库中或任何其他表格中出现变化, 那么仅需要改变XML文件属性。抽象不熟悉的SQL类型, 并为我们提供工作中所熟悉的Java对象。Hibernate不需要应用程序服务器来操作。操控你数据库中对象复杂的关联。最小化与访问数据库的智能提取策略。提供简单的数据询问。支持的数据库Hibernate支持几乎所有的主要RDBMS。以下是一些由Hibernate所支持的数据库引擎:HSQL Database EngineDB2/NTMySQLPostgreSQLFrontBaseOracleMicrosoft SQL Server DatabaseSybase SQL ServerInformix Dynamic Server支持的技术XDoclet SpringJ2EEEclipse plug-insMavenHibernate架构架构Hibernate架构是分层的, 作为数据访问层, 你不必知道底层API。Hibernate利用数据库以及配置数据来为应用程序提供持续性服务下面是一个非常高水平的Hibernate应用程序架构视图:下面是一个详细的Hibernate应用程序体系结构视图以及一些重要的类:Hibernate使用不同的现存Java API, 比如JDBC, Java事务API(JTA), 以及Java命名和目录界面(JNDI)。JDBC提供了一个基本的抽象级别的通用关系型数据库的功能, Hibernate支持几乎所有带有JDBC驱动的数据库。JNDI和JTA允许Hibernate与J2EE应用程序服务器相集成。下面的部分简要地描述了在Hibernate应用程序架构所涉及地每一个类对象。配置对象篇日志对象是你在任何Hibernate应用程序中创造的第一个Hibernate对象, 并且经常只在应用程序初始化期间创造。它代表了Hibernate所需一个配置或属性文件。配置对象提供了两种基础组件。数据库连接: 由Hibernate支持的一个或多个配置文件处理, 这些文件是hibernate.properties和hibernate.cfg.xml。类映射设置: 这个组件创造了Java类和数据库表格之间的联系。SessionFactory对象配置对象被用于创造一个 SessionFactory 对象使用提供的配置文件为应用程序依次配置 Hibernate并允许实例化一个会话对象。SessionFactory 是一个线程安全对象并由应用程序所有的线程所使用。SessionFactory 是一个重量级对象所以通常它都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个 SessionFactory 对象使用一个单独的配置文件。所以如果你使用多种数据库那么你要创造多种 SessionFactory 对象。Session对象一个会话被用于与数据库的物理连接。Session 对象是轻量级的并被设计为每次实例化都需要与数据库的交互。持久对象通过 Session 对象保存和检索。Session 对象不应该长时间保持开启状态因为它们通常情况下并非线程安全并且它们应该按照所需创造和销毁。Transaction对象一个事务代表了与数据库工作的一个单元并且大部分 RDBMS 支持事务功能。在 Hibernate 中事务由底层事务管理器和事务来自 JDBC 或者 JTA处理。这是一个选择性对象Hibernate 应用程序可能不选择使用这个接口而是在自己应用程序代码中管理事务。Query对象Query 对象使用 SQL 或者 Hibernate 查询语言HQL字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数限制由查询返回的结果数量并最终执行查询。Criteria对象Criteria 对象被用于创造和执行面向规则查询的对象来检索对象。Hibernate环境为了给Hibernate应用准备需要地开发环境, 该怎样安装Hibernate应用和一些其他相关的包。这里会用MySQL数据库来对一些Hibernate应用的例子进行试验。下载Hibernate首先要在想要把Hibernate应用安装在Windows系统或是Unix系统这两者之间做出选择, 之后进行到下一步骤去下载与Windows系统对应的.zip文件或是与Unix系统对应的.tz文件。之后到http://www.hibernate.org/downloads这个网址来下载最新版本的Hibernate应用。这里下载的是hibernate-distribution-3.6.4.Final这个版本的应用, 在这个版本的应用下当我们解压下载的文件时会显示以下的目录结构:安装Hibernate一旦你下载好并解压了Hibernate应用最新版本的安装文件, 你需要执行以下两个简单的步骤。一定要确保你把你的CLASSPATH变量设置合理, 否则当你编译你的应用时可能会遇到问题。首先把从/lib复制来的所有库文件拷贝到CLASSPATH里, 并且改变你的CLASSPATH变量来涵盖所有的JAR。最后复制hibernate3.jar这个文件到CLASSPATH里。这个文件位于安装文件的根目录里, 它是Hibernate应用针对的主要JAR。Hibernate的前提以下是一个Hibernate应用需要的有关包/库的表格, 在安装Hibernate应用之前你需要先安装它们, 为了安装这些包你必须把来自/lib的库文件拷贝到CLASSPATH, 并按以下说明相应地改变CLASSPATH变量。S.N.包/库1dom4j - XML 解析 www.dom4j.org/2Xalan - XSLT 处理器 http://xml.apache.org/xalan-j/3Xerces - The Xerces Java 解析器 http://xml.apache.org/xerces-j/4cglib -Java 类生成库 http://cglib.sourceforge.net/5log4j - 日志控制 http://logging.apache.org/log4j6Commons - 日志邮件等 http://jakarta.apache.org/commons7SLF4J - 简单日志门面 http://www.slf4j.orgHibernate配置配置Hibernate 需要事先知道在哪里找到映射信息这些映射信息定义了 Java 类怎样关联到数据库表。Hibernate 也需要一套相关数据库和其它相关参数的配置设置。所有这些信息通常是作为一个标准的 Java 属性文件提供的名叫 hibernate.properties。又或者是作为 XML 文件提供的名叫 hibernate.cfg.xml。我们将考虑 hibernate.cfg.xml 这个 XML 格式文件来决定在我的例子里指定需要的 Hibernate 应用属性。这个 XML 文件中大多数的属性是不需要修改的。这个文件保存在应用程序的类路径的根目录里。Hibernate属性下面是一个重要的属性列表, 你可能需要表中的属性来在单独的情况下配置数据库。S.N.属性和描述1hibernate.dialect这个属性使 Hibernate 应用为被选择的数据库生成适当的 SQL。2hibernate.connection.driver_classJDBC 驱动程序类。3hibernate.connection.url数据库实例的 JDBC URL。4hibernate.connection.username数据库用户名。5hibernate.connection.password数据库密码。6hibernate.connection.pool_size限制在 Hibernate 应用数据库连接池中连接的数量。7hibernate.connection.autocommit允许在 JDBC 连接中使用自动提交模式。如果您正在使用JNDI和数据库应用程序服务器然后您必须配置以下属性:S.N.属性和描述1hibernate.connection.datasource在应用程序服务器环境中您正在使用的应用程序 JNDI 名。2hibernate.jndi.classJNDI 的 InitialContext 类。3hibernate.jndi.JNDIpropertyname在 JNDI的 InitialContext 类中通过任何你想要的 Java 命名和目录接口属性。4hibernate.jndi.url为 JNDI 提供 URL。5hibernate.connection.username数据库用户名。6hibernate.connection.password数据库密码。Hibernate和MySQL数据库MySQL数据库是目前可用的开源数据库系统中最受欢迎的数据库之一。我们要创建hibernate.cfg.xml配置文件并将其放置在应用程序的CLASSPATH的根目录里。你要确保在你的MySQL数据库中testdb数据库是可用的, 而且你要有一个用户test可用来访问数据库。XML配置文件一定要遵守Hibernate 3 Configuration DTD, 在 http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd这个网址中是可以找到的。