Hibernate教程

合集下载

hibernate的基本用法

hibernate的基本用法

hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。

它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。

本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。

一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。

然后将解压后的文件夹添加到Java项目的构建路径中。

2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。

这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。

3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。

除此之外,还需要指定数据库的用户名和密码等信息。

4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。

我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。

这个映射文件描述了实体类与数据库表之间的对应关系。

二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。

这个类的字段通常与数据库表的列对应。

同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。

2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。

如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。

3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。

Hibernate学习笔记

Hibernate学习笔记

Hibernate项目的构建与配置1.在项目里倒入Hibernate所必须的Jar包(1)Hibernate框架可以使用在任何的Java项目里,并不一定是Web项目。

只需要在项目里倒入Hibernate所必须要使用的jar包就可以了。

(2)在Hibernate的官网下载hibernate-release-4.2.2.Final.zip解压,要使用Hibernate必须导入的jar包就在目录“hibernate-release-4.2.2.Final\lib\required”下。

倒入此路径下的所有jar包就可以了。

2.配置hibernate.cfg.xml文件(1)配置hibernate.cfg.xml文件可以参考“\project\etc”目录下的hibernate.cfg.xml文件与hibernate.properties文件。

(2)使用Hibernate连接MySQL的hibernate.cfg.xml配置文件如下:<hibernate-configuration><session-factory>(设置显示Hibernate产生的SQL语句)<property name="show_sql">true</property>(设置MySQL的SQL语法的方言)<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>(设置MySQL的驱动程序)<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>(设置MySQL的数据库路径、用户名、密码)<property name="hibernate.connection.url">jdbc:mysql:///java</property><property name="ername">root</property><property name="hibernate.connection.password">lizhiwei</property>(设置当数据库要保存的表不存在时,就新建表)<property name="hibernate.hbm2ddl.auto">update</property>(设置对象与数据库表的关系映射文件)<mapping resource="vo/User.hbm.xml"/></session-factory></hibernate-configuration>(3)此配置文件一般放在项目的src目录下。

hibernate sql写法

hibernate sql写法

hibernate sql写法Hibernate是一个开源的、高效的、强大的Java持久化框架,它提供了面向对象的方式来操作关系型数据库。

使用Hibernate,开发者可以以一种简单、灵活的方式进行数据库操作,而无需编写大量的SQL 语句。

在Hibernate中,我们可以通过编写映射文件或注解来定义实体类与数据库表之间的映射关系,通过Session对象来执行对数据库的操作。

在Hibernate中,SQL语句可以通过多种方式来编写。

下面将针对Hibernate中的SQL编写进行详细介绍。

1. HQL(Hibernate Query Language)Hibernate Query Language(HQL)是一种面向对象的查询语言,它类似于SQL语句,但是使用的是实体类和属性名,而不是表名和列名。

HQL可以实现对实体对象的查询、更新和删除等操作。

以下是HQL的一些常用语法:-查询所有的实体对象:FROM实体类名-条件查询:FROM实体类名WHERE条件-投影查询:SELECT属性列表FROM实体类名-排序查询:FROM实体类名ORDER BY属性ASC/DESC-分页查询:FROM实体类名LIMIT开始位置,查询数量HQL的编写与SQL类似,但是可以直接使用实体类和属性名,从而更加面向对象。

例如,以下HQL语句可以查询出所有年龄大于18岁的用户:FROM User WHERE age > 182.原生SQL查询除了HQL,Hibernate还支持原生的SQL查询。

原生SQL查询可以直接编写传统的SQL语句,但是需要使用Session对象的createNativeQuery方法来执行。

以下是原生SQL查询的一些常用语法:-执行查询:session.createNativeQuery("SELECT * FROM表名").getResultList()-执行更新或删除:session.createNativeQuery("UPDATE/DELETE FROM表名WHERE条件").executeUpdate()-参数绑定:Query.setParameter(参数名,参数值)原生SQL查询可以更灵活地操作数据库,但是需要注意SQL语句的安全性和兼容性问题。

传智播客hibernate教程

传智播客hibernate教程

北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
基本概念和CURD
Java代码 代码 1.初始化代码 只做一次 初始化代码(只做一次 初始化代码 只做一次)
Configuration cfg = new Configuration(); cfg.configure(“config.cfg.xml”); 也可以通过cfg.setProperty设置属性。 SessionFactory sessionFactory = cfg.buildSessionFactory();
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: Criteria crit = session.createCriteria(DomainClass.class); 简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
多对一(Employee - Department) 一对多(Department-Employee) 一对一(room - door) 多对多(teacher - student) 组件映射(User-Name) 集合映射(set, list, map, bag) inverse和cascade(Employee – Department)
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!

Hibernate教程_从入门到精通_第二篇(共四篇)

Hibernate教程_从入门到精通_第二篇(共四篇)
第二章 Hibernate API
目标: •Hibernate API简介
Hinernate的体系结构(运行时)





SessionFactory:它保存了对当前数据库配置的所有映射关系,它是将某 个数据库的映射关系经过编译之后全部保存在内存中的。 它还是生成 Session的工厂,它在进行实例化的过程中将会用到ConnectionProvider。 一个SessionFactory对应一个数据库连接,当数据库连接改变时需要修改 SessionFactory Sesion: 是进行持久化操作的基础,所有的持久化操作都是在Session的 基础上进行的。它相当与JDBC中的Connection。它是Hibernate的持 久化 管理器的核心,提供了一系列的持久化操作方法。另外,它还持有一个针 对持久化对象的一级缓存,在遍历持久化对象或者根据持久化标识查找对 象的时候会用 到。 Transation:功能上和数据库中的事务完全一样,通过它实现对数据库中 事务的控制。Transation对象是Session对象产生的,所以他的生命周期比 Session短。一个Session的生命周期中可以有多个Transaction对象。 ConnectonProvider:主要作用是生成与数据库建立了连接的JDBC对象 ,同时他还作为数据库连接的缓冲池。通过ConnectionProvider实现了应 用程序和底层的DataSource和DriverManager的隔离。 TransactionFactory:是生成Transaction对象的工厂,通过 TransactionFactory实现了事务的封装,使其具体的实现方法与应用程序无 关。

判断一个实体对象是否处于瞬态: 该实体对象的<id>属性(如果存在)的值为空 如果在映射文件中为<id>设置了unsaved-value属性,并且 实体对象的id属性的值与unsaved-value属性的值相同 如果这个实体对象配置version属性,并且version属性的 空 在映射文件中为version属性设置了unsaved-value属性,并且 version属性的值与unsaved-value属性的值相同。 如果设置了interceptor,并且interceptor的isUnsaved() 方法的返回值为true

hibernate中的evict方法

hibernate中的evict方法

hibernate中的evict方法Hibernate中的evict方法用于从持久化上下文中删除给定对象的实体状态,将其变为脱管状态。

该方法可以在不提交或回滚事务的情况下,将对象从缓存中移除,以便重新加载最新数据或避免对象进行更新操作。

evict方法的使用格式如下:```javavoid evict(Object entity);```evict方法接受一个实体对象作为参数,将该实体对象从持久化上下文中移除。

被移除的实体对象将不再被Hibernate跟踪,并且不再参与持久化机制,直到被重新加载或重新保存。

evict方法的适用场景:1. 缓存管理:当程序中存在大量对象时,为了减少内存的占用,可以使用evict方法手动将不需要再被使用的对象从缓存中移除,从而避免内存溢出的风险。

2. 强制重新加载:当需要立即重新加载数据库中的最新数据时,可以使用evict方法将对象从持久化上下文中移除,实现下一次查询时重新从数据库加载数据。

3. 避免更新操作:当需要修改一个对象的部分属性,并避免更新整个对象时,可以先使用evict方法将该对象从持久化上下文中移除,再使用独立的属性修改语句进行更新操作。

evict方法的示例代码如下:```javaSession session = sessionFactory.openSession();Transaction tx = session.beginTransaction();// 从数据库中查询需要修改的对象User user = session.get(User.class, 1L);System.out.println("Before evict: " + user);// 移除对象的实体状态session.evict(user);System.out.println("After evict: " + user);// 修改对象的属性user.setAge(30);user.setEmail("*********************");// 更新对象的属性,此时不会触发数据库更新操作session.update(user);mit();session.close();```在上述示例中,首先通过session.get方法从数据库中获取了ID为1的User对象,并输出了该对象的初始状态。

最经典的hibernate教程 从入门到精通 第一篇(共四篇)

最经典的hibernate教程 从入门到精通 第一篇(共四篇)

• </session-factory>
准备3:添加实体类和映射文件(UserInfo.hbm.xml)
使用Hibernate的7个步骤:
1、 Configuration 7、 关闭Session 2、 创建 SessionFactory
6、 提交事务 5、
3、 打开 Session 4、 开始一个事务
2-1):添加配置文件 -- hibernate.cfg.xml
<session-factory> <property name="connection.url"> jdbc:microsoft:sqlserver://localhost:1433;Database=pubs </property> <property name="ername">sa</property> <property name="connection.password">pwd</property> <property name="connection.driver_class"> com.microsoft.jdbc.sqlserver.SQLServerDriver </property> <property name="dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="show_sql">true</property> <mapping resource="com/aptech/jb/entity/User.hbm.xml" /> </session-factory>

hibernate4学习笔记

hibernate4学习笔记

hibernate4学习笔记Hibernate4学习笔记本⼈全部以⾃学为主,在⽹上收集各种学习资料,总结归纳学习经验,现将学习路径给予⼤家分享。

此次学习的hibernate的版本是:hibernate-release-4.2.4.Final(截⽌2015年7⽉31⽇最新版),JAVA的版本是:java8.0,使⽤的开发⼯具是:Eclipse Mars Release (4.5.0)。

第⼀天:Hibernate4基础知识和HelloWorld简单编程Hibernate是⼀种半成品ORM框架,对数据库持久化操作,程序员对数据库的操作转换成对对象的操作。

ORM 采⽤元数据来描述对象-关系映射细节, 元数据通常采⽤XML 格式, 并且存放在专门的对象-关系映射⽂件中。

HelloWorld简单编程1、准备Hibernate环境(1)导⼊Hibernate的Jar包,如下:(2)导⼊Mysql驱动包,我⽤的数据库是:Mysql 5.0,数据库驱动包如下:以上所有Jar加完毕之后,需要加⼊到Eclipse⾃⾝系统⾥⾯,具体如下:以上操作完毕之后,Hibernate的环境就算搭建完毕,下⾯就可以进⼀步操作。

2、配置hibernate.cfg.xml⽂件,主要是对数据库的连接,具体如下:"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/doc/63fa364d5022aaea998f0fde.html /hibernate-configuration-3.0.dtd ">rootmysqlname="connection.driver_class">com.mysql.jdbc.Driver jdbc:mysql:///Test(或者:jdbc:mysql://localhost:3306/Test)name="dialect">org.hibernate.dialect.MySQLInnoDBDialecttruetrueupdate3、编写⼀个实例类News.java,具体代码如下:package com.hibernate.helloworld;import java.sql.Date;public class News {private Integer id;private String title;private Date date;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public News(String title, String author, Date date) { super();this.title = title;this.author = author;this.date = date;}public News(){}@Overridereturn"News [id="+ id+ ", title="+ title+ ", author="+ author + ", date=" + date + "]";}}4、创建News.hbm.xml配置映射⽂件,具体代码如下:"/doc/63fa364d5022aaea998f0fde.html /hibernate-mapping-3.0.dtd">5、将映射⽂件News.hbm.xml指定到hibernate.cfg.xml配置⽂件⾥⾯,即在hibernate.cfg.xml⽂件⾥加⼊⼀⾏映射代码,具体如下:6、创建hibernate API操作测试类(Juit测试),验证hibernate的优势效果,具体代码如下:package com.hibernate.helloworld;import java.sql.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.Test;public class HibernateTest {@Testpublic void test() {//1. 创建⼀个 SessionFactory 对象SessionFactory sessionFactory=null;//1). 创建 Configuration 对象: 对应 hibernate 的基本配置信息和对象关系映射信息Configuration configuration=new Configuration().configure();//4.0 之前这样创建//sessionFactory=configuration.buildSessionFactory();//2). 4.0以后创建⼀个 ServiceRegistry 对象: hibernate 4.x 新添加的对象//hibernate 的任何配置和服务都需要在该对象中注册后才能有效.ServiceRegistry serviceRegistry=newServiceRegistryBuilder().applySettings(configuration.getProperties() ).buildServiceRegistry();sessionFactory=configuration.buildSessionFactory(serviceRegistry) ;//2. 创建⼀个 Session 对象Session session=sessionFactory.openSession();//3. 开启事务Transaction transaction=session.beginTransaction();//4. 执⾏保存操作News news = new News("Java12345", "ATGUIGU", new Date(new java.util.Date().getTime()));session.save(news);//5. 提交事务/doc/63fa364d5022aaea998f0fde.html mit();//6. 关闭 Sessionsession.close();//7. 关闭 SessionFactory 对象sessionFactory.close();}}7、测试结果如下:(1)数据库⾥⾯的结果如下:(2)Eclipse下的语句⽣成如下:以上就是简单Hibernate的测试,总结:1、不需要在数据库⾥⾯创建任何数据,由hibernate ⾃动⽣成;2、代码简单易理解,不复杂,测试数据只需要先创建以下⼏个步骤:SessionFactory-→Session-→Transaction-→session操作数据库-→提交-→关闭;3、不需要写SQL 语句,从头到尾没有写⼀条SQL语句,反⽽Hibernate帮我们⽣成SQL语句。

Hibernate 3入门

Hibernate 3入门

Hibernate 3入門Hibernate 是「物件/關係對應」(Object/Relational Mapping)的解決方案,簡寫為ORM,簡單的說就是將Java 中的物件與物件關係,映射至關聯式資料庫中的表格與表格之間的關係,Hibernate 提供了這個過程中自動對應轉換的方案。

2001年未Hibernate 第一個版本發表,2003年6月8日Hibernate 2 發表,並於年未獲得Jolt 2004 大獎,後被JBOSS 收納而成為其子項目之一,2005年3月Hibernate 3 正式發表,當中有了一些重大的改變,這份文件將以之前Hibernate 2 時撰寫的文件為基礎,針對Hibernate 3作重新整理的動作,所使用的版本為Hibernate 3.0。

基礎入門從一個最基本的物件關係映射自動化程式,瞭解Hibernate 組成的基本元素,並進一步瞭解Hibernate 的基礎語義、配置等概念。

∙O/R 映射入門第一個Hibernate 程式很簡單,將一個物件映射至一個資料表。

o配置Hibernateo第一個Hibernateo第二個Hibernate∙基本配置瞭解一下配置文件、映射文件中各種元素的意義,在進入物件關係映射的學習之前,這是必備的基本功夫。

o配置文件o資料庫連結o簡介快取(Session Level)o簡介事務管理(基於JDBC )o映射文件∙基本API瞭解一下Hibernate 常使用的幾個類別之基本使用方式。

o Sessiono Session 管理o Criteria 基本查詢o Criteria 進階查詢o DetchedCriteriao Query∙HQL(Hibernate Query Language)這是Hibernate 官方所推薦的查詢語言,接近SQL 的語法,並提供更多的特性與封裝。

o基本查詢o where、group by、order by 子句o更新、刪除∙SQL 支援Hibernate 提供了對SQL 的支援,並可以自行定義持久化方式。

【转】NHibernate入门教程

【转】NHibernate入门教程

【转】NHibernate⼊门教程摘要: 热衷于开源框架探索的我发现 MVC与jQuery easyUI的组合很给⼒。

由于原先⼀直受Ext JS框架的licence所苦恼,于是痛下决⼼寻找⼀个完全免费的js框架——easyUI。

它有完整的demo和强⼤AIP⼿册,使我在开发过程中得⼼应⼿。

以下是这篇博⽂Demo程序的演⽰效果: 解决⽅案如图1所⽰图1 Domain:领域模型 Dao:持久层 Service:服务层 ...posted @ 刘冬.NET 阅读(40176) |摘要: 内容摘要单向多对多关联映射双向多对多关联映射⼀、单向多对多关联映射 1.1 多对多关联映射描述众所周知,持久化类的有三种对应关系:“⼀对⼀”、“⼀对多(多对⼀)”和“多对多”。

在项⽬开发过程中,我们接触过权限系统。

⽽权限系统中,“⽤户”和“⾓⾊”的对应关系往往就是“多对多”。

让我们看⼀下“多对多”的数据,如图1.1.1所⽰:图1.1.1 从数据中,我们能够观察到:多个⽤户(User)对应多个⾓⾊(Role)。

构造“多对多”的关联关系,我们不仅需要⽤户(User)表和⾓⾊(Role)表,还需要⽤户和⾓⾊的关系表。

通过这三张表的关系构造了“多对多”的关联关系。

让我们看⼀下代码: pu.posted @ 刘冬.NET 阅读(8042) |摘要: 内容摘要单向关联映射双向关联映射⼀、单向关联映射 1.1 单向关联映射的描述让我们回顾⼀下之前讲的《多对⼀关联映射》,如图1.1.1所⽰,其实“⼀对多”关联映射就是“多对⼀”关联映射相反的映射。

图1.1.1 ⾄于“⼀对多”单向关联映射的代码如下:publicclassStudent{publicvirtualint?ID{get;set;}publicvirtualstringName{get;set;}}publicclassClass{publicvirtualint? ID{get;set;}publicvirtualstringName{get;set;}publicvirt.posted @ 刘冬.NET 阅读(6675) |摘要: 内容摘要单向主键关联映射双向主键关联映射唯⼀外键关联映射 NHibernate的⼀对⼀关联映射有三种,单向主键关联映射、双向主键关联映射、唯⼀外键关联映射。

hibernate高级用法

hibernate高级用法

hibernate高级用法Hibernate是一种Java持久化框架,用于将对象转换为数据库中的数据。

除了基本的用法,Hibernate还提供了一些高级的用法,以下是一些常见的Hibernate高级用法:1、继承Hibernate支持类继承,可以让子类继承父类的属性和方法。

在数据库中,可以使用表与表之间的关系来实现继承,例如使用一对一、一对多、多对一等关系。

使用继承可以让代码更加简洁、易于维护。

2、聚合Hibernate支持聚合,可以将多个对象组合成一个对象。

例如,一个订单对象可以包含多个订单行对象。

在数据库中,可以使用外键来实现聚合关系。

使用聚合可以让代码更加简洁、易于维护。

3、关联Hibernate支持关联,可以让对象之间建立关联关系。

例如,一个订单对象可以关联一个客户对象。

在数据库中,可以使用外键来实现关联关系。

使用关联可以让代码更加简洁、易于维护。

4、延迟加载Hibernate支持延迟加载,可以在需要时才加载对象。

延迟加载可以减少数据库的负担,提高性能。

Hibernate提供了多种延迟加载的策略,例如按需加载、懒惰加载等。

5、事务Hibernate支持事务,可以确保数据库的一致性。

事务是一组数据库操作,要么全部成功,要么全部失败。

Hibernate提供了事务管理的方法,例如开始事务、提交事务、回滚事务等。

6、缓存Hibernate支持缓存,可以减少对数据库的访问次数,提高性能。

Hibernate提供了多种缓存策略,例如一级缓存、二级缓存等。

使用缓存需要注意缓存的一致性和更新问题。

7、HQL查询语言Hibernate提供了HQL查询语言,可以让开发人员使用面向对象的查询方式来查询数据库。

HQL查询语言类似于SQL查询语言,但是使用的是Java类和属性名,而不是表名和列名。

HQL查询语言可以更加灵活、易于维护。

以上是一些常见的Hibernate高级用法,它们可以帮助开发人员更加高效地使用Hibernate进行开发。

HibernateHQL--实体、属性查询,全参数绑定,引用查询

HibernateHQL--实体、属性查询,全参数绑定,引用查询

是Hibernate官方推荐的查询模式,比Criteria功能更强大。

1)实体查询:出现类名和属性名必须注意大小写区分;当不同路径下存在相同类名,需要写入在hql中写入包名;查询目标实体存在着继承关系,将查询目标的所有子类的库表记录一起返回。

String hql = “from TUser”;Query query = session.createQuery(hql);List list = query.list();2)属性查询:有时页面不需要取整个对象,而只取某个属性。

List list = session.createQuery(“select user.age from TUser user”).list();Iterator it = list.iterator();while(it.hasNext()){//返回的list中,每个条目都是一个对象数组,依次包含我们所获取的数据。

Object[] results = (Object[])it.next();System.out.println(results[0]);System.out.println(results[1]);}注:如果觉得返回数组的方式不够灵活,可以在HQL中构造对象实例。

List list = this.session.createQuery(“select new TUser(,user.age) from TUser user”).list();Iterator it = list.iterator();while(it.hasNext()){TUser user = (TUser)it.next();System.out.println(user.getName());}注:通过HQL动态构造对象实例,此时查询结果中的TUser对象只是一个Java对象,仅用于对查询结果的封装,除了在构造时赋予的属性值之外,其他属性均为未赋值状态,当我们通过session对此对象进行更新,将导致对user对象的数据库插入一条新数据,而不是更新原有对象。

hibernate常用方法

hibernate常用方法

hibernate常用方法Hibernate是一个开源的对象-关系映射框架,用于简化Java应用程序与数据库之间的交互。

Hibernate提供了丰富的API来执行通用的数据库操作,包括插入、更新、删除和查询。

下面是Hibernate常用的方法:1. save(:将一个新的对象插入到数据库中,返回一个唯一标识符。

2. update(:更新数据库中的一个对象。

3. delete(:从数据库中删除一个对象。

4. get(:根据给定的唯一标识符查询数据库中的一个对象。

5. load(:根据给定的唯一标识符查询数据库中的一个对象并加载它。

6. saveOrUpdate(:根据对象的状态来决定是插入还是更新数据库中的对象。

7. merge(:将给定对象的状态合并到数据库中的对象。

8. persist(:将一个新的对象插入到数据库中,并立即执行同步。

9. lock(:锁定一个对象,防止其他会话对其进行修改。

10. clear(:清除会话缓存中的所有对象。

11. evict(:从会话缓存中移除给定的对象。

12. refresh(:强制会话重新从数据库中加载对象的状态。

13. flush(:将会话缓存中的所有操作发送到数据库中。

14. Criteria API:用于创建复杂的查询条件。

15. HQL(Hibernate Query Language):类似于SQL的查询语言,用于查询对象。

16. Native SQL:直接执行SQL语句来操作数据库。

17. Transaction API:用于管理事务的开始、提交和回滚。

18. Session API:用于管理Hibernate会话的生命周期。

19. SessionFactory API:用于创建和销毁Hibernate会话工厂。

20. Dialect API:用于不同数据库间的差异性处理。

这些方法涵盖了Hibernate的核心功能,开发者可以根据具体的需求选择合适的方法来操作数据库。

Hibernate教程

Hibernate教程

其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。

然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。

这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。

在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss。

本文的目的是演示一下Hibernate的安装过程以及最基本的功能,从而给初学者一个低得不能再低的入门门槛。

下载文件你需要Java SDK、Hibernate包、Ant包、和JDBC Driver。

1、Hibernate包下载地址:/hibernate/?sort_by=date&sort=desc2、Ant包下载地址:/ant/binaries/apache-ant-1.6.1-bin.zip3、JDBC Driver要根据你用的database来定,一般database官方网站上都会有。

Hibernate 支持常用的database,比如MySQL, Oracle, PostgreSQL, 和MS-SQL Server。

这些数据库都有JDBC Driver:Oracle JDBC Driver下载地址(下载前必须同意Oracle协议书)/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.h tmlMySQL JDBC Driver下载地址/downloads/connector/j/3.0.htmlPostgreSQL JDBC Driver下载地址/download.htmlMS-SQL Server JDBC Driver下载地址/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05 bf71&displaylang=en4、将Hibernate包和Ant包分别解压至c:\dev\下(此目录不重要,你可以换其它任何目录)。

hibernate 调用存储过程 传参 获取返回值

hibernate 调用存储过程 传参 获取返回值

Hibernate调用存储过程传参获取返回值简介Hibernate是一个流行的Java持久化框架,它提供了一种将Java对象映射到关系型数据库的方式。

在某些情况下,我们可能需要调用存储过程来执行一些复杂的数据库操作。

本文将介绍如何使用Hibernate调用存储过程,并传递参数和获取返回值。

准备工作在开始之前,我们需要完成以下准备工作:1.安装Java JDK和Hibernate框架。

2.配置Hibernate的数据库连接信息,包括数据库驱动、URL、用户名和密码等。

3.创建数据库存储过程,并确保它已经在数据库中正确地定义和测试。

Hibernate映射文件在使用Hibernate调用存储过程之前,我们需要创建一个Hibernate映射文件来定义存储过程的调用。

下面是一个示例的映射文件:<hibernate-mapping><sql-query name="callStoredProcedure" callable="true">{ call my_stored_procedure(:param1, :param2) }</sql-query></hibernate-mapping>在上面的示例中,我们定义了一个名为”callStoredProcedure”的SQL查询,其中”callable”属性被设置为”true”,表示这是一个调用存储过程的查询。

存储过程的调用语法是{ call procedure_name(:param1, :param2) },其中”:param1”和”:param2”是存储过程的输入参数。

调用存储过程一旦我们有了Hibernate映射文件,我们就可以在Java代码中使用Hibernate来调用存储过程。

下面是一个示例代码:Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction();Query query = session.getNamedQuery("callStoredProcedure");query.setParameter("param1", value1);query.setParameter("param2", value2);query.executeUpdate();mit();在上面的示例中,我们首先获取Hibernate的Session对象,并开启一个事务。

hibernate的addscalar方法

hibernate的addscalar方法

hibernate的addscalar方法Hibernate的addScalar方法是用来指定查询结果中要返回的标量值(非实体对象)的方法。

它可以在查询中的SELECT语句中使用,并且需要指定要返回的标量值的列名和数据类型。

addScalar方法的语法为:public <T> Query addScalar(String columnAlias, Class<T> type)其中,参数columnAlias指定要返回的标量值的列名,type指定要返回的标量值的数据类型。

addScalar方法可以在SQLQuery对象或者原生SQL语句中使用。

通过使用addScalar方法,可以将查询结果转换为指定的数据类型,而不仅仅限于Hibernate映射的实体对象。

以下是一个使用addScalar方法的示例:String sql = "SELECT name, age FROM User";Query query = session.createSQLQuery(sql).addScalar("name", StringType.INSTANCE).addScalar("age", IntegerType.INSTANCE);List<Object[]> results = query.list();for (Object[] result : results) {String name = (String)result[0];int age = (int)result[1];// ...}在上面的示例中,查询结果包含name和age两列,通过addScalar方法指定了name列的数据类型为StringType.INSTANCE(Hibernate提供的字符串数据类型)和age列的数据类型为IntegerType.INSTANCE (Hibernate提供的整数数据类型)。

hibernate查询数据库返回一条数据的方法

hibernate查询数据库返回一条数据的方法

hibernate查询数据库返回一条数据的方法Hibernate 是一个强大的对象关系映射(ORM)框架,它简化了Java 程序与数据库之间的交互。

在本文中,我们将探讨使用Hibernate 查询数据库并返回一条数据的方法。

### Hibernate 查询数据库返回一条数据的方法在Hibernate 中,查询数据库并返回一条数据通常有多种方式。

下面列举了几种常用的方法:#### 1.使用HQL(Hibernate Query Language)```java// 获取Hibernate 会话Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();// 使用HQL 查询String hql = "FROM YourEntityName where someColumn = :value";Query query = session.createQuery(hql);query.setParameter("value", someValue);// 获取唯一结果Object result = query.uniqueResult();mit();session.close();// 输出结果if (result != null) {YourEntity entity = (YourEntity) result;// Do something with the entity}```注意:这里的`YourEntityName` 替换为你的实体类名,`someColumn` 和`someValue` 替换为你需要查询的列名和值。

#### 2.使用Criteria API```javaSession session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();// 创建Criteria 对象Criteria criteria = session.createCriteria(YourEntityName.class);criteria.add(Restrictions.eq("someColumn", someValue));// 获取唯一结果Object result = criteria.uniqueResult();mit();session.close();// 输出结果if (result != null) {YourEntity entity = (YourEntity) result;// Do something with the entity```#### 3.使用Native SQL```javaSession session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();// 使用原生SQL 查询String sql = "SELECT * FROM your_table WHERE some_column = :value";SQLQuery query = session.createSQLQuery(sql);query.setParameter("value", someValue);// 指定返回的实体类query.addEntity(YourEntityName.class);// 获取唯一结果Object result = query.uniqueResult();mit();session.close();// 输出结果if (result != null) {YourEntity entity = (YourEntity) result;// Do something with the entity}注意:在使用Native SQL 时,确保你了解原生SQL 语句的数据库依赖性。

Nhibernet教程

Nhibernet教程

一、NHibernate简介在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。

NHibernate是一个面向.Net环境的对象/关系数据库映射工具。

对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

NHibernate除了能将一张表映射为一个对象,还可以将表间关系变为对象的属性。

例如学生和课程间的多对多关系就可以转化为学生类中的一个课程集合的属性。

由此可见,NHibernate不仅仅管理.Net类到数据库表的映射,还提供数据查询和获取数据的方法。

因此采用NHibernate,可以大幅度减少开发时人工使用SQL处理数据的时间。

二、NHibernate使用步骤1.为系统引入NHibernate的库,并且配置NHibernate;2.新建一个将要持久化.Net对象的表;3.构建一个需要被持久化的.Net类;4.构建一个可以让NHibernate知道如何完成ORM映射的XML文件;5.使用NHibernate的API来编程三、NHibernate的使用1.配置NHibernate(1)NHibernate的配置文件有两种:在桌面应用程序(WinForm)中为App.config,在网页应用程序(WebForm)中为web.config。

两种方法要添加的配置信息是一样的,目标都是告诉NHbiernate使用什么样的数据库,使用哪个库,用户密码分别是什么。

如果使用的是WinForm,将如下文本保存为App.config放到程序启动目录就可以。

如果是WebForm,则将下面的文本添加到web.config中(2)然后将NHibernate唯一的一个dll(NHibernate.dll)添加到工程的引用中,步骤如下:2.创建一个用于测试的表这里需要创建3张表,分别用于保存:学生、课程、选课信息。

hibernate的save方法

hibernate的save方法

hibernate的save方法Hibernate是一个开源的Java持久化框架,它为开发人员提供了一种创建、检索、更新和删除对象的简化方法。

其中的save方法是Hibernate提供的一个用于将对象保存到数据库的方法。

在Hibernate中,save方法的主要功能是将一个持久化对象保存到数据库中。

当我们创建一个新的持久化对象时,需要使用save方法来将该对象保存到数据库中。

下面是save方法的详细说明:1. save方法的语法:public Serializable save(Object object) throws HibernateException参数object为要保存的持久化对象,返回值为序列化的对象。

2. save方法的使用:使用save方法将持久化对象保存到数据库的基本步骤如下:a.创建一个持久化对象。

b. 开启一个Hibernate事务。

c. 调用save方法将持久化对象保存到数据库中。

d.提交或回滚事务。

3. save方法的特点:a. 当调用save方法时,Hibernate会为该对象分配一个唯一的标识符(即主键),并将该对象保存到数据库中。

如果对象已经存在于数据库中,则会抛出一个异常。

b. 在调用save方法之前,对象可以是临时状态(即没有与数据库关联),在调用save方法后,对象将转变为持久化状态(即与数据库关联)。

c. 当我们使用save方法将一个对象保存到数据库中时,Hibernate 会立即将该插入操作同步到数据库中,即会立即执行一条INSERT语句。

因此,save方法是一个非常耗时的操作,尤其当需要保存大量对象时,性能可能会受到影响。

4. save方法的示例:假设我们有一个名为Person的实体类,包含id、name和age属性,我们可以使用以下代码将一个Person对象保存到数据库中:// 创建一个Person对象Person person = new Person(;person.setName("张三");person.setAge(20);// 开启一个Hibernate事务Session session = sessionFactory.getCurrentSession(;session.beginTransaction(;// 调用save方法将Person对象保存到数据库中session.save(person);//提交事务通过以上代码,我们可以将一个新的Person对象保存到数据库中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主键生成策略(续)
sequence 采用数据库提供的sequence机制生成主键,如Oracle Sequence native 由Hibernate根据数据库适配器中的定义,自动采用identity、hilo、 sequence的其中一种作为主键生成方式
uuid.hex
由Hibernate基于128位唯一值产生算法,根据当前设备IP,时间,JVM启 动时间,内部自增量等4个参数生成十六进制数值(编码后以长度为32位的字 符串表示)作为主键。利用uuid.hex方式生成主键将提供最好的数据插入性 能和数据库平台适应性 uuid.String 与uuid.hex类似,只是生成的主键不进行编码(长度16位)
Data Classes
Hibernate过程及原理
设计实体类(简单的Java对象,Plain Old Java Objects, POJO) 通过注解或者xml文件定义实体类和数据 库表的映射关系 Hibernate框架根据映射关系定义和数据库 配置动态生成SQL语句,通过JDBC来执 行SQL语句
Transaction tx2=session2.beginTransaction(); session2.update(user); 4. 此时处于Detached状态的user对象 再次借助session2由Hibernate纳入管
user.setName(“Jonh_2”);
mit();
Persistent
close() * clear() * evict() update saveOrUpdate lock
garbage
Detached
* 对session里的所有实体对象都有效
VO和PO
从实体对象是否被纳入Hibernate实体管理容器的角度, Transient和Detached状态的实体对象可以统称为VO(Value Object),而被管理的实体对象称为PO(Persistent Object)。 两者的区别: 1.VO是相对独立的实体对象,处于非管理状态。
2.PO是Hibernate纳入其实体管理容器(Entity Map)的对象, 它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在 事务提交时将反映到实际数据库中。 3.如果一个PO与其对应的Session实例分离,那么此时,它又 会变成一个VO。
映射文件初探 Biblioteka 主键映射<id name="propertyName" type="typename" column="column_name" unsaved-value="any|none|null|id_value“> <generator class="generatorClass"/> </id> (1) (2) (3) (4) (5)
主键生成策略
assigned 主键由应用逻辑产生,数据交由Hibernate保存时,主键值已经设 置完成,无需Hibernate干预。 hilo 通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主 键生成历史状态 seqhilo 与hilo类似,通过hilo算法实现主键生成机制,只是主键历史状态 保存在Sequence中,适用于支持Sequence的数据库,如Oracle。 increment 主键按数值顺序递增。 identity 采用数据库提供的主键生成机制,如SQL Server,MySQL中的自 增长主键生成机制
(1) name (可选) :标识属性的名称。 (2) type(可选):标识Hibernate类型的名字。 (3) column(可选-默认为属性名):对应数据库表的主键字段的名字。 (4) unsaved-value(可选-默认为null):这个值用来判断对象是否要保存。 (5) 主键生成方式。
理容器,恢复Persistent状态。
5. 由于user对象再次处于Persistent状 态,因此其属性的改变将由Hibernate
自动固化到数据库中。
实体生命周期示例图
new
Transient
garbage delete()
get load iterate etc.
save() saveOrUpdate()
实体生命周期
实体对象的生命周期有三种状态:
Transient(瞬时状态)
实体对象在内存中瞬时存在,它与数据库中的记录无关联,只是一 个普通的对象 Persistent (持久状态) 实体对象处于由Hibernate所管理的状态,实体和数据库中的记录 有关联,其变更将由Hibernate固化到数据库中。 Detached (游离状态)
<property name="hibernate.format_sql">true</property> <property name="hibernate.show_sql">true</property>
编写第一个Hibernate程序
编写实体类User{userId,name,birthDate} 编写实体映射文件User.hbm.xml
必须位于classpath下 主键的生成方式 处理日期类型 映射文件详解
编写测试程序
初始化配置 获取SessionFactory对象并打开Session 通过事务插入User对象 关闭Session
编写第一个Hibernate程序
编写工具类HibernateSessionUtil完成Session获 取关闭工作 通过MyEclipse自动生成 HibernateSessionFactory类 剖析HibernateSessionFactory类 从数据库中取得某个user对象:Session.get方法 对该user对象进行修改:Session.update方法 删除user对象:Session.delete方法 update方法 saveOrUpdate方法
处于Persistent状态的对象,其对应的Session实例关闭之后,那 么,此对象就处于"Detached"状态。Detached状态和Transient状态 的区别在于Detached状态的对象可以再次与某个Session实例相关联 而成为Persistent对象。
实体状态转换
User user=new User(); user.setName(“John”); Transaction tx=session.beginTransaction(); session.save(user); mit(); 3. User对象此时状态为Detached,因 session.close(); 为与其关联的session已经关闭。 1. 此时user对象处于Transient状态。 2. 此时user对象已经由Hibernate纳入 管理容器,处于Persistent状态。
Passport.hbm.xml <hibernate-mapping> <class name=“com.sino.model.Passport” table=“t_passport”> <id name=“id” column=“id”> <generator class=“foreign”> <param name=“property”>user</param> </generator> </id> <one-to-one name=“user” class=“er” constrained=“true” /> <property name=“serial” column=“serial” type=“ng.String” /> <property name=“expiry” column=“expiry” /> </class> </hibernate-mapping>
编写第一个Hibernate程序
Step1: 导入Hiernate jar包 Step2: 导入jdbc驱动jar包 Step3: 编写Hibernate配置文件
从官方示例程序中拷贝模板文件 设置数据库相关配置 定义自动生成数据库表 定义运行时显示SQL语句 指定映射文件
<property name="hibernate.hbm2ddl.auto">create</property>
原理示意
Student.hbm.xml Student t_student Hibernate工作流程: session.save(student)
1.根据类型找到映射文件 2.读取映射关系 3.根据映射关系生成insert语句 4.用student对象的属性值作为Sql参 数值 5.创建运行 PreparedStatement.executeUpdate方 法
Hibernate简介
——讲师:
Hibernate的作用
解决对象关系映射( ORM)问题 成为ORM第一首选 通常用于设计Dao层 极大的简化了数据库访问代码 良好的数据库可移植性 无侵入式的设计,无污染
Hibernate在应用程序中的位置
JDBC
持久层组件
关系数据库
Business Classes
定义1对1关联
一对一关联包括两种形式: 主键关联
惟一外键关联
1对1主键关联实体定义
User{userId:Integer,birthDay:Date,name: String,passport:Passport} Passport{passportId:Integer,serial:String, expiry:Integer,user:User}
相关文档
最新文档