跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc

上传人:数据九部 文档编号:10363436 上传时间:2021-05-12 格式:DOC 页数:18 大小:512KB
返回 下载 相关 举报
跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc_第1页
第1页 / 共18页
跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc_第2页
第2页 / 共18页
跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc_第3页
第3页 / 共18页
跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc_第4页
第4页 / 共18页
跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc》由会员分享,可在线阅读,更多相关《跟我学Hibernate框架技术——在容器外实现“一对一”的关联(第1部分).doc(18页珍藏版)》请在三一文库上搜索。

1、杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料目 录1.1在容器外实现“一对一”的关联(第1部分)21.1.1对“一对一”的关联关系的分析21.1.2在容器外实现“一对一”的关联31.1.3映射前面所设计的EBook数据库表-声明它的映射元数据71.1.4测试该DAO组件的应用效果151.1 在容器外实现“一对一”的关联(第1部分)1.1.1 对“一对一”的关联关系的分析1、什么是“一对一”关联关系EBook是由某个出版社所出版,即EBook与Publish之间为“一对一”的关系。其中的EBook类为主控方,而Publish类为被动方。One to onePublishEBook2、

2、采用什么技术实现手段来解决“一对一”关联关系为什么可以应用“主键关联”?首先要了解对应的数据库表的结构,观察数据库表结构是否满足“主键关联”的数据库要求。上面的两个数据库表没有采用主外键设计方案,同时再观察两个数据库表中的主键的值是否一致性。因此,可以应用“主键关联”的技术实现方案。1.1.2 在容器外实现“一对一”的关联1、在项目中保证有hibernate.cfg.xml文件2、在项目中保证有log4j.properties属性文件3、在项目中添加一个EBook的PO类(1)本例中的实体类EBook代码,类名称为EBook,包名称为com.px1987.sshwebcrm.dao.pobje

3、ct添加各个属性以及对应的get/set方法private Integer ebook_id; private String ebookName; private char ebookKind; private float ebookPrice;最后的代码如下在该Java类中包含每个变量的getter和setter函数以及辅助函数equals等,请见下面的代码。package com.px1987.sshwebcrm.dao.pobject;本例将ebook_id 属性的类型设置为Integerpublic class EBook private Integer ebook_id; Overr

4、idepublic int hashCode() final int prime = 31;int result = 1;result = prime * result + ebookKind;result = prime * result+ (ebookName = null) ? 0 : ebookName.hashCode();result = prime * result + Float.floatToIntBits(ebookPrice);result = prime * result+ (ebook_id = null) ? 0 : ebook_id.hashCode();retu

5、rn result;注意实现equals()方法的应用的场合Overridepublic boolean equals(Object obj) if (this = obj)return true;if (obj = null)return false;if (getClass() != obj.getClass()return false;EBook other = (EBook) obj;if (ebookKind != other.ebookKind)return false;if (ebookName = null) if (other.ebookName != null)return

6、 false; else if (!ebookName.equals(other.ebookName)return false;if (Float.floatToIntBits(ebookPrice) != Float.floatToIntBits(other.ebookPrice)return false;if (ebook_id = null) if (other.ebook_id != null)return false; else if (!ebook_id.equals(other.ebook_id)return false;return true;public Integer ge

7、tEbook_id() return ebook_id;public void setEbook_id(Integer ebook_id) this.ebook_id = ebook_id;public String getEbookName() return ebookName;public void setEbookName(String ebookName) this.ebookName = ebookName;public char getEbookKind() return ebookKind;public void setEbookKind(char ebookKind) this

8、.ebookKind = ebookKind;public float getEbookPrice() return ebookPrice;public void setEbookPrice(float ebookPrice) this.ebookPrice = ebookPrice;private String ebookName; private char ebookKind; private float ebookPrice;public EBook() 1.1.3 映射前面所设计的EBook数据库表-声明它的映射元数据对象和关系数据库之间的映射通常是用一个XML文档(XML docum

9、ent)来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义。1、在src的目录下新建一个EBook.hbm.xml映射文件2、设计其内容下面为EBook.hbm.xml映射文件的内容 在xml?映射文件中,写类的名字时一定要用类的全名(包+类名) !- - Hibernate缺省使用属性名作为字段(column)名 3、在hibernate.cfg.xml文件中添加对EBook.hbm.xml的引用定义4、为应用系统提供一个ThreadLocal形式的Session 管理方案新增一个HibernateU

10、til类5、为该应用提供一个DAO接口和对应的实现类(1)添加一个DAO的接口 WebHibernateDAOInterface,包名称为com.px1987.sshwebcrm.dao.interpackage com.px1987.sshwebcrm.dao.inter;import java.util.ArrayList;import org.hibernate.HibernateException;public interface WebHibernateDAOInterface public ArrayList doSelectEBookDataFromDB(String selec

11、tHQL) throws HibernateException; public boolean doInsertEBookDataToDB()throws HibernateException,java.io.UnsupportedEncodingException;6、为上面的DAO的接口提供一个实现类WebHibernateDAOBean,包名称为com.px1987.sshwebcrm.dao.imple代码如下:package com.px1987.sshwebcrm.dao.imple;import java.io.UnsupportedEncodingException;impor

12、t java.util.ArrayList;import java.util.List;import mons.logging.Log;import mons.logging.LogFactory;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.Transaction;import com.px1987.sshwebcrm.dao.inter.WebHibernateDAOInterface;import com.px1987.sshwebcrm.dao.pobj

13、ect.EBook;import com.px1987.sshwebcrm.dao.util.HibernateUtil;public class WebHibernateDAOBean implements WebHibernateDAOInterface private static Log log = LogFactory.getLog(HibernateDAOBean.class);public WebHibernateDAOBean() public boolean doInsertEBookDataToDB() throws HibernateException,Unsupport

14、edEncodingException Session session=null;Transaction tx=null;trysession = HibernateUtil.currentSession();/*下面的代码相当于我们执行了以下SQL语句insert into EBook (ebook_id,ebookName,ebookKind,ebookPricfe) values (1, J2EE应用开发,1,7.4f) */tx= session.beginTransaction();EBook oneEBook = new EBook();/*对某些数据库系统如MSSQLServer

15、2000必须进行字符的编码转换,否则会出现中文乱码。而对于JDTS驱动则不需要进行编码转换oneEBook.setEbookName(J2EE应用开发);*/oneEBook.setEbookName(J2EE应用开发);oneEBook.setEbookKind(1);oneEBook.setEbookPrice(7.4f);session.save(oneEBook); /保存该实体mit(); catch(HibernateException he) if ( tx!=null ) tx.rollback(); log.error(在doInsertEBookDataToDB方法中出现了

16、HibernateException错误, he); throw he; finally/*这样我们就可以随心所欲的多次调用HibernateUtil.currentSession();,我们每次都会得到同一个当前线程的Session。不管是在我们的servlet代码中,或者在servlet filter中还是在HTTP结果返回之前,我们都必须确保这个Session在你的数据库访问工作完成后关闭。*/ HibernateUtil.closeSession(); return true;public ArrayList doSelectEBookDataFromDB(String selectH

17、QL)throws HibernateException Session session=null;Transaction tx=null;ArrayList totalEBookList =new ArrayList();trysession = HibernateUtil.currentSession();tx= session.beginTransaction();List result = session.createQuery(selectHQL).list();for (int index = 0; index result.size(); index+) EBook oneEBo

18、ok = (EBook) result.get(index); totalEBookList.add(oneEBook);mit(); catch(HibernateException he) log.error(在doSelectEBookDataFromDB方法中出现了HibernateException错误, he); throw he; finally HibernateUtil.closeSession(); return totalEBookList;1.1.4 测试该DAO组件的应用效果1、新建一个测试项目TestJ2SEAppByHibernate2、在测试项目中引入被测试项目和添加JUnit系统库3、添加hibernate3.jar的系统库也可以采用项目内的系统库18杨教授工作室,版权所有,盗版必究, 18/18页

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1