j2ee架构与程序设计.ppt_第1页
j2ee架构与程序设计.ppt_第2页
j2ee架构与程序设计.ppt_第3页
j2ee架构与程序设计.ppt_第4页
j2ee架构与程序设计.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J2EE架构与程序设计,第三讲Hibernate,Hibernate简介,Hibernate是一个持久化框架,主要用于ORM(Object/Relational Mapping)映射。 问题: 什么是持久化框架 为什么要用ORM Hibernate与EJB是什么关系,开发Hibernate程序基本步骤,配置Hibernate:指定数据库连接,指定映射文件(默认名:hibernate.cfg.xml) 建立映射文件:告诉Hibernate那个实体类对应哪个表,哪个属性对应哪个字段 建立实体Bean 建立会话工厂:用对话工厂获得Hibernate Session对象是个好习惯,因为在程序中经常需要获得Session 使用Hibernate操作数据库,hibernate.cfg.xml, org.hibernate.dialect.MySQLDialect jdbc:mysql:/localhost/techsys root root com.mysql.jdbc.Driver ,Role.hbm.xml, 资料:generator详解,实例:修改书籍查询,对角色表(Role)的,增删改查 Chapter17/addrecord.jsp,持久化对象之间的关系,不同的session加载同一条数据形成的实体对象是不同的,反之是相同的。 Session session1=sessionFactory.openSession(); Session session2=sessionFactory.openSession(); User user1=(User)session1.get(User.class,id); User user2=(User)session1.get(User.class,id); User user3=(User)session2.get(User.class,id); if(user1=user2) If(user1=user3) If(user1.equals(user3),session相关操作,加载实体: session.get、session.load 刷新实体: session.refresh 判断是否有脏数据: session.isDirty(); 强制持久化: session.flush,复合主键,先把多个主键属性封装在一个类中 利用composite-id标签配置复合主键 ,使用,使用实例PKAction.java,组件映射,若Teacher和Student类中都有firstName和lastName属性,则可以用一个Name属性进行封装 Public class Name private String firstName;private String lastName Public class Teacher private Name name; private int courseID Public class Student private Name name; xml如下配置 ,基于注释的组件映射,Embedded AttributeOverrides( AttributeOveride(name=“firstName”,column=Column(name=“firstName”) AttributeOveride(name=“lastName”,column=Column(name=“lastName”) ),多对一单向关联关系,通常,对于数据库中的关联关系在Hibernate中我们通过组件的方式加以封装,以此达到统一存取的目的。,Name:实体Bean的属性名 Column:外键名 Class:关联类的名称 Cascade:该属性指定哪些操作时级联操作,上例中save-update表示在save或 update时候进行级联操作,基于注释的多对一关系,ManyToOne Cascade(value=(org.hibernate.annotations.CascadeType.SAVE_UPDATE) JoinColumn(name=“customer_id“),其它关联关系,一对多(one-to-many) 一对一(one-to-one),Hibernate查询,标准查询API(Criteria) HQL查询 SQL查询,HQL,Hql(Hibernate Query Language)是Hibernate框架提供的一种数据操作方式,其语法上非常接近SQL,不同的是HQL是面向对象的,使用HQL可直接返回相应的持久化对象。另外,Hibernate也可以将SQL查询出来的数据转换为持久化对象,注意:在HQL中实体Bean的名称和属性是区分大 小写的,但HQL中的关键字不区分大小写, 如from可以写成From,HQL的使用,String queryString = “from Mykeys as model where = :name”;/创建HQL语句 Query queryObject = getSession().createQuery(queryString);/创建查询对象 queryObject.setParameter(“name”, value);/设置参数 queryObject.list();/执行查询 注意错误:Exception in thread “main“ java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I,HQL查询,不使用select:返回实体Bean对象列表 from orders 返回orders对象列表 使用select:返回某个属性的值列表 select number from orders 则返回的orders中为String类型的列表,针对同名实体的查询,在查询时可以使用包指定查询的类 select chapter17.entity.mymessage m,HQL分页,利用Query的setFirstResult和setMaxResults方法进行分页 例: Session session=HibernateSessionFactory.getSession(); Query q=session.createQuery(“from Orders“); q.setFirstResult(1);/从第2条记录开始 q.setMaxResults(2);/每页取2条 List list=q.list();,查询缓存,若使用Hibernate缓存查询则Hibernate在执行时会先在缓存中找寻先前执行过的的同样的HQL的查询结果,若找到则直接从缓存中取数据,从而达到快速查询的目的,使用缓存,一、在配置文件中打开缓存并指定缓存类 true org.hibernate.cache.HashtableCacheProvider 二、执行Query对象的setCacheable方法进行缓存查询,命名查询,可以把HQL语句写到xml中,在程序中加以引用(P638) 第一步: 第二步:把上述xml配置到hibernate.cfg.xml中,MyEclipse支持,所有的实体及配置可以通过MyEclipse反向工程生成,使用注释(Annotations)配置Hibernate,安装Hibernate注释 MyEclipse6.5以上版本带有注释包 hibernate-annotations.jar hibernate-commons-annotations.jar ejb3-persistence.jar,Entity注释,将一个JavaBean标识成实体Bean,用Entity注释的Bean必须满足以下条件: 必须有一个无参数的构造方法 实体Bean必须声明为public 实体Bean不能被声明为abstract,Table注释,指明实体Bean对应的表信息 属性name:表名称(默认类名) 属性catalog:数据库名称 Entity Table(name=“t_user”,catalog=“mydb”) Public class User ,id注释,配置主键,可以是一个属性也可以是多个属性的组合。 主键可以应用于属性页可以应用于get方法,应用于属性时,改属性的get方法不会被Hibernate调用,可以去掉,GeneratedValue注释,可指定主键访问策略 GeneratedValue(strategy=javax.persistence.GenerationType.IDENTITY) javax.persistence.GenerationType.AUTO:自动确定主键类型 javax.persistence.GenerationType.IDENTITY:由数据库确定下个主键值 javax.persistence.GenerationType.SEQUENCE:主键是SEQUENCE类型字段,使用GenericGenerator注释产生主键值,该类可以使用Hibernate内置的各种主键生成策略来生成主键值 Id org.hibernate.annotations.GenericGenerator(name=“hibernate-uuid”,strategy=“uuid”) Ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论