版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、J2EE架构与程序设计架构与程序设计第三讲HibernateHibernate简介简介lHibernate是一个持久化框架,主要用于ORMObject/Relational Mapping映射。l问题:l什么是持久化框架l为什么要用ORMlHibernate与EJB是什么关系开发开发Hibernate程序基本步骤程序基本步骤l配置Hibernate:指定数据库连接,指定映射文件默认名:hibernate.cfg.xml)l建立映射文件:告诉Hibernate那个实体类对应哪个表,哪个属性对应哪个字段l建立实体Beanl建立会话工厂:用对话工厂获得Hibernate Session对象是个好习惯
2、,因为在程序中经常需要获得Sessionl使用Hibernate操作数据库hibernate.cfg.xmlllllorg.hibernate.dialect.MySQLDialectllljdbc:mysqllocalhost/techsysllrootlrootllcom.mysql.jdbc.DriverlllllRole.hbm.xmlll l l l l l l l l ll资料:generator详解实例:修改书籍查询实例:修改书籍查询l对角色表(Role)的,增删改查lChapter17/addrecord.jsp持久化对象之间的关系持久化对象之间的关系l不同的session加载
3、同一条数据形成的实体对象是不同的,反之是相同的。lSession session1=sessionFactory.openSession();lSession session2=sessionFactory.openSession();lUser user1=(User)session1.get(User.class,id);lUser user2=(User)session1.get(User.class,id);lUser user3=(User)session2.get(User.class,id);l if(user1=user2)lIf(user1=user3)lIf(user1.e
4、quals(user3)session相关操作相关操作l加载实体:lsession.get、session.loadl刷新实体:lsession.refreshl判断是否有脏数据:session.isDirty();l强制持久化:lsession.flush复合主键复合主键l先把多个主键属性封装在一个类中l利用composite-id标签配置复合主键l l l l l l l l 运用运用l使用实例PKAction.java组件映射组件映射l若Teacher和Student类中都有firstName和lastName属性,则可以用一个Name属性进行封装lPublic class Namel
5、private String firstName;private String lastNamellPublic class Teacherl private Name name;l private int courseIDllPublic class Studentl private Name name;l llxml如下配置ll l l基于注释的组件映射基于注释的组件映射lEmbeddedlAttributeOverrides(l AttributeOveride(name=“firstName”,column=Column(name=“firstName”)lAttributeOveri
6、de(name=“lastName”,column=Column(name=“lastName”)l)多对一单向关联关系多对一单向关联关系l通常,对于数据库中的关联关系在Hibernate中我们通过组件的方式加以封装,以此达到统一存取的目的。 Name:实体Bean的属性名Column:外键名Class:关联类的名称Cascade:该属性指定哪些操作时级联操作,上例中save-update表示在save或update时候进行级联操作基于注释的多对一关系基于注释的多对一关系l ManyToOnel Cascade(value=(org.hibernate.annotations.CascadeT
7、ype.SAVE_UPDATE)l JoinColumn(name=customer_id)其它关联关系其它关联关系l一对多one-to-many)l一对一(one-to-one)Hibernate查询查询l标准查询APICriteria)lHQL查询lSQL查询HQLlHql(Hibernate Query Language)是Hibernate框架提供的一种数据操作方式,其语法上非常接近SQL,不同的是HQL是面向对象的,使用HQL可直接返回相应的持久化对象。另外,Hibernate也可以将SQL查询出来的数据转换为持久化对象留意:在留意:在HQL中实体中实体Bean的名称和属性是区分大的
8、名称和属性是区分大小写的,但小写的,但HQL中的关键字不区分大小写,中的关键字不区分大小写,如如from可以写成可以写成FromHQL的使用的使用l String queryString = “from Mykeys as model where = :name”;/创建HQL语句lQuery queryObject = getSession().createQuery(queryString);/创建查询对象l queryObject.setParameter(“name”, value);/设置参数lqueryObject.list();/执行查询l注意错误:Excep
9、tion in thread main java.lang.NoSuchMethodError: antlr.collections.AST.getLine()IHQL查询查询l不使用select:返回实体Bean对象列表l from orders 返回orders对象列表l使用select:返回某个属性的值列表l select number from orders 则返回的orders中为String类型的列表针对同名实体的查询针对同名实体的查询l在查询时可以使用包指定查询的类lselect chapter17.entity.mymessage mHQL分页分页l利用Query的setFir
10、stResult和setMaxResults方法进行分页l例:l Session session=HibernateSessionFactory.getSession();l Query q=session.createQuery(from Orders);l q.setFirstResult(1);/从第2条记录开始l q.setMaxResults(2);/每页取2条l List list=q.list();查询缓存查询缓存l若使用Hibernate缓存查询则Hibernate在执行时会先在缓存中找寻先前执行过的的同样的HQL的查询结果,若找到则直接从缓存中取数据,从而达到快速查询的目的使
11、用缓存使用缓存一、在配置文件中打开缓存并指定缓存类trueorg.hibernate.cache.HashtableCacheProvider二、执行Query对象的setCacheable方法进行缓存查询命名查询命名查询l可以把HQL语句写到xml中,在程序中加以引用P638)l第一步:llll l !CDATAfrom Order where idl ll 第二步:把上述xml配置到hibernate.cfg.xml中MyEclipse支持支持l所有的实体及配置可以通过MyEclipse反向工程生成使用注释使用注释Annotations配置配置Hibernatel安装Hibernate注释
12、lMyEclipse6.5以上版本带有注释包l hibernate-annotations.jarl hibernate-commons-annotations.jarl ejb3-persistence.jarEntity注释注释l将一个JavaBean标识成实体Bean,用Entity注释的Bean必须满足以下条件:l必须有一个无参数的构造方法l实体Bean必须声明为publicl实体Bean不能被声明为abstractTable注释注释l指明实体Bean对应的表信息l属性name:表名称默认类名)l属性catalog:数据库名称lEntitylTable(name=“t_user”,ca
13、talog=“mydb”)lPublic class Userllid注释注释l配置主键,可以是一个属性也可以是多个属性的组合。l主键可以应用于属性页可以应用于get方法,应用于属性时,改属性的get方法不会被Hibernate调用,可以去掉GeneratedValue注释注释l可指定主键访问策略lGeneratedValue(strategy=javax.persistence.GenerationType.IDENTITY)ljavax.persistence.GenerationType.AUTO:自动确定主键类型ljavax.persistence.GenerationType.IDENTITY:由数据库确定下个主键值ljavax.persistence.GenerationType.SEQUENCE:主键是SEQUENCE类型字段使用使用GenericGenerator注释产生注释产生主键值主键值l该类可以使用Hibernate内置的各种主键生成策略来生成主键值lIdlorg.hibernate.annotations.GenericGenerator(name=“hibernate-uuid”,strategy=“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第二章向量概念及运算教案
- 《麦哨》教学设计
- 乡村道路片石挡土墙施工合同
- 企业内部评审员管理办法
- 人教版小学二年级语文下册全册教案
- 惠州市燃气租赁合同
- 建筑工程绿化协议
- 汽车用品店加油站施工合同
- 城市景观墙体租赁协议
- 橡胶性能计量器具规范
- 期中(1-4单元)(试题)-2024-2025学年六年级数学上册西师大版
- 无人机应用技术专业申报表
- 秋季宜宾东辰国际学校小升初超越杯数学试题(含参考答案)
- 老挝的建筑文化
- 临床营养评价
- 氮气二氧化碳辅助吞吐技术研究与应用
- 常用能源的碳排放因子
- 新产品开发管理程序(GPDP)-上汽变速器制造标准
- 学校周边环境综合治理排查表(共4页)
- 大一基础化学复习题
- 施工放样_(2)
评论
0/150
提交评论