第六章 Hibernate 入门.

Slides:



Advertisements
Similar presentations
面向侧面的程序设计 方林博士 本文下载地址:
Advertisements

Chapter 3: SQL.
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
第14章 JDBC技术和数据库开发应用.
第3章 数据库建模实践指南 北师大珠海分校软件工程系 赵池龙.
基于SSH的web开发 AND 企业级WEB应用开发新技术
MVC Servlet与MVC设计模式.
J2EE Struts 和Spring 的区别.
Oracle WebLogic 数据库连接原理及案例探讨
Oracle数据库 Oracle 子程序.
Google App Engine Google 應用服務引擎.
第15章 Java数据库连接(JDBC) 15.1 创建数据源 15.2 JDBC-ODBC桥接器 15.3 顺序查询
在PHP和MYSQL中实现完美的中文显示
对象/关系映射—Hibernate
J2EE与中间件技术 ——Lab.
第十五章 Hibernate应用详解 Hibernate是一个基于Java的对象/关系数据库映 射工具,它将对象模型表示的数据映射到用SQL表 示的关系模型上去。Hibernate管理Java到数据库 的映射,还提供了数据查询和存取的方法,大幅 度减少开发者的数据持久化相关的编程任务。在.
外观模式.
JAVA 程式設計與資料結構 第十一章 JDBC.
JDBC 数据库系统与应用 2014年.
Hadoop I/O By ShiChaojie.
JAVA vs. SQL Server 建國科技大學 資管系 饒瑞佶 2013/4 V1.
胡鹏 王慧锋 TEL: 数据库系统原理课程设计 实验环节1 胡鹏 王慧锋 TEL:
第9讲 Hibernate查询语言HQL.
持久层设计技术(一) Hibernate(1) 快速入门
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
第二讲 搭建Java Web开发环境 主讲人:孙娜
An Introduce to NHibernate
Druid数据库连接池的特点 稳定 高效率 可扩展 可监控 可动态配置 防SQL注入. 温绍锦(温高铁)
第10章 面向对象分析设计与对象模型 面向对象方法中,从分析到设计不像传统方法那样有明显的方法、工具的转换,而是平滑(无缝)过渡。分析设计过程具有良好的可跟踪、可修改和可扩展性。 面向对象设计是面向对象分析到实现的一个桥梁。面向对象分析是将用户需求经过分析后,建立问题域精确模型的过程,而面向对象设计则是根据面向对象分析得到的需求模型,建立求解域模型的过程。
Java语言程序设计 第五部分 Java异常处理.
SVN服务器的搭建(Windows) 柳峰
SQL Injection.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
走进编程 程序的顺序结构(二).
辅导课程六.
第六单元 ADO.net数据库操作 劳动和社会保障部全国计算机信息高新技术考试指定教材——ASP.NET.
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第17章 网站发布.
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
数据挖掘工具性能比较.
PaPaPa项目架构 By:Listen 我在这.
Windows 7 的系统设置.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第十三章 JDBC  JDBC简介  JDBC驱动类型  JDBC API  JDBC的发展.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
$9 泛型基础.
SQL 范引娣.
Hibernate原理与应用 讲师:李勇 北京传智播客教育
商业分析平台-语义元数据 用友集团技术中心 边传猛 2013年 11月 06日.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
实验七 安全FTP服务器实验 2019/4/28.
Web安全基础教程
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
Visual Basic程序设计 第13章 访问数据库
Delphi 7.0开发示例.
第二章 Java基本语法 讲师:复凡.
Python 环境搭建 基于Anaconda和VSCode.
基于列存储的RDF数据管理 朱敏
VB与Access数据库的连接.
第2章 Java语言基础.
WEB程序设计技术 数据库操作.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
JUDDI安装手册.
Presentation transcript:

第六章 Hibernate 入门

本门课程目标 学完本门课程后,你能够: 使用Hibernate实现数据持久化 在项目中熟练使用Hibernate 掌握HQL查询 掌握Criteria查询

相关课程回顾 JDBC实现数据库访问的步骤 通过JDBC 提供的API 对数据库进行增、删、改、查的操作 通过JDBC 对数据库操作中异常的处理

本章任务 编写Hibernate的配置文件 使用Hibernate实现用户的登录和注册 使用Hibernate完成数据增删改操作

本章目标 理解持久化的概念 理解ORM的概念 了解Hibernate的基本原理 学会编写实体映射文件 学会使用Hibernate完成数据增删改操作 学会在项目中使用Hibernate

使用Statement对象对数据库进行操作 关闭Connection 对象和Statement 对象 List users = new ArrayList(); User user ; try { Connection conn = DBUtil.getConnection(); Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery("select * from users "); while(resultSet.next()){ user = new User(); user.setId(resultSet.getInt(1)); //省略其他赋值方法 ... users.add(User); } statement.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); JDBC操作数据库的步骤 获得数据库连接 通过Class.forName 注册驱动,通过DriverManager.getConnection 获得数据库连接 通过获得的Connection 对象生成Statement 对象 使用Statement 对象对数据库进行增、删、改、查的操作 关闭Connection 对象和Statement 对象 在整个操作过程中,需要对SQLException 进行捕获和处理 创建Statement对象 使用Statement对象对数据库进行操作 关闭Connection 对象和Statement 对象 处理异常

能否使用对象将POJO作为参数,简单的完成增删改查操作? JDBC的缺点 开发效率低 代码冗余 pstmt的setXX方法 方法参数冗余的getXX方法 如果POJO的属性很多,代码增加 重复性工作多 能否使用对象将POJO作为参数,简单的完成增删改查操作?

Hibernate简介 Hibernate作者——Gavin King Hibernate创始人 《 Hibernate in action 》作者 EJB 3.0的Entity bean specification的实际领导人(sun任命的领导人是Linda DeMichiel) 参加了XDoclet和Middlegen的开发 2003年9月加入JBoss,全职进行Hibernate开发 Hibernate 一个开发源代码的对象关系映射框架 对JDBC进行了非常轻量级的对象封装 将JavaBean对象和数据库的表建立对应关系

Hibernate优势 Hibernate 是一个优秀的Java 持久化层解决方案 是当今主流的对象—关系映射工具 Hibernate 简化了JDBC 繁琐的编码 Hibernate 将数据库的连接信息都存放在配置文件中 Session session = HiberanteUtil.getSession(); Query query = session.createQuery("from User"); List<User> users =(List<User>)query.list();

Hibernate配置文件 hibernate.cfg.xml文件 映射文件的配置(*.hbm.xml) <hibernate-mapping> <class name="cn.iss.bean.User" table="users" schema="jbit"> <id name="id" type="java.lang.Long"> <column name="id" /> <generator class="native" /> </id> <property name="password" type="java.lang.String" lazy="false"> <column name="password" length="50" not-null="true" /> </property> <property name="telephone" type="java.lang.String" lazy="false"> <column name="telephone" length="12" /> <property name="username" type="java.lang.String" lazy="false"> <column name="username" length="50" /> </class> </hibernate-mapping> User.hbm.xml文件 hibernate.cfg.xml文件 映射文件的配置(*.hbm.xml) hibernate.cfg.xml文件 <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <property name="connection.url"> jdbc:oracle:thin:@10.0.0.188:1521:ORCL <property name="connection.username">jbit</property> <property name="connection.password">bdqn</property> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver 使用的不同数据库类型 数据库URL 数据库用户名 数据库密码 数据库驱动

持久化与ORM3-1 持久化 将程序中数据在瞬时状态和持久状态间转换的机制

持久化与ORM3-2 持久化层 JDBC 就是一种持久化机制 将程序数据直接保存成文本文件也是持久化机制的一种实现 在分层结构中,DAO 层(数据访问层)也被称为持久化层 持久化完成的操作 将对象保存到关系型数据库中 将关系型数据库中的数据读取出来 以对象的形式封装

持久化与ORM3-3 ORM(Object Relational Mapping,对象关系映射) 编写程序的时候,以面向对象的方式处理数据 保存数据的时候,却以关系型数据库的方式存储 ORM解决方案包含下面四个部分 在持久化对象上执行基本增、删、改、查操作的API 用于对持久化对象或属性查询的一种语言或者API 用于实体关系映射的工具 能够与事务对象交互、执行检查、延迟加载以及其他优化功能

准备Hibernate3-1 下载需要的jar包 下载Hibernate Hibernate包目录结构 部署jar包 Hibernate 的官方主页是www.hibernate.org 推荐下载hibernate-distribution-3.3.2.GA-dist.zip Hibernate包目录结构 部署jar包 hibernate3.jar required 目录下的jar 包 Oracle 数据库驱动jar包

准备Hibernate3-2 创建Hibernate配置文件 用于配置数据库连接 运行时所需的各种属性 默认文件名为“hibernate.cfg.xml” <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <property name="connection.url"> jdbc:oracle:thin:@10.0.0.188:1521:ORCL <property name="connection.username">iss</property> <property name="connection.password">isoftstone</property> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver

准备Hibernate3-3 创建实体类和实体映射文件 <hibernate-mapping> <class name="cn.iss.houserent.bean.User" table="users"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="sequence" > <param name="sequence">SEQ_ID</param> </generator> </id> <property name="name" type="java.lang.String"> <column name="name" length="50" not-null="true" /> </property> <property name="password" type="java.lang.String"> <column name="password" length="50" not-null="true" /> <!--省略其他配置--> </class> </hibernate-mapping> 创建实体类和实体映射文件 定义实体类(也称持久化类),实现java.io.Serializable 接口,添加默认构造方法 配置映射文件(*.hbm.xml) 向hibernate.cfg.xml文件中配置映射文件 public class User implements java.io.Serializable { //字段 private Integer id; private String name; private String password; private String telephone; private String username; private String isadmin; public User(){ } //省略getter&setter 方法 <session-factory> <!--省略其他配置--> <!--注意配置文件名必须包含其相对于classpath 的全路径--> <mapping resource="cn/iss/houserent/entity/User.hbm.xml" /> </session-factory> class元素:定义一个实体类的映射信息。 常用属性如下。 name表示对象实体类的全限定名。 table表示对应的数据库表名。 id元素:定义该属性到数据库表主键字段的映射。 name表示实体类属性的名字。 type表示实体类属性的类型。 column 表示数据库表字段的名字,也可在子元素column中指定。 generator 元素:id元素的子元素用于指定主键的生成策略。 常用属性及子元素如下。 class用来指定具体主键生成策略。 param元素用来传递参数。 常用主键的生成策略如下 increment:对类型为long、short 或int 的主键,以自动增长的方式生成主键的值。主键按数值顺序递增,增量为1。 identity:对如SQL Server、DB2、MySQL等支持标识列的数据库,可使用该主键生成策略生成自动增长主键,但要在数据库中将该主键设置为标识列。 sequence:对如Oracle、DB2等支持序列的数据库,可使用该主键生成策略生成自动增长主键,通过子元素param传入数据库中序列的名称。 native:由Hibernate 根据底层数据库自行判断采用何种主键生成策略,意思是由使用的数据库生成主键的值。 assigned:主键由应用程序负责生成,无需Hibernate参与。 property 元素:定义实体类中属性和数据库中表的字段的对应关系。 column 元素:用于指定其父元素代表的实体类属性所对应的数据库表中的字段。 name表示字段的名字。 length表示字段长度。 not-null设定是否可以为null,值为true 表示不能为null。

共性问题集中讲解 共性问题集中讲解 常见调试问题及解决办法 代码规范问题

使用Hibernate 操作数据库 使用Hibernate操作数据库需要七个步骤 (1)读取并解析配置文件 (2)读取并解析映射信息,创建SessionFactory (3)打开Session (4)开始一个事务(增删改操作必须,查询操作可选) Configuration conf = newConfiguration().configure(); SessionFactory sf = conf.buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction();

演示示例:使用Hibernate 操作数据库的步骤 (5)数据库操作 (6)提交事务(回滚事务) (7)关闭session session.save(user);//或其它操作 tx.commit();(tx.rollback();) session.close(); 如果Hibernate 配置文件中,current_session_context_class 参数设置为thread 并采用SessionFactory 的getCurrentSession()方法获的Session 实例则不需要此步 演示示例:使用Hibernate 操作数据库的步骤

使用Hibernate实现增加用户 Configuration conf = null; SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { conf = new Configuration().configure(); sessionFactory = conf.buildSessionFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); session.save(user); tx.commit(); } catch (HibernateException e) { tx.rollback(); e.printStackTrace(); } finally{ session.close(); sessionFactory.close(); } 1.读取配置文件 2.创建SessionFactory 3.打开session 4.开始一个事务 5.持久化操作 6.提交事务 6.回滚事务 7.关闭session

使用Hibernate实现用户的修改、删除 Configuration conf = null; SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { conf = new Configuration().configure(); sessionFactory = conf.buildSessionFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); session.update(user); tx.commit(); } catch (HibernateException e) { tx.rollback(); e.printStackTrace(); } finally{ session.close(); sessionFactory.close(); } Configuration conf = null; SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { conf = new Configuration().configure(); sessionFactory = conf.buildSessionFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); session.delete(user); tx.commit(); } catch (HibernateException e) { tx.rollback(); e.printStackTrace(); } finally{ session.close(); sessionFactory.close(); } 删除用户 修改用户 删除用户信息 修改用户信息 增、删、改操作一定要在事务环境中完成 修改、删除数据时,需要先加载数据

共性问题集中讲解 共性问题集中讲解 常见调试问题及解决办法 代码规范问题

演示示例:使用Hibernate 查询数据 Configuration conf = null; SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { conf = new Configuration().configure(); sessionFactory = conf.buildSessionFactory(); session = sessionFactory.openSession(); session.load(User.class,1002); } catch (HibernateException e) { e.printStackTrace(); } finally{ session.close(); sessionFactory.close(); } Configuration conf = null; SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { conf = new Configuration().configure(); sessionFactory = conf.buildSessionFactory(); session = sessionFactory.openSession(); session.get(User.class,1001); } catch (HibernateException e) { e.printStackTrace(); } finally{ session.close(); sessionFactory.close(); } Session提供了两种方法加载数据 Object get(Class clazz, Serializable id):通过实体类Class对象和ID 加载数据 Object load(Class theClass, Serializable id):通过实体类Class对象和ID加载数据 两种方法加载数据的区别 使用get 方法加载数据时,如果数据不存在,返回null对象 使用load 方法加载数据时,如果数据不存在,系统就会抛出异常 使用load方式加载数据 使用get方式加载数据 演示示例:使用Hibernate 查询数据

Hibernate中实体对象的三种状态 实体对象的生命周期是Hibernate 应用中的一个关键概念 实体对象的三种状态 瞬时状态(Transient) 刚用new语句创建,还没有被持久化,且不处于Session的缓存中 持久状态(Persistent) 已经被持久化,且加入到Session的缓存中 游离状态(Detached) 已经被持久化,但不再处于Session的缓存中

共性问题集中讲解 共性问题集中讲解 常见调试问题及解决办法 代码规范问题

总结 JDBC的缺点? 为项目添加Hibernate的准备工作? Hibernate操作数据库的步骤? 实体对象的三种状态?