多对多的实体映射实现-课件PPT

上传人:每**** 文档编号:128682537 上传时间:2022-08-01 格式:PPT 页数:24 大小:513.50KB
返回 下载 相关 举报
多对多的实体映射实现-课件PPT_第1页
第1页 / 共24页
多对多的实体映射实现-课件PPT_第2页
第2页 / 共24页
多对多的实体映射实现-课件PPT_第3页
第3页 / 共24页
点击查看更多>>
资源描述
多对多的实体映射实现多对多的实体映射实现杨少波杨少波中科院计算所职业培训中心中科院计算所职业培训中心 多对多的实体映射实现多对多的实体映射实现在本讲您能了解如下知识点在本讲您能了解如下知识点q创建创建HibernateHibernate的配置文件。的配置文件。q创建持久化类。创建持久化类。q创建对象创建对象-关系映射文件。关系映射文件。q编程基于编程基于HibernateHibernate的的DAODAO组件组件q实现实现“多对多多对多”的关联映射的关联映射1 1、多对多关联的实现方案、多对多关联的实现方案(1 1)类似一对多情形中的最常用方案,为关联的双方增加)类似一对多情形中的最常用方案,为关联的双方增加到对方的外键到对方的外键 操作比较简单,缺点是会造成数据冗余;操作比较简单,缺点是会造成数据冗余;一、实现一、实现“多对多多对多”的关联映射的原理的关联映射的原理(2 2)新增一张包含关联双方主键的关联表)新增一张包含关联双方主键的关联表 在取数据时,需要链接该关联表和数据表,优点是没有在取数据时,需要链接该关联表和数据表,优点是没有数据冗余,缺点是带来了一定的时限复杂度。数据冗余,缺点是带来了一定的时限复杂度。2 2、注意的问题、注意的问题(1 1)“多对多多对多”由于使用了中间数据库表,在查询效率方面比由于使用了中间数据库表,在查询效率方面比较低较低(2 2)并且在对象模式上,)并且在对象模式上,“多对多多对多”会使得对象与对象之间彼会使得对象与对象之间彼此依赖,因此该种设计并不是一个良好的设计方式此依赖,因此该种设计并不是一个良好的设计方式(3 3)我们在系统的数据访问层的设计上应尽可能避免使用)我们在系统的数据访问层的设计上应尽可能避免使用“多多对多对多”关系。关系。3 3、多对多的关联也同样可以采用、多对多的关联也同样可以采用SetSet、ListList等多种方式的等多种方式的属性标签属性标签4 4、基于中间连接表的多对多关联的映射文件的示例、基于中间连接表的多对多关联的映射文件的示例 注意注意标签的定义标签的定义 中间连接表中间连接表1 1、设计本示例中所需要的数据库、设计本示例中所需要的数据库2 2、利用、利用HibernateHibernate连接数据库连接数据库(1 1)方式一:采用直接连接)方式一:采用直接连接(2 2)方式二:采用基于容器的)方式二:采用基于容器的JNDIJNDI数据源数据源 本例采用本例采用TomcatTomcat中所提供的中所提供的JNDIJNDI的数据库连接池的数据库连接池二、在二、在WebWeb应用中实现数据库访问应用中实现数据库访问4 4、将、将HibernateHibernate的的库文件放到库文件放到WebWeb应用的应用的/WEB-/WEB-INF/libINF/lib目录目录中中3 3、在、在TomcatTomcat的的server.xmlserver.xml文件进行配文件进行配置置5 5、配置、配置HibernateHibernate系统系统 本例的本例的XMLXML格式的格式的HibernateHibernate配置文件配置文件hibernate.cfg.xmlhibernate.cfg.xml文文件的内容如下件的内容如下6 6、配置、配置log4j.propertieslog4j.properties属性文件属性文件7 7、在、在WebWeb应用所在的目录中添加应用所在的目录中添加数据库的数据库的JDBCJDBC驱动程序的各个驱动程序的各个*.jar.jar包文件包文件8 8、编写、编写POJOPOJO类及其要求类及其要求(1 1)POJOPOJOp简单传统简单传统JavaJava对象(对象(POJO-Plain Old Java ObjectPOJO-Plain Old Java Object,有时候也称作有时候也称作Plain Ordinary Java ObjectsPlain Ordinary Java Objects)编程模型)编程模型pHibernateHibernate使用简单的使用简单的JavaJava对象来进行持久化。对象来进行持久化。(2 2)POJOPOJO类代码的风格要求类代码的风格要求p一个一个POJOPOJO很类似于很类似于JavaBeanJavaBean的代码风格的代码风格p并且它应该有一个没有参数的构造函数并且它应该有一个没有参数的构造函数(3 3)实体类中的标识属性)实体类中的标识属性 idp实体类中的实体类中的id id 属性(属性(propertyproperty)为一个实体类的实例提为一个实体类的实例提供标识属性(供标识属性(identifier propertyidentifier property)的值)的值p它是一个特殊的属性,代表了这个类的数据库标识符(主它是一个特殊的属性,代表了这个类的数据库标识符(主键)键)(4 4)本例中的实体类代码)本例中的实体类代码(5 5)实体类中的)实体类中的equalsequals方法方法如果我们有如下需求,则必须重载如果我们有如下需求,则必须重载 equals()equals()方法:方法:p想把持久类的实例放入想把持久类的实例放入SetSet中(当中(当表示多值关联时,推荐这么做)表示多值关联时,推荐这么做)p想重用脱管实例想重用脱管实例 p实现实现equals()equals()最显而易见的方法最显而易见的方法是比较两个对象标识符的值。如是比较两个对象标识符的值。如果值相同,则两个对象对应于数果值相同,则两个对象对应于数据库的同一行,因此它们是相等据库的同一行,因此它们是相等的(如果都被添加到的(如果都被添加到 SetSet,则在,则在SetSet中只有一个元素)。中只有一个元素)。9 9、映射前面所设计的、映射前面所设计的BookBook数据库表数据库表(1 1)映射文件的作用)映射文件的作用pHibernateHibernate需要知道怎样去加载(需要知道怎样去加载(loadload)和存储()和存储(storestore)我们的持久化类的对象。这里正是我们的持久化类的对象。这里正是HibernateHibernate映射文件映射文件(mapping filemapping file)发挥作用的地方)发挥作用的地方p映射文件告诉映射文件告诉HibernateHibernate它应该访问数据库里面的哪个表它应该访问数据库里面的哪个表(tabletable)和应该使用表里面的哪些字段()和应该使用表里面的哪些字段(columncolumn)。)。(2 2)命名规则:类名)命名规则:类名.hbm.xml.hbm.xml(3 3)本示例中的)本示例中的Book.hbm.xmlBook.hbm.xml映射文件的内容映射文件的内容 1010、编程基于、编程基于HibernateHibernate的的DAODAO组组件以进行数据的访件以进行数据的访问操作问操作1111、在某个、在某个WebWeb应应用中使用上面的用中使用上面的程序程序1212、执行该、执行该WebWeb应用应用(1 1)将在浏览器中看到下面的执行结果)将在浏览器中看到下面的执行结果(2 2)同时,在数据库表中将出现下面的记录)同时,在数据库表中将出现下面的记录三、实现本例中的三、实现本例中的“多对多多对多”实体之间的关联实体之间的关联1 1、在、在MS SQLServerMS SQLServer的本例的数据库中增加一个数据库表的本例的数据库中增加一个数据库表BookAuthorBookAuthor2 2、决定、决定BookAuthorBookAuthor和和BookBook之间的关系之间的关系3 3、新增一个、新增一个BookAuthorBookAuthor类类 并且在并且在BookAuthorBookAuthor类增加一组类增加一组BookBook,这样我们可以轻松的,这样我们可以轻松的通过调用通过调用aPerson.getBooks()aPerson.getBooks()得到一个得到一个BookAuthorBookAuthor所拥有的所拥有的BookBook列表,而不必执行一个显式的查询(一个单向的列表,而不必执行一个显式的查询(一个单向的Set-basedSet-based关联)。关联)。4 4、为该实体类创建一个、为该实体类创建一个BookAuthor.hbm.xmlBookAuthor.hbm.xml映射文件映射文件 6 6、在、在HibernateDAOBean.javaHibernateDAOBean.java中增加一个产生关联数据的中增加一个产生关联数据的方法方法5 5、在、在hibernate.cfg.xmlhibernate.cfg.xml配置文件中增加对配置文件中增加对该文件的定义该文件的定义7 7、在、在WebWeb应用的组件中添加下面的代码应用的组件中添加下面的代码 8 8、执行该组件、执行该组件9 9、在、在HibernateDAOBean.javaHibernateDAOBean.java中增加一个获得关联数据的中增加一个获得关联数据的方法方法1010、在、在WebWeb应应用的组件中添用的组件中添加下面的代码加下面的代码 1111、执行该、执行该WebWeb应用应用1212、在控制台上将出现下面的状态提示内容、在控制台上将出现下面的状态提示内容本讲内容。本讲内容。孔子说:孔子说:“学而不思则罔,思而不学则殆。学而不思则罔,思而不学则殆。”部分资料从网络收集整理而来,供大家参考,感谢您的关注!
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!