最经典的hibernate教程 从入门到精通 第一篇(共四篇)
Hibernate教程---看这一篇就够了
Hibernate教程---看这⼀篇就够了1 Hibernate概述1.1什么是hibernate框架(重点)1 hibernate框架应⽤在javaee三层结构中 dao层框架2 在dao层⾥⾯做对数据库crud操作,使⽤hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进⾏封装,使⽤hibernate好处,不需要写复杂jdbc代码了,不需要写sql语句实现3 hibernate开源的轻量级的框架4 hibernate版本Hibernate3.xHibernate4.xHibernate5.x(学习)1.2 什么是orm思想(重点)1 hibernate使⽤orm思想对数据库进⾏crud操作2 在web阶段学习 javabean,更正确的叫法实体类3 orm:object relational mapping,对象关系映射⽂字描述:(1)让实体类和数据库表进⾏⼀⼀对应关系让实体类⾸先和数据库表对应让实体类属性和表⾥⾯字段对应(2)不需要直接操作数据库表,⽽操作表对应实体类对象画图描述2 Hibernate⼊门2.1 搭建hibernate环境(重点)第⼀步导⼊hibernate的jar包因为使⽤hibernate时候,有⽇志信息输出,hibernate本⾝没有⽇志输出的jar包,导⼊其他⽇志的jar包不要忘记还有mysql驱动的jar包第⼆步创建实体类package cn.itcast.entity;public class User {/*hibernate要求实体类有⼀个属性唯⼀的*/// private int uid;private String uid;private String username;private String password;private String address;// public int getUid() {// return uid;// }// public void setUid(int uid) {// this.uid = uid;// }public String getUsername() {return username;}public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}(1)使⽤hibernate时候,不需要⾃⼰⼿动创建表,hibernate帮把表创建第三步配置实体类和数据库表⼀⼀对应关系(映射关系)使⽤配置⽂件实现映射关系(1)创建xml格式的配置⽂件- 映射配置⽂件名称和位置没有固定要求- 建议:在实体类所在包⾥⾯创建,实体类名称.hbm.xml(2)配置是是xml格式,在配置⽂件中⾸先引⼊xml约束- 学过约束dtd、schema,在hibernate⾥⾯引⼊的约束dtd约束(3)配置映射关系<hibernate-mapping><!-- 1 配置类和表对应class标签name属性:实体类全路径table属性:数据库表名称--><class name="er" table="t_user"><!-- 2 配置实体类id和表id对应hibernate要求实体类有⼀个属性唯⼀值hibernate要求表有字段作为唯⼀值--><!-- id标签name属性:实体类⾥⾯id属性名称column属性:⽣成的表字段名称--><id name="uid" column="uid"><!-- 设置数据库表id增长策略native:⽣成表id值就是主键⾃动增长--><generator class="native"></generator></id><!-- 配置其他属性和表字段对应name属性:实体类属性名称column属性:⽣成表字段名称--><property name="username" column="username"></property><property name="password" column="password"></property><property name="address" column="address"></property></class></hibernate-mapping>第四步创建hibernate的核⼼配置⽂件(1)核⼼配置⽂件格式xml,但是核⼼配置⽂件名称和位置固定的- 位置:必须src下⾯- 名称:必须hibernate.cfg.xml(2)引⼊dtd约束(3)hibernate操作过程中,只会加载核⼼配置⽂件,其他配置⽂件不会加载第⼀部分:配置数据库信息必须的第⼆部分:配置hibernate信息可选的第三部分:把映射⽂件放到核⼼配置⽂件中<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 第⼀部分:配置数据库信息必须的 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property> <property name="ername">root</property><property name="hibernate.connection.password">root</property><!-- 第⼆部分:配置hibernate信息可选的--><!-- 输出底层sql语句 --><property name="hibernate.show_sql">true</property><!-- 输出底层sql语句格式 --><property name="hibernate.format_sql">true</property><!-- hibernate帮创建表,需要配置之后update: 如果已经有表,更新,如果没有,创建--><property name="hibernate.hbm2ddl.auto">update</property><!-- 配置数据库⽅⾔在mysql⾥⾯实现分页关键字 limit,只能使⽤mysql⾥⾯在oracle数据库,实现分页rownum让hibernate框架识别不同数据库的⾃⼰特有的语句--><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 第三部分:把映射⽂件放到核⼼配置⽂件中必须的--><mapping resource="cn/itcast/entity/User.hbm.xml"/></session-factory></hibernate-configuration>2.2 实现添加操作第⼀步加载hibernate核⼼配置⽂件第⼆步创建SessionFactory对象第三步使⽤SessionFactory创建session对象第四步开启事务第五步写具体逻辑 crud操作第六步提交事务第七步关闭资源@Testpublic void testAdd() {// 第⼀步加载hibernate核⼼配置⽂件// 到src下⾯找到名称是hibernate.cfg.xml//在hibernate⾥⾯封装对象Configuration cfg = new Configuration();cfg.configure();// 第⼆步创建SessionFactory对象//读取hibernate核⼼配置⽂件内容,创建sessionFactory//在过程中,根据映射关系,在配置数据库⾥⾯把表创建SessionFactory sessionFactory = cfg.buildSessionFactory(); // 第三步使⽤SessionFactory创建session对象// 类似于连接Session session = sessionFactory.openSession();// 第四步开启事务Transaction tx = session.beginTransaction();// 第五步写具体逻辑 crud操作//添加功能User user = new User();user.setUsername("⼩王");user.setPassword("250");user.setAddress("⽇本");//调⽤session的⽅法实现添加session.save(user);// 第六步提交事务mit();// 第七步关闭资源session.close();sessionFactory.close();}3 内容⽬录1 实体类编写规则2 hibernate主键⽣成策略(1)native(2)uuid3 实体类操作(1)crud操作(2)实体类对象状态4 hibernate的⼀级缓存5 hibernate的事务操作(1)事务代码规范写法6 hibernate其他的api(查询)(1)Query(2)Criteria(3)SQLQuery3.1 实体类编写规则1 实体类⾥⾯属性私有的2 私有属性使⽤公开的set和get⽅法操作3 要求实体类有属性作为唯⼀值(⼀般使⽤id值)4 实体类属性建议不使⽤基本数据类型,使⽤基本数据类型对应的包装类(1)⼋个基本数据类型对应的包装类- int – Integer- char—Character、- 其他的都是⾸字母⼤写⽐如 double – Double(2)⽐如表⽰学⽣的分数,假如 int score;- ⽐如学⽣得了0分,int score = 0;- 如果表⽰学⽣没有参加考试,int score = 0;不能准确表⽰学⽣是否参加考试l 解决:使⽤包装类可以了, Integer score = 0,表⽰学⽣得了0分,表⽰学⽣没有参加考试,Integer score = null;3.2 Hibernate主键⽣成策略1 hibernate要求实体类⾥⾯有⼀个属性作为唯⼀值,对应表主键,主键可以不同⽣成策略2 hibernate主键⽣成策略有很多的值3 在class属性⾥⾯有很多值(1)native:根据使⽤的数据库帮选择哪个值(2)uuid:之前web阶段写代码⽣成uuid值,hibernate帮我们⽣成uuid值3.3 实体类操作对实体类crud操作添加操作1 调⽤session⾥⾯的save⽅法实现根据id查询1 调⽤session⾥⾯的get⽅法实现修改操作1 ⾸先查询,修改值(1)根据id查询,返回对象删除操作1 调⽤session⾥⾯delete⽅法实现3.4 实体类对象状态(概念)1 实体类状态有三种(1)瞬时态:对象⾥⾯没有id值,对象与session没有关联(2)持久态:对象⾥⾯有id值,对象与session关联(3)托管态:对象有id值,对象与session没有关联2 演⽰操作实体类对象的⽅法(1)saveOrUpdate⽅法:实现添加、实现修改3.5 Hibernate的⼀级缓存什么是缓存1 数据存到数据库⾥⾯,数据库本⾝是⽂件系统,使⽤流⽅式操作⽂件效率不是很⾼。
菜鸟入门深入浅出Hibernate1~4读书笔记
简介:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web 应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
一、面向应用的持久层设计1、Dao模式:Dao模式实际上是两个模式的组合,即Data Accessor模式和Active Domian Object 模式,其中Data Accessor模式实现了数据访问和业务逻辑的分离;而Active Domain Object模式实现了业务数据的对象化封装。
Dao模式通过业务层提供数据抽象层接口,实现了以下目标:1)数据存储逻辑的分离精通数据库操作技术的开发人员可以根据接口提供数据库访问的最优化实现;精通业务的开发人员则可以抛开数据层的繁琐细节,专注于业务逻辑编码。
2)数据访问底层实现的分离DAO模式通过将数据访问划分为抽象层和实现层,从而分离了数据使用和数据访问的底层实现细节。
切换不同的数据库平台。
3)资源管理和调度的分离Dao模式将数据访问逻辑从业务逻辑中脱离出来,使得在数据访问层实现统一的资源调度成为可能,通过数据库连接池以及各种缓存机制的配合使用,可以在保持上层系统不变的情况下,大幅度提升系统性能。
4)数据抽象二、Hibernate概述2.1构建Hibernate基础代码Hibernate基础代码包括POJO类和Hibernate映射文件。
POJO作为数据实体的对象化表现形式,也称为实体类。
Hibernate是一种“对象-关系型数据映射组件”,她使用映射文件将对象(Object)与关系型数据相关联。
在Hibernate中,映射文件通常以“.hbm.xml”作为后缀。
hibernate完美培训教程课件
hibernate完美培训教程
11
Hibernate核心接口
hibernate完美培训教程
12
Configuration
➢ 概述:Configuration 类负责管理Hibernate 的配置信息。它包括
hibernate.connection.url jdbc:mysql://localhost/hibernate
ername root
hibernate.connection.password ➢ 数据库连接池的配置-DBCP(App Server连接池首选)
如果是集合类型的属性,它的类型必须定义为集合的接口。例如: List、Set。
提供一个标识属性(identifier property)。如果没有该属性,一些 功能不起作用,比如:级联更新(Cascaded updates) Session.saveOrUpdate()。
hibernate完美培训教程
目录
一、持久化层-O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践
hibernate完美培训教程
1
一、持久化层-O/R Mapping
primary key (name)
1:n/n:1 n:m
外键 关联表
)
继承
单表继承、具体表继承、
类表继承
hibernate完美培训教程
3
对象—关系数据库的不匹配范式
最新hibernate技术课程讲解
西安软件服务外包学院
NAME XIFULONG
Query query=session.createQuery(HQL) Query是hibernate给我们提供的查询接口。 一下为接口中常用的方法:
1).public Object uniqueResult() throws HibernateException;返回一条记 录数的方法。
public void delete(Object object) throws HibernateException; //支持HQL查询语言 public Query createQuery(String queryString) throws HibernateException; //支持sql查询 public SQLQuery createSQLQuery(String queryString) throws HibernateException;
hibernate技术课程讲解
第一章 hibernate框架编程准备知识讲解
1.什么是hibernate 2.为什么需要hibernate 3.在myeclipse中手动搭建hibernate开发环境 4.使用hibernate对数据库进行增删改查操作 5.使用myeclipse的集成环境搭建hibernate开发环境 6.hibernate的体系结构概述
<property name="username" column="tb_username" length="50"
type="string" not-null="true"/>
<property name="password" column="tb_password" length="50" type="string"
1 Hibernate入门
加载并存储对象
public class EventManager { public static void main(String[] args) { EventManager mgr = new EventManager(); mgr.createAndStoreEvent("My Event", new Date()); HibernateUtil.getSessionFactory().close(); } private void createAndStoreEvent(String title, Date theDate) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event theEvent = new Event(); theEvent.setTitle(title); theEvent.setDate(theDate); session.save(theEvent); session.getTransaction().commit(); } }
– column属性则告诉Hibernate, 我们使用EVENTS表的 哪个字段作为主键。嵌套的generator元素指定了标识 符生成策略,在这里我们指定native,它根据已配置的 数据库(方言)自动选择最佳的标识符生成策略。
映射文件
• 和id元素一样,property元素的name属性告诉 Hibernate使用哪个getter和setter方法。在此例中, Hibernate会寻找getDate()/setDate(), 以及 getTitle()/setTitle()。 • 为什么date属性的映射含有column attribute,而 title却没有?当没有设定column attribute 的时候, Hibernate缺省地使用JavaBean的属性名作为字 段名。对于title,这样工作得很好。然而,date在 多数的数据库里,是一个保留关键字,所以我们 最好把它映射成一个不同的名字。
1-Hibernate入门
维 信 高端 软 件 研 发 实 训
创建持久化类
持久化类是指其实例需要被hibernate持久化到数据库 中的类,持久化符合javaBean的规范,包含一些属 性,以及与之对应的set,get方法 持久化类必须有一个ID
public class User { private int id; private String username; private String password; }
维 信 高 端 软 件 研 发 实 训
Hibernate入门
应用Hibernate包含以下步骤:
创建hibernate配置文件 创建持久化类 创建对象-关系映射文件 通过API编写访问数据库的代码
维 信 高 端 软 件 研 发 实 训
创建hibernate配置文件
Hibernate从其配置文件hibernate.cfg.xml中读取和数据库连接有 关的信息,这个配置文件应该位于应用的classpath
维 信 高 端 软 件 研 发 实 训
Query接口
Query 接口是 Hibernate 的查询接口,用于向数据库查询对象。 Query Query 接口是 Hibernate 的查询接口,用于向数据库查询对象。 Query 实例包装了一个 HQL(hibernate 查询语句, HQL 查 实例包装了一个 HQL(hibernateQuery QueryLanguage) Language) 查询语句, HQL 查 询语句与 SQL 查询语句有些类似,但 HQL 查询语句是面向对象的,它 询语句与 SQL 查询语句有些类似,但 HQL 查询语句是面向对象的,它 引用类名及类的属性名,而不是表名和字段名 引用类名及类的属性名,而不是表名和字段名
Hibernate教程讲师用-23页精选文档
Hibernate教程前言1、 java对象持久化技术1.1 、hibernate是什么1.2、软件模型1.2.1、概念模型1.2.2、关系数据模型1.2.3、域模型1.2.4、域对象1.2.5、域对象之间的关系1.2.6、域对象的持久化概念提示:1.3、数据库访问模式1.3.1、ORM模式1.3.2、主动域对象模式1.3.3、JDO模式1.3.4、CMP模式一、数据源层-O/R Mapping主要介绍三层架构,如何分层?(逻辑上的分层,二个原则)数据层技术的选择:直接使用1.1、SQL/JDBC:优点:很多开发者熟悉关系数据库管理系统,理解SQL,也知道如何使用表和外键进行工作。
此外,他们可以始终使用众所周知并广泛使用的DAO设计模式对业务逻辑隐藏复杂的JDBC代码和不可移植的SQL。
缺点:为域中的每个类手工编写持续性代码的工作是非常可观的,特别是需要支持多种SQL方言时。
这项工作通常会消耗很大一部分的开发努力。
此外,当需求改变时,一个手工编码的解决方案总是需要更多的注意和维护努力。
1.2、序列化:Java有一个内建的持久化机制:序列化提供了将对象图(应用状态)写到字节流中的能力,然后它可能被持久化到文件或数据库中。
持久化也被Java的远程方法调用(RMI)使用来为复杂对象传递值语义。
持久化的另一种用法是在机器集群中跨节点复制应用状态。
缺点:很不幸,一个相互连接的对象图在序列化之后只能被当作一个整体访问,如果不反序列化整个流就不可能从流中取出任何数据。
这样,结果字节流肯定会被认为不适合进行任意的检索或聚合。
甚至不可能独立地访问或更新一个单独的对象或子图。
非常明显,因为当前特定的技术,序列化不适合于作为高并发性的Web和企业应用的持久化机制。
在特定的环境中它被作为桌面应用的适当的持久化机制。
1.3EJB entity beansEJB1.1实体Bean在实践中彻底地失败了。
EJB规范的设计缺陷阻碍了Bean管理的持续性(BMP)实体Bean有效地执行。
hibernate笔记
步步为营Hibernate全攻略(一)构建Hibernate框架环境任何一项新技术的出现都有它的必然性,Hibernate也不例外,所以在掌握Hibernate的具体应用之前我们一定先要了解Hibernate是什么?使用Hibernate会给我们的程序开发带来哪些好处?使用Hibernate的好处简单来讲体现在以下几个方面:1. Hibernate说白了就是对持久层进行的封装,它简化了对数据库的操作,使得我们可以以对象方式直接访问数据库中的数据。
实现了完全的OO思想。
2. 另外由于Hibernate对JDBC的彻底封装,使得我们可以不用在程序中写传统的sql语句便能实现对数据库的各种操作,极大的提高了生产力。
3. Hibernate支持MySQL,SQL Server等多种数据库。
Hibernate提供了多种数据库的接口,只要更改配置信息可以实现对不同数据库的操作,换句话说也就是你可以轻视的实现数据库更换。
说了这么多Hibernate的好处,那Hibernate到底该怎样用呢?别急下面我们就来看看Hibernate环境是如何搭建起来的。
1. 建立Java项目(也可以是java web项目)。
2. 导入相关jar包。
导入jar包的方式可以有两种。
第一种是直接添加外部jar包,也就是我们的“Add External JARs”。
另外一种是先建立自己的jar包库,然后向新建的库中加入jar包,如果使用这种方式最后一定不要忘记将建好的库引入到项目中。
两种方式均可,但一般更推荐第二种方式。
加入的jar包主要有以下这些:2.1在Hibernate_Home/lib/路径下的所有jar包。
2.2加入Hibernate核心jar包:hibernate3.jar。
2.3加入所使用的数据库的JDBC驱动包。
使用MySQL数据库则加入MySQL数据库驱动mysql-connector-java-3.1.13-bin.jar。
chapter01 Hibernate入门
Chapter 01 Hibernate入门开发环境:Hibernate4.2.2 + JDK 7 + Oracle11g + NetBeans 7.3.1样本数据:继续使用咖啡连锁店数据系统和样本数据。
Hibernate是对象/关系映射(ORM)的解决方案,它是Java应用和关系数据库之间的桥梁,负责将Java对象和关系数据之间的映射。
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL 和JDBC处理数据的时间。
Hibernate的目标是成为Java平台管理数据持久性问题的完整解决方案。
Hibernate是一个开放源代码的对象关系映射框架,它是对JDBC进行了非常轻量级的对象封装,使Java开发人员更加专注于业务的熟悉和处理,而非对数据库的基本操作,同时也能让开发人员以面向对象的思想来操作数据库。
1、准备工作需要Hibernate的相关jar包。
到/downloads下载Hibernate ORM框架,当前最新的正式发行版本为4.2.2。
将下载的压缩包解压缩,得到如下图所示的内容:其中的lib/required文件夹内,是开发基于Hibernate项目所需的各种依赖jar包。
如下图所示:在lib/required中的jar包,必须被添加到项目的类路径中。
如图:2、创建一个Hibernate项目1)启动NetBeans 7.x IDE,新建一个Java应用程序项目,名为“MyHibernateExample”。
2)在项目上单击右键,将lib/required文件夹下的相关依赖包添加到项目的库中。
同时把Oracle 11g的数据库驱动ojdbc6.jar包,也添加到项目的库中。
如下图所示:3)在项目中创建一个资源文件夹resources,用来存放项目中要用到的资源文件,如数据库配置属性文件、项目的配置文件、项目映射文件等。
Hibernate-01-入门
第一章
Hibernate入门
易可导航
预习检查
为什么需要Hibernate? Hibernate是什么? 使用Hibernate的步骤是?
易可导航
本章任务
了解Hibernate基本原理 学会编写实体映射文件 学会使用Hibernate完成数据增、删、改操作 学会在项目中使用Hibernate 一级缓存与二级缓存
i"3mh.t0pt.lpde:tm/d/"e>hnitbserjanvatae.i.os.oSuercrieafloizrageb.lnee{t/hib实er体na类te到-m表ap的pin映g-射 private I<nhtiebgeernrautied-;mapping>
private S<scctrlhiaensmgsa=un"nadmbaeom=""ec;er" table="tbl_user"
}
<property name="upass" type="ng.String">
<column name="upass" length="30" />
</property>
</class> </hibernate-mapping>
属性到字段的映射
易可导航
如何使用Hibernate?
代码精简易读
封装了JDBC操作, 以面向对象的方式
操作数据
开发工作量小,可 以集中精力处理业
务逻辑
Hibernate就是用来 解决这些问题的!
易可导航
hibernate第一课
第一课Hibernate对象关系映射以及开发步骤一、对象关系映射(O/R Mapping)1、定义:将java类的对象和数据库中表的记录进行关联。
2、Java类映射为库中的表3、Java的类的属性映射为表中的列4、Java类之间的关联关系映射为表的关联关系5、java的类对象和数据库中的记录保持同步状态。
受持久化框架的影响,有事务处理的能力。
二、Hibernate的构成1、实体类(POJO)2、实体映射文件(描述类的属性和表的映射关系)命名规则为:类名.hbm.xml3、hibernate的配置文件(Hibernate.cfg.xml)(1)、描述数据库的访问方式和操作的相关属性。
(2)、包含数据库的驱动和所使用的数据库的类型(mssql oracle、mysql),还包含相关的实体映射文件。
(3)、包含数据库访问的用户名和密码(4)、hibernate运行时首先加载Hibernate.cfg.xml文件,建立与数据库之间的关系三、Hibernate的重要接口(1)Configuration—用于加载hibernate的配置文件,用于与数据库之间建立联系。
使用它可以创建数据库会话工厂(SessionFactory)(2)SessionFactory创建数据库之间的会话对象Session,以单态方式出现(3)Session数据库会话接口,主要用于操作实体对象(4)、事务由Session对象获取,用于保持操作的事务特性(ACID )(5)、查询接口(Query)主要用于对数据库中的数据通过实体对象进行查询。
由Session对象创建.四、Hibernate的操作步骤库和表3、生成实体类和Hibernate映射文件4、在测试类中创建Session对象5、使用Session对象创建事务对象6、给实体对象赋值7、使用session对象操作实体对象8、提交事务9、关闭Session对象五、生成的Admin.hbm.xml文件六、生成的HibernateSessionFactory.java类。
Hibernate讲义(1)
Hibernate讲义(1)--Hibernate入门Hibernate是一种强大高效的持久层查询服务器,它对JDBC进行了轻量级的封装,并以面向对象的思维方式,解决数据库的操作问题。
在基于MVC设计模式的Java Web应用中,Hibrenate可以作为应用的数据访问层。
1.1.1持久层与ORM数据持久化一般指将内存中的数据或对象存储到可长期保存的某种介质上,以使其比存活时间比创建该对象的进程时间要长。
在对数据或对象持久化后,可以重新获取并能保证在没有对其进行任何改动的情况下,与持久化之前的一样。
一般持久化的实现通过各种关系数据库来完成。
持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道。
持久层在数据存储器中负责存储或获取数据的一组类和组件,持久层必须包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。
对象-关系映射(Object/Relation Mapping,ORM)是随着面向对象的软件发方法发展而产生的,是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。
对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。
ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
本质上就是将数据表映射为对象类,从一种形式转换到另外一种形式。
1.1.2Hibernate3 简介Hibernate是非常优秀、成熟的O/R Mapping框架,它提供了强大、高性能的Java对象和关系数据的持久化和查询功能。
Hibernate作为持久层的一项实现技术,运用DAO(Data Access Object)设计模式来实现对象和关系数据库之间的映射,对JDBC进行了轻量级的对象封装,在Java应用和关系数据库之间建立桥梁,Java程序员可以完全使用面向对象的编程思维来操作关系数据库。
Hibernate为Java 程序员提供了面向对象的API和接口来操纵数据库,从而避免了在业务逻辑中嵌入大量的JDBC访问和事物控制代码。
Hibernate入门(一)
hibernate.cfg.xml配置文件-2 <property name=“connection.driver_class”>com.mysql.jdb c.Driver</property>指定连接数据库的驱动程序 <property name="connection.url">jdbc:mysql://localhost:33 06/mybbs</property>指定连接数据库URL <property name=“dialect”>org.hibernate.dialect.MySQLDia lect</property>指定数据库使用的SQL方言
快速体验Hibernate的开发12-2
2.MyEclipse Database Explorer视图
快速体验Hibernate的开发12-3
3.建立一个数据库连接,在【DB Brower】空白 处右键 new
快速体验Hibernate的开发12-4
4.点击【Finish】显示数据库相关内容
通过这样配置,就可以通过MyEclipse对不同的数据库进行基本管理
《Interface》 Session
《Interface》 Query
《Interface》 Criteria
《Interface》 Transaction
总结
理解ORM 什么是Hibernate 手工配置Hibernate框架 快速体验Hibernate的开发 认识Hibernate基本接口
hibernate.cfg.xml配置文件-1 hibernate.cfg.xml是Hibernate框架的核心配置信息。 其中各个元素功能如下: <hibernate-configuration>是文件的根元素,所有相 关的配置都要在此元素下配置。 <session-factory>session工厂配置。相当于JDBC中 的DriverManager <property name=“ername”>root</property>指定 连接数据库的用户名 <property name=“connection.password”>123456</property> 指定连接数据库的密码
Hibernate学习过程
Hibernate学习过程第一章hibernate 入门一、jbosstools的安装hibernate是jboss公司的一个项目,所用STS工具并不支持hibernate配置文件的开发,jboss 集成开发包有大量的工具类。
1、导入工具过程:点击Help Install New Software接下来过程如图所示:Jboss工具安装成功如下2、创建一个java项目导入相应的包(hibernate_01中)。
在java项目中与web项目不同导入的jar包通常需要执行这一操作(Build Path->Add Build Path)二、创建hibernate配置文件在src目录下创建相应的hibernate.cfg.xml文件在这个文件中加上相应的数据库配置信息创建实体类User.java三、在实体类的包中创建相应的Use.hbm.xml文件,用来指定实体类和数据库映射关系与User.java 同一文件路径将配置文件User.hbm.xml添加到hibernate的cfg的配置文件中常用对象(Configuration , ServiceRegistry, SessionFactory)六、创建SessionFactory,SessionFactory是线程安全,所以整个SessionFactory应该基于单例的模式来创建(TestFirst.java中)Configuration cfg = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();SessionFactory factory = cfg.buildSessionFactory(serviceRegistry);七、创建sessionSession session = factory.openSession();八、通过session来进行各种操作以下代码完成了对象的添加操作try {session = factory.openSession();//开启事务session.beginTransaction();User u = new User();u.setNickname("张三");u.setPassword("123");u.setUsername("zhangsan");u.setBorn(new Date());session.save(u);//提交事务session.getTransaction().commit();} catch (HibernateException e) {e.printStackTrace();if(session!=null) session.getTransaction().rollback();} finally {if(session!=null) session.close();}体验hibernate的魅力吧请仔细研究关于User对象的增删改查(CRUD)在hibernate_01项目包中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• </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>
创建 Session 执行 开始 Transaction
复杂的查询操作稍后介绍
save delete update get mit() session.close() 结束
根据主键加载 Session session = sf.openSession(); User user = (User)session.get(User.class, id); session.close(); System.out.println(user.getUname() + "," + user.getUpass()); tx = session.beginTransaction(); User user = this.testLoad(id); user.setUname("new Name"); session.update(user); mit(); 没有更新数据, 不进行事务控 制 修改
JDBC与Hibernate的比较
相同点:
• • • 两者都是JAVA的数据库操作中间件。 两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。 两者都可以对数据库的更新操作进行显式的事务处理。
不同点:
• • • 使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate 使用的是HQL(Hibernate query language)语言 操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行, Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。 数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一 致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据 库中的值保持一致的。
持久化操作 save/update/delete/find
创建和销毁都相当耗费 资源,通常一个系统内 一个数据库只创建一个
Configuration 创建 SessionFactory
Hibernate.cfg.xml
类似于JDBC中的 Connection
FWXX.cfg.xml User.hbm.xml
2-2):添加配置文件 -- hibernate.cfg.xml
• <session-factory>
<property name="dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="connection.datasource">java:/comp/env/pubs</propert y> <property name="session_factory_name">hibernate</property> <mapping resource="com/aptech/jb/entity/User.hbm.xml" />
内存
姓名:张三 密码:123 性别:男
用JDBC完成数据在持久和瞬时状 态间的转换: … ***.execute ("… ") ...
持久化: 将程序数据在瞬时状态和持久状态 之间转换的机制
Dao
用JDBC 持久数据
DB
Hiberante应用程序的结构
(1)Application:应用 (2)Persistent Object:持久化对象 (3)hibernate.properties:Hibernate 属性文件/Hibernate配置文件 (4)XML Mapping:Hibernate映射文 件 (5)Database:数据库
tx = session.beginTransaction(); User user = this.testLoad(id); session.delete(user); mit();
使用Hibernate实现:
配置Hibernate关联自动加载区县对应的街道 配置Hibernate关联并实现:
1、增加一个公司:“CSTP” 2、增加CSTP下属的三个部门 3、删除“教学” 4、划“财务”到红旗渠 5、删除红旗渠
– 配置Hibernate多对多关联,实现某OA系统项 目和人员对照关系的管理
持久化层 关系型数据 (R)
TBL_User
小结
• 是一个主流的持久化框架
– 在JDBC基础上进行分装 – 只需要少量代码就可以完成持久化工作
• 是一个优秀的ORM(对象-关系映射)机制
– 通过映射文件保存映射信息 – 在业务层以面向对象的方式编程,不用考虑数据保存 形式
3个准备
1) 添加Hibernate库到项目
• 什么是ORM?
ORM(对象-关系映射): 完成对象数据到关系型数据映射 的机制称为对象-关系映射,简称 ORM。
映射信息
类: User 属性 name sex pw 表: TBL_User 字段 user_name user_sex user_pw
表现层 业务逻辑层
对象数据(O) User对象 name:张三 sex:男 pw:123
第一章 ORM 概述
目标: •理解ORM •熟悉Hibernate 的作用
软件分层的优点
1. 2. 3. 4. 5. 伸缩性 可维护性 可扩展性 可重用性 可管理性
Hibernate是一个优秀的持久化框架
什么是持久化?
瞬时状态: 保存在内存的程序数据,程序退出 后,数据就消失了,称为瞬时状态 持久状态: 保存在磁盘上的程序数据,程序退 出后依然存在,称为程序数据的持 久状态