Hibernate核心技术简介

Hibernate核心技术简介

1Hibernate映射文件开发

    Hibernate映射文件就是项目中*.hbm.xml文件,其主要是完成各元素的配置,包括根元素、类元素、定义主键、设置主键生成方法、定义属性以及关联映射。下面一一单独说明:

(1)根元素<hibernate-mapping>

映射文件的根元素是<hibernate-mapping>,每一个*.hbm.xml文件都有唯一的一个根元素。该元素包含以下属性:package、schema、catalog、default-cascade、default-access、default-lazy、auto-import等。

<hibernate-mapping>元素允许嵌套多个<class>映射。但是最好的做法是一个持久化类对应一个映射文件。例如,一个持久化类名称是User,则命名为User.hbm.xml。

(2)类元素<class>

<class>是<hibernate>的子元素,用以定义一个持久化类与数据表的映射关系。该元素包以下属 性:name、table、discriminator-value、mutable、schema、catalog、proxy、dynamic-update、dynamic-insert、select-before-update、polymorphism、where、persister、batch-size、optimistic-lock、lazy、entity-name、check、rowid、subselect、abstract。

(3)定义主键

在关系数据库表中,主键用来识别记录,并保证每条记录的唯一性。在Java语言中,通过比较两个变量所引用对象的内存地址是相同,或者比较两个对象引用的对象值是否相同来判断两个对象是否相等。Hibernate为了解决两者之间的不同,使用对象标识符(OID)来标识对象的唯一性。OID是关系数据库中主键在Java对象模型中的等价物。在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系。

一般使用数据库表中主键属性id来定义Java类中的主键,两者是一一对应关系。

(4)设置主键生成方法

一般使用<generator>元素来指定相应的主键,例如如下示例代码中id便是主键:

<hibernate-mapping package="com.demo.hibernate.beans">

    <class name="User" table="user">
        <id name="id" column="ID" type="integer">
            <generator class="native"/>
        </id>

        <property name="username" column="username" type="string" />
        <property name="password" column="password" type="string" />
        <property name="email" column="email" type="string" />
    </class>

</hibernate-mapping>

(5)定义属性

在数据库表中,每一个属性都会对应一个相应的数据类型,那么进行ORM关联映射生成的Java类,每一个成员变量也会有一个相应的数据类型。例如,int、long、String

、char、date、text等,其中date和text等在Java代码中不是数据类型,但在此处是作为hibernate映射的内置映射类型属性。

一般可以使用<property>元素来定义非主键属性。

(6)关联映射

关联映射类似关系数据库中实体之间的对应关系,不过此处表示的映射后生成的持久化类之间的关系,包含以下几种类型:<many-to-one>、<one-to-one>、<one-to-many>、<many-to-many>。

 

2Hibernate核心编程

    用Hibernate开发基于持久层的应用时,第一件事情应当是熟悉它的编程接口。主要包含以下四个核心类的使用:

Configuration装载配置类

SessionFactory创建Session类

Session数据库操作类

Transcation事务操作类

常用的核心接口包含以下六个:Session、SessionFactory、Configuration、Transaction、Query和Criteria。其具体关系如下图一所示:

图一:接口类的产生关系

下面简要说明一下四个核心类的作用:

(1)Configuration装载配置类

Configuration接口的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。

(2)SessionFactory创建Session类

SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句以及其他的映射数据,还缓冲了一些将来有可能重复利用的数据。

(3)Session数据库操作类

Session的主要功能是提供对映射的实体类实例的创建、读取和删除操作。

(4)Transcation事务操作类

Transaction接口是对实际事物实现的一个抽象,这些实现包括JDBC的事务、JTA中的UserTransaction、甚至可以是CORBA事务。这样设计的目的是为了让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。

 

3、使用Query进行HQL语句查询

    Query接口实现对数据库及持久化对象的查询操作,它可以有两种表达方式:HQL语言或者本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

要取得Query对象,需要使用Session的createQuery()函数来执行查询,查询的参数是基于HQL语法的,其查询的对象是Hibernate的持久化对象名,Hibernate会根据该对象名找到要查找的表名。具体运用如下:

(1)不带参数的查询

代码示例如下:

Query query = session.createQuery(“from User”);

(2)带参数的查询

代码示例如下:

Query query = session.createQuery(“from User where username =: username”);

Query.setString(“username”,”admin”);

(3)取得List结果集

代码示例如下:

List list = query.list();

(4)取得迭代列表结果集

代码示例如下:

Iterator it1 = query.iterate();

Iterator it2 = query.list().iterator();

while(it2.hasNext()){

User user = (User)it2.next();

}

(5)取得一个对象

示例代码如下:

Query query = session.createQuery(“from User where username=?”);

Query.setString(0,”admin”);

User user = (User)query.uniqueResult();

(6)标量查询

示例代码如下:

Iterator results = session.createQuery(“select user.username,count(user.email) from User user group by user.username”).list().iterator();

(7)分页查询

示例代码如下:

Query query = session.createQuery(“from User”);

query.setFirstResult(10);

query.setMaxResult(20);

List list = query.list();

(8)创建SQL查询

示例代码如下:

List users = session.createSQLQuery(“select {user.*} from User{user}”).list();

    

4、使用Criteria进行条件查询

    Criteria接口和Query接口非常类似,它允许你创建并执行面向对象的标准化查询。

与之相对的是,如果你希望能够动态的使用API进行面向对象查询,而非在Java代码中嵌入字符串,那么选择Criteria可以达到这样的目的。以下是其具体应用:

(1)创建Criteria实例

实例代码如下:

Criteria criteria = session.createCriteria(User.class);

criteria.setMaxResult(50);

List users = criteria.list();

(2)添加查询条件

实例代码如下:

Criteria criteria = session.createCriteria(User.class);                                                              criteria.add(Restrictions.like(“username”,”admin%”));

criteria.add(Restrictions.like(“ID”,1,10));

List users = criteria.list();

(3)添加排序条件

实例代码如下:

List users = session.createCriteria(User.class).add(Restrictions.like(“username”,”admin”)).addOrder(Order.asc(“username”)).addOrder(Order.desc(“password”)).setMaxResults(50).list();

(4)使用示例查询

示例代码如下:

User user = new User();

User.setUsername(“admin”);

List results = session.createCriteria(User.class).add(Example.create(user)).list();

时间: 2024-10-12 22:23:09

Hibernate核心技术简介的相关文章

Hibernate框架简介(二)基本使用增、删、改、查

一.Hibernate框架简介 Hibernate是一个优秀的Java持久化层解决方案,是当今主流的对象-关系映射(ORM,ObjectRelationalMapping)工具 1.1.理解持久化 瞬时状态:在程序运行的时候,有些程序数据是保存在内存中,当程序退出后,这些数据就不复存在了,所以称这些数据的状态为瞬时状态 持久状态:在使用一此软件的时候,有些数据,在程序退出后,还以文件等形式保存在硬盘或者数据库中,称这些数据的状态是持久状态 持久化:持久化就是将程序中的数据在瞬时状态和持久状态之间

Hibernate框架简介

面试被问及了Hibernate框架,虽然问的很少,很简单,但是还是简单的总结一下吧,以备以后不时之需. 什么是Hibernate框架? 百科定义:Hibernate框架式一个开源的对象关系映射(ORM)框架,是对JDBC的轻量级的对象封装,使java程序员可以使用对象思维来操纵DB. 白话版:在Hibernate之前,我们是如何操作DB的?JDBC,需要在程序中嵌入SQL语句.效率低下,不能忍啊.但是Hibernate的出现,让我们无需再操纵SQL语句了,每个表实例被实例化为一个java对象,操

Struts核心技术简介

Struts核心技术简介 1.Struts内部机制   Struts是一种基于MVC经典设计模式的开发源代码的应用框架,它通过把Servlet.JSP.JavaBean.自定义标签和信息资源整合到一个统一的框架中,为Web开发提供具有高可配置性的MVC开发模式. Struts体系结构实现了MVC设计模式的概念,它将Model.View.和Controller分别映射到Web应用组件中.Controller负责控制流程,由ActionServlet负责读取struts-config.xml,并使用

Struts2核心技术简介

Struts2核心技术简介 使用Struts2框架,只要注重以下三大元素:配置文件.映射文件和Action: 全局属性文件struts.properties:保存系统运行的一些参数变量,整个系统只有一个属性文件: 映射文件struts.xml:用于配置请求映射的Action和拦截器,可以有多个映射文件: 业务控制器Action:可以使用POJO(类似JavaBean)类,也可以集成ActionSupport,在该类中不仅可以取得表单数据,还可以取得上下文变量.以下是详细说明: 1.全局属性文件s

Hibernate 核心技术(一)

简介 Hibernate是一个开源的对象关系映射(ORM)框架.对JDBC进行了非常轻量级的对象封装. 将对象和数据库表建立映射关系,Hibernate框架使用在数据持久化层(dao). ORM:对象关系映射(英语:Object Relational Mapping) 采用映射元数据(配置文件)来描述对象-关系的映射细节.ORM框架通过配置文件将实体对象和数据库表对应起来. 第一个Hibernate小例子 原文地址:https://www.cnblogs.com/yuexiaoyun/p/943

简单的Hibernate入门简介

其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss.这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性. 在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss.本文的

【docker】docker基础原理,核心技术简介

关于docker的核心技术,就是以下的三大技术: 1.namespaces [命名空间] 使用linux的命名空间实现的进程间隔离.Docker 容器内部的任意进程都对宿主机器的进程一无所知. 除了进程相关的命名空间,还会设置与用户.网络.IPC 以及 UTS 相关的命名空间. Docker 通过命名空间成功完成了与宿主机进程和网络的隔离. 虽然docker通过命名空间创建了网络隔离,但依旧需要与外界连接才能有用. Docker 为我们提供了四种不同的网络模式,Host.Container.No

Hibernate入门简介

什么是Hibernate框架? Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象! 为什么要使用Hibernate? 既然Hibernate是关于Java对象和关系数据库之间的联系的话,也就是我们MVC中的数据持久层->在编写程序中的DAO层... 首先,我们来回顾一下我们在DAO层写程序的历程吧: 在DAO层操作XML,将数据封装到XML文件上,读写XML文件数据

Hibernate学习笔记

一 . Hibernate的简介 提到hibernate,首先的说说ORM框架技术(Object.Relation.Mapping),它的主要问题就是对象-关系的映射,怎么说呢?现在用的数据库大多数都是关系数据库,而关系数据库重在于表与表之间的关系连接.术语就为:一个持久化类和一个表对应,类的每个实例对应表的一条记录.其他就不说了,回到hibernate.ORM框架类型有很多,hibernate就是其中的一种,还有EJB框架(Enterprise javaBean).iBATIS框架.TopLi