最经典的hibernate教程 从入门到精通 第一篇(共四篇)
- 格式:ppt
- 大小:346.50 KB
- 文档页数:16
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 数据存到数据库⾥⾯,数据库本⾝是⽂件系统,使⽤流⽅式操作⽂件效率不是很⾼。
简介: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教程前言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的好处简单来讲体现在以下几个方面: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。
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对象关系映射以及开发步骤一、对象关系映射(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入门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 入门一、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项目包中。