轻松学Java Web开发之Hibernate框架入门
- 格式:pptx
- 大小:763.99 KB
- 文档页数:24
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教程---看这⼀篇就够了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 数据存到数据库⾥⾯,数据库本⾝是⽂件系统,使⽤流⽅式操作⽂件效率不是很⾼。
目录1.1 跟我学Hibernate框架技术——Hibernate框架技术基础 (2)1.1.1 O/R Mapping工具----Hibernate技术基础 (2)1.1.2 Hibernate和JDBC在性能上的对比 (9)1.1.3 Hibernate系统介绍 (12)1.1.4 Hibernate系统的应用环境 (18)1.1.5 Hibernate为什么如此成功 (20)1.1跟我学Hibernate框架技术——Hibernate框架技术基础1.1.1O/R Mapping工具----Hibernate技术基础1、Hibernate基本概念(1)Hibernate技术本质上是一个提供数据库服务的中间件●Hibernate 是一个面向Java 环境的对象/ 关系数据库映射工具,把Java类对应到数据库的table中,并且采用了xml技术、Java Reflection技术等。
●Hibernate技术本质上也是遵守的ODMG标准的,它的出色源于不断的升级、不断的维护、修改。
以及完善的文档、人气很旺的论坛。
还有很重要的一点就是它的易学易用性。
●Hibernate它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。
可以大幅度减少开发时人工使用SQL 和JDBC 处理数据的时间。
(2)Hibernate是一个开放源代码的对象关系映射框架●以OO的方式来操纵数据库它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
●Hibernate可以应用在任何使用JDBC的场合Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
try{stmt=con.createStatement();rs=stmt.executeQuery("select * from student");metaData = rs.getMetaData();for(int column = 0; column < metaData.getColumnCount(); column++){System.out.print(metaData.getColumnName(column+1)+"\t");}while(rs.next()){for (int i = 1; i <= metaData.getColumnCount(); i++){System.out.print(rs.getObject(i)+"\t");}System.out.println("");}stmt.close(); //must closecon.close();}catch(SQLException e){}(3)主要的特点及与Entity EJB Bean的不同点Hibernate是JDBC的轻量级的对象封装它是一个独立的对象持久层框架,和应用服务器以及和EJB没有什么必然的联系。
目录1三期课程核心---项目主导 (3)1.1 软件生命周期 (3)1.2 程序/软件设计 (3)1.3 MVC设计模式 (5)1.4 业务逻辑层的介绍 (6)1.5 Hibernate核心介绍 (7)1.5.1 ORM 对象关系映射 (7)1.6 ORM (8)1.7 Hibernate简介和核心接口 (9)1.7.1 版本 (9)1.7.2 核心 (9)1.8 MyEclips中配置Hibernae (10)1.8.1 数据库浏览器介绍(DB Brower) (10)1.8.2 为项目引入Hibernate框架 (13)1.8.3 Hibernate反向工程 (18)1.9 Hibernate 单表操作 (21)⏹新接班核心思路整理✓ORM 思想的理解✓Hibernate应用于持久层的理解✓Hibernate核心接口✓MyEclipse配置Hibernate✓Hibernate单表操作Hibernate第一章,在于对ORM思想的理解,这也是难点! Hibernate核心方法<class name="org.zzy.bean.TblUser"table="TBL_USER" schema="ZZY"><id name="id"type="java.math.BigDecimal"><column name="ID"precision="22"scale="0"/><generator class="sequence"/></id><property name="uname"type="ng.String"> <column name="UNAME"length="50"/></property><property name="pwd"type="ng.String"><column name="PWD"length="50"/></property></class></session-factory><mapping resource="org/zzy/bean/TblUser.hbm.xml"/> <mapping resource="org/zzy/bean/TblLxr.hbm.xml"/> </session-factory>员工:多方--》一方的属性private Dept dept;<many-to-one name="dept" column="DEPTNO"class="cn.jbit.hibernatedemo.entity.Dept" />部门:一方配置多方的集合:private Set<Emp> emps = new HashSet<Emp>();<set name="emps"><key column="DEPTNO"></key><one-to-many class="cn.jbit.hibernatedemo.entity.Emp"/> </set>Cascade:none/delete/all/save-update<set>元素的inverse属性:关联方向1三期 课程核心---项目主导必须保证每个框架做一个项目实例1.1 软件生命周期一个完整的项目或软件的生命周期有具体如下: 软件的生命周期: 1. 可行性分析 2. 需求分析 3. 概要设计 4. 详细设计 5. 数据库设计 6. 程序设计 7. 编码8. 模块测试 9. 集成测试 10. 实施和维护程序人员而言我们重点关注的是“程序设计“1.2 程序/软件 设计软件设计中的核心是面向对象! 在整个软件设计中我们编码人员尤为关注的是“OOD 面向对象的设计“ 。
Hibernate部分1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的?为什么要使用①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
②.Hibernate 是一个基于JDBC的主流持久化框架,是一个优秀的ORM 实现。
他很大程度的简化DAO层的编码工作③.hibernate 的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
开发流程2.什么是延迟加载?延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。
在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
3.说一下hibernate的缓存机制A:hibernate一级缓存(1)hibernate支持两个级别的缓存,默认只支持一级缓存;(2)每个Session内部自带一个一级缓存;(3)某个Session被关闭时,其对应的一级缓存自动清除;B:hibernate二级缓存(1) 二级缓存独立于session,默认不开启;4.Hibernate的查询方式有哪些?本地SQL查询、Criteria、Hql5.如何优化Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰6.Hibernate中GET和LOAD的区别?请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。
如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。
Java框架Hibernate基础知识Hibernate是一款开源的Java ORM框架,它的基本功能是将Java 程序中的对象映射到数据库中的关系表,实现了Java对象和数据库表格之间的互相转换。
Hibernate的特点主要包括以下几个方面:1.高效的数据访问Hibernate使用缓存技术来提高数据库的访问效率,它可以通过缓存对象和结果来减少频繁的数据库查询,提高性能;同时,在数据库设计时,可以使用Hibernate内置的注解或XML文件映射数据表,大大减少了手动编写SQL语句的工作量。
2.简化的数据访问Hibernate可以把Java对象映射到和数据库表相似的对象,而不需要在编写复杂的SQL语句时独立处理每个Java属性;这使得Hibernate的使用更加简单,代码更加紧凑。
3.独立性Hibernate是一个独立的框架,不依赖于任何特定的技术或平台,可以与不同的数据库平台和不同的Java框架一起使用,为开发者提供了更大的灵活性。
以上是Hibernate的基本特点,接下来将介绍Hibernate的一些常见使用方法和技术。
1.Session管理在Hibernate中,Session是处理一级缓存的入口,也是与数据库交互的唯一途径。
Session可以通过SessionFactory来获取,而SessionFactory则可以通过Hibernate配置信息初始化。
2.映射文件在使用Hibernate时,需要将Java对象和数据库表之间建立映射关系。
Hibernate采用XML文件或注解方式来描述Java对象和数据库表之间的映射关系,其优点是抽象了数据库表的细节和差异,简化了代码开发。
3.HQL查询Hibernate中的HQL是Hibernate Query Language的缩写,是一种类似于SQL语法的查询语言,支持面向对象的查询和复杂查询。
使用HQL可以通过编写查询语句来获取所需的Java对象,而不需要手动创建数据库查询语句。
Hibernate 教程什么是 HibernateHibernate 是一种 Java 持久化框架,它提供了一种简单的方法来存储、检索和操作 Java 对象与关系数据库之间的数据。
Hibernate 是基于 Java Persistence API (JPA)标准的实现,是一个开放源代码的框架。
Hibernate 的优势1. 简化数据库操作Hibernate 提供了一个简单的面向对象的 API,让开发人员可以直接使用 Java 对象进行数据库操作,而无需编写复杂的SQL 语句。
通过 Hibernate,开发人员可以更专注于业务逻辑的实现,而不必关心底层的数据库细节。
2. 跨数据库的透明性Hibernate 提供了一种数据库无关的开发方式,它支持多种不同类型的数据库,如 MySQL、Oracle、PostgreSQL 等。
开发人员可以通过简单的配置,无缝切换不同的数据库,而不必修改代码。
3. 提高性能Hibernate 提供了一些缓存机制,可以有效地提高数据库访问性能。
通过缓存,Hibernate 可以减少对数据库的频繁访问,提高系统的响应速度。
4. 支持延迟加载Hibernate 具有延迟加载机制,它可以在需要使用对象时才从数据库中加载数据。
这种机制可以减少不必要的数据库访问,提高应用程序的性能。
Hibernate 的基本概念1. 实体类在 Hibernate 中,实体类是指映射到数据库表的 Java 类。
实体类包含了与数据库表中的字段对应的属性,以及与数据库表中的记录对应的对象。
2. 映射文件映射文件是用来描述实体类与数据库表之间的映射关系的配置文件。
通过映射文件,Hibernate 可以知道如何将实体类的属性映射到数据库表的字段,以及如何将数据库表的记录转换为实体类的对象。
3. 会话工厂在使用 Hibernate 之前,需要先创建一个会话工厂。
会话工厂负责创建会话对象,会话对象用于与数据库进行交互。