Hibernate程序设计.ppt
《Hibernate程序设计.ppt》由会员分享,可在线阅读,更多相关《Hibernate程序设计.ppt(85页珍藏版)》请在三一办公上搜索。
1、Hibernate程序设计,第一讲Hibernate概述第二讲对象关系映射基础第三讲复杂实体映射第四讲关联映射第五讲Hibernate查询,Hibernate 程序设计,第一讲 Hibernate 概述,Hibernate概述,一个主流的持久化框架在JDBC基础上进行分装只需要少量代码就可以完成持久化工作一个优秀的ORM(对象-关系映射)机制通过映射文件保存映射信息在业务层以面向对象的方式编程,封装对数据库的访问细节.,应用程序中对象(O),姓名:mary性别:女年龄:20,ORM(对象-关系映射):完成对象数据到关系型数据映射的机制称为对象-关系映射,简称ORM。,持久化层,什么是ORM?,
2、数据库,关系型数据(R),优点:Productivity,Maintainability,Performance,Vendor independence,Hibernate 优势,开源成熟流行(约13 000 downloads/month)自定义APIJBoss用Hibernate3实现Entity Beans,下载及设置hibernate,第一个Hibernate案例,问题描述:利用Hibernate API对Customer数据表增加记录步骤:添加Hibernate库添加POJO对象类Customer在程序中实现对数据库的操作,jdbc:oracle:thin:localhost:152
3、1:oradbscotttiger,配置JDBC驱动,配置JDBC连库URL,用户名密码,指定数据库方言,cust_seq,实体类到表的映射,主键生成方式,属性到字段的映射,7个步骤:Configuration创建SessionFactory打开Session开始一个事务持久化操作 save/update/delete/find提交事务关闭Session,在程序中实现对数据库的操作,public class Test01 private static SessionFactory factory;static Configuration cfg=new Configuration();cfg.
4、configure();cfg.addClass(Customer.class);factory=cfg.buildSessionFactory();public static void main(String args)Test01 test=new Test01();test.testSave();/*用于演示session的save方法*/,public void testSave()Session session=factory.openSession();Customer c=new Customer();c.setName(peter);c.setBirthday(new Date
5、(0);Transaction tx=null;try tx=session.beginTransaction();System.out.println(c);/1 session.save(c);/2 System.out.println(c);/3 mit();catch(HibernateException ex)ex.printStackTrace();if(tx!=null)tx.rollback();finally session.close();,第二个Hibernate案例,利用Hibernate API对Customer数据表增加、修改、删除、查找记录,public void
6、 testDelete()Session session=factory.openSession();Transaction tx=null;try tx=session.beginTransaction();Customer c=(Customer)session.load(Customer.class,new Long(1);session.delete(c);mit();catch(HibernateException ex)ex.printStackTrace();if(tx!=null)tx.rollback();finally session.close();,public voi
7、d testUpdate()Session session=factory.openSession();Transaction tx=null;try tx=session.beginTransaction();Customer c=new Customer();c.setId(new Long(1);c.setName(chris);c.setBirthday(new Date(0);session.update(c);/1 System.out.println(c);/2 mit();catch(HibernateException ex)ex.printStackTrace();if(t
8、x!=null)tx.rollback();finally session.close();,Hibernate 程序设计,第二讲 Hibernate 映射基础,Hibernate基本配置,POJO对象:Customer.class应用程序:Test01.class,jdbc:oracle:thin:localhost:1521:oradbscotttiger,Hibernate配置文件,cust_seq,Hibernate基本数据类型,Hibernate主键生成方式,Hibernate主键生成方式,Hibernate 架构,实体对象(Persistent Object)持久化的对象Hiber
9、nate配置文件 配置数据库连接信息Hibernate映射文件 配置对象和关系表的映射信息,Hibernate核心API,Configuration对象负责管理数据库的配置信息Configuration对象通过加载配置文件(hibernate.cfg.xml)获取并管理这些信息,Configuration config=new Configuration();config.configure();File file=new File(“C:myhibernate.xml”);Configuration config=new Configuration().configure(file);,通过
10、classpath找配置文件,自定义配置文件的位置,Hibernate核心API,SessionFactory负责创建Session对象 SessionFactory 对象中保存当前的数据库配置信息和所有映射关系以及预定义的SQL语句 SessionFactory负责维护Hibernate的二级缓存SessionFactory对象采取了线程安全的设计方式,如何创建SessionFactory对象?,Configuration config=new Configuration().configure();SessionFactory factory=config.buildSessionFact
11、ory();,Hibernate核心API,Session对象的添加、更新、删除和查询Session的设计是非线程安全的 Session对象由SessionFactory对象创建,Configuration config=new Configuration().configure();SessionFactory factory=config.buildSessionFactory();Session session=factory.openSession();,Hibernate核心API,Transaction Hibernate本身没有事务管理功能,需要依赖JDBC或JTA的事务事务管理
12、功能 使用Hibernate进行操作时(增、删、改)必须显式的调用Transaction(默认:autoCommit=false),Transaction tx=session.beginTransaction();,持久化对象的生命周期,持久化对象的状态,Transient Objects:使用new 操作符初始化的对象的状态是瞬时的,如果没有任何跟数据库表相关联的行为,只要应用不再引用这些对象,它们的状态将会丢失,并由垃圾回收机制回收。Persist Objects:如果内存中的对象和数据库的记录有对应关系,即和session对象相关,则此对象处于Persistent状态,在当事务提交时它
13、们的状态和数据库进行同步Detached Objects:Session关闭之后,持久化对象就变为detached对象。表示这个对象不能再与数据库保持同步,它们不再受Hibernate管理。,Hibernate 程序设计,第三讲 Hibernate 高级映射,实体映射(1)联合主键,在数据表设计时使用两个列作为联合主键时,用Hibernate API来完成对象关系映射CREATE TABLE students(firstname varchar2(16)NOT NULL,lastname varchar2(16)NOT NULL,major varchar2(100),PRIMARY KEY(
14、firstname,lastname);,实体映射(1)联合主键,StudentsId.javapublic class StudentsId implements java.io.Serializable private String firstname;private String lastname;Students.java public class Students implements java.io.Serializable private StudentsId id;private String major;,实体映射(1)联合主键,实体映射(1)联合主键,Students st
15、udent=new Students();StudentsId pk=new StudentsId();pk.setFirstname(Michael);pk.setLastname(Scofield);student.setId(pk);student.setMajor(Building);Session session=HibernateSessionFactory.getSession();Transaction tx=session.beginTransaction();session.save(student);mit();HibernateSessionFactory.closeS
16、ession();案例:02_UnionKey,实体映射(2)组合关系映射,CREATE TABLE Person(id number primary key,name varchar2(20),address_city varchar2(50),address_street varchar2(50),address_zipcode char(6),mailing_city varchar(50),mailing_street varchar(50),mailing_zipcode varchar(6);有必要把其中的city,street,zipcode提取出来单独组成一个Address类,
17、将这个类作为Person对象的一个组成部分出现。,实体映射(2)组合关系映射,Address.javapublic class Address private String city;private String street;private String zipcode;Person.javapublic class Person implements java.io.Serializable/Fields private Long id;private String name;private Address address;private Address mailAddress;,实体映射
18、(2)组合关系映射,映射组合关系person_seq,实体映射(2)组合关系映射,Person person=new Person();person.setName(peter);Address address1=new Address(beijing,changan street,100080);Address address2=new Address(tianjin,weijin street,300300);person.setAddress(address1);person.setMailAddress(address2);Session session=HibernateSessio
19、nFactory.getSession();Transaction tx=session.beginTransaction();session.save(person);mit();HibernateSessionFactory.closeSession();案例:03_Component,实体映射(3)大对象类型映射,create table users(id number primary key,name varchar2(20),password varchar2(20),image blob,resume clob);,实体映射(3)大对象类型映射,.0,Oracle JDBC不允许使
20、用批处理方式进行操作,所以需要在Hibernate配置文件中,将hibernate.jdbc.batch_size设为0.,实体映射(3)大对象类型映射,Users.javapublic class Users implements java.io.Serializable/Fields private Long id;private String name;private String password;private Blob image;private Clob resume;,实体映射(3)大对象类型映射,users_seq,实体映射(3)大对象类型映射,Users user=new
21、Users();user.setName(Scofield);user.setPassword(1234);user.setResume(Hibernate.createClob();user.setImage(Hibernate.createBlob(new byte1);Session session=HibernateSessionFactory.getSession();Transaction tx=session.beginTransaction();session.save(user);session.flush();FileInputStream fileInputStream=
22、new FileInputStream(tomcat.gif);session.refresh(user,LockMode.UPGRADE);/SELECT FOR UPDATEuser.setResume(Hibernate.createClob(a lots of words);user.setImage(Hibernate.createBlob(fileInputStream);session.save(user);mit();fileInputStream.close();HibernateSessionFactory.closeSession();,Hibernate 程序设计,第四
23、讲 Hibernate 关联映射,关联映射(1)集合类映射,映射集合类关系:一本书,可能属于多个类别CREATE TABLE book(id number primary key,bookname varchar2(20)NOT NULL);CREATE TABLE topic(id number,topicname varchar2(20)NOT NULL);ALTER TABLE topic ADD PRIMARY KEY(id,topicname);ALTER TABLE topic ADD FOREIGN KEY(id)REFERENCES book(id);,关联映射(1)集合类映射
24、,Book.javapublic class Book implements java.io.Serializable private Long id;private String bookname;private Set topics=new HashSet(0);,关联映射(1)集合类映射,book_seq,关联映射(1)集合类映射,Session session=HibernateSessionFactory.getSession();Transaction tx=session.beginTransaction();Book book1=new Book();book1.setTopi
25、cs(new HashSet();book1.setBookname(hibernate);book1.addTopic(java);book1.addTopic(O-R Mapping);Book book2=new Book();book2.setTopics(new HashSet();book2.setBookname(struts);book2.addTopic(java);book2.addTopic(MVC);session.save(book1);session.save(book2);mit();HibernateSessionFactory.closeSession();,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate 程序设计
链接地址:https://www.31ppt.com/p-6507052.html