当前位置: 首页 > news >正文 如果快速做网站开发一个网站做爬虫 news 2025/11/2 16:43:18 如果快速做网站,开发一个网站做爬虫,帮做论文网站吗,国内精自视频品线一区前言 MyBatis是一个流行的Java持久化框架#xff0c;它提供了一种简单而强大的方式来映射Java对象和关系数据库之间的数据。在MyBatis中#xff0c;关系关联配置是一种用于定义对象之间关系的方式#xff0c;它允许我们在查询数据库时同时获取相关联的对象。 在MyBatis中它提供了一种简单而强大的方式来映射Java对象和关系数据库之间的数据。在MyBatis中关系关联配置是一种用于定义对象之间关系的方式它允许我们在查询数据库时同时获取相关联的对象。 在MyBatis中有三种主要的关系关联配置方式一对一One-to-One、一对多One-to-Many和多对多Many-to-Many。 一. Mybatis关系关联配置的优劣 1.1 MyBatis中的关系关联配置具有以下好处 简化数据查询通过关系关联配置可以在查询数据时自动加载相关联的数据无需手动编写复杂的SQL语句。这简化了数据查询的过程减少了开发人员的工作量。 提高代码可读性通过关系关联配置可以将数据表之间的关系直观地映射到Java对象中。这使得代码更易于理解和维护提高了代码的可读性。 减少数据库访问次数通过关系关联配置可以一次性加载多个相关联的数据减少了与数据库的交互次数。这可以提高系统的性能和响应速度。 支持对象导航通过关系关联配置可以在Java对象中直接访问相关联的数据而无需手动编写额外的查询语句。这简化了代码的编写提高了开发效率。 1.2 然而MyBatis中的关系关联配置也存在一些缺点 学习成本较高关系关联配置需要了解MyBatis的配置文件和相关标签的使用方法。对于初学者来说可能需要花费一些时间来学习和理解这些配置。 配置复杂性对于复杂的关系关联配置文件可能会变得复杂和冗长。这可能增加了维护和调试的难度。 性能问题如果关系关联配置不合理可能会导致数据加载过多或过少从而影响系统的性能。因此在配置关系关联时需要注意性能优化的问题。 二. 关联关系的方向 在MyBatis中关系关联的方向可以分为两种单向关联和双向关联。 单向关联 单向关联表示关系只在一个方向上存在其中一个表可以关联到另一个表但反过来不行。在单向关联中只有一个表的对象包含了关联对象的引用而关联对象本身不包含对关联表的引用。 例如假设我们有两个表User和Order一个用户可以有多个订单。在这种情况下我们可以在User对象中定义一个关联属性ListOrder orders表示一个用户关联多个订单。但是在Order对象中并不包含对用户的引用。 单向关联的配置在MyBatis中非常简单只需要在resultMap中使用collection或association标签来定义关联即可。 双向关联 双向关联表示关系在两个表之间是相互关联的每个表的对象都包含了对另一个表的引用。这样我们可以通过一个表的对象访问到关联表的对象也可以通过关联表的对象访问到原始表的对象。 以前面的例子为例我们可以在User对象中定义一个关联属性ListOrder orders表示一个用户关联多个订单。同时在Order对象中也定义一个关联属性User user表示一个订单关联一个用户。 双向关联的配置相对复杂一些需要在resultMap中使用collection或association标签来定义关联并在关联对象中使用association标签来定义反向关联。 需要注意的是无论是单向关联还是双向关联都需要在MyBatis的映射文件中进行配置。关联的方向取决于我们在配置时定义的关联属性和关联对象的引用。 总结来说MyBatis中的关系关联可以是单向关联或双向关联。单向关联表示关系只在一个方向上存在而双向关联表示关系在两个表之间是相互关联的。在配置关系关联时我们需要定义关联属性和关联对象的引用以确定关联的方向。 三. 一对一关联配置 一对一关联配置用于表示两个对象之间的一对一关系例如夫妻关系人与身份证。在数据库中这通常通过外键来实现。在MyBatis中我们可以使用association元素来配置一对一关联。该元素通常嵌套在resultMap元素中并使用property属性指定关联对象的属性名。 以订单表order和订单项表orderItem为例一个订单项对应一个订单。 编写一个vo类继承orderItem在映射文件中可以通过这个类拿到订单表和订单项表的每个属性 package com.xissl.vo;import com.xissl.model.HOrder; import com.xissl.model.HOrderItem;/*** author xissl* create 2023-09-04 9:52*/ public class OrderItemVo extends HOrderItem {private HOrder horder;public HOrder getHorder() {return horder;}public void setHorder(HOrder horder) {this.horder horder;} } 在映射文件中配置一对一关联HOrderItemMapper.xml resultMap idOrderItemVoMap typecom.xissl.vo.OrderItemVoresult columnorder_item_id propertyorderItemId/resultresult columnproduct_id propertyproductId/resultresult columnquantity propertyquantity/resultresult columnoid propertyoid/resultassociation propertyhorder javaTypecom.xissl.model.HOrderresult columnorder_id propertyorderId/resultresult columnorder_no propertyorderNo/result/association/resultMapselect idselectByOrderItemId resultMapOrderItemVoMap parameterTypejava.lang.Integerselect * from t_hibernate_order o,t_hibernate_order_item oi where o.order_idoi.oid and order_item_id #{orderItemId}/select 在上面的示例中我们首先定义了一个resultMap用于映射OrderItem对象和Order对象之间的关系。在resultMap中我们使用association元素来配置一对一关联。association元素中的property属性指定了在OrderItem对象中表示Order对象的属性名javaType属性指定了关联对象的类型。 然后我们定义了一个查询语句selectByOrderItemId使用resultMap来映射查询结果。 编写mapper层接口 OrderItemVo selectByOrderItemId(Param(orderItemId) Integer orderItemId); 业务逻辑层 package com.xissl.biz;import com.xissl.model.HOrderItem; import com.xissl.vo.OrderItemVo; import org.apache.ibatis.annotations.Param;public interface HOrderItemBiz {OrderItemVo selectByOrderItemId(Integer orderItemId); } 实现业务层接口 package com.xissl.biz.impl;import com.xissl.biz.HOrderItemBiz; import com.xissl.mapper.HOrderItemMapper; import com.xissl.vo.OrderItemVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;/*** author xissl* create 2023-09-04 9:59*/ Service public class HOrderItemBizImpl implements HOrderItemBiz {Autowiredprivate HOrderItemMapper hOrderItemMapper;Overridepublic OrderItemVo selectByOrderItemId(Integer orderItemId) {return hOrderItemMapper.selectByOrderItemId(orderItemId);} }测试代码及结果 package com.xissl.biz.impl;import com.xissl.biz.HOrderItemBiz; import com.xissl.vo.OrderItemVo; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import static org.junit.Assert.*;/*** author xissl* create 2023-09-04 10:01*/ RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations{classpath:spring-context.xml}) public class HOrderItemBizImplTest {Autowiredprivate HOrderItemBiz hOrderItemBiz;Testpublic void selectByOrderItemId() {OrderItemVo orderItemVo hOrderItemBiz.selectByOrderItemId(27);System.out.println(orderItemVo);System.out.println(orderItemVo.getHorder());} } 四. 一对多关联配置 一对多关联配置用于表示一个对象与多个相关对象之间的关系例如用户与用户的订单锁和钥匙。在数据库中这通常通过外键来实现。在MyBatis中我们可以使用collection元素来配置一对多关联。该元素通常嵌套在resultMap元素中并使用property属性指定关联对象的属性名。 以订单表order和订单项表orderItem为例一个订单可以有多个订单项。 编写一个vo类继承order在映射文件中可以通过这个类拿到订单表和订单项表的每个属性 package com.xissl.vo;import com.xissl.model.HOrder; import com.xissl.model.HOrderItem;import java.util.ArrayList; import java.util.List;/*** author xissl* create 2023-09-04 8:49*/ public class OrderVo extends HOrder {private ListHOrderItem orderItems new ArrayList();public ListHOrderItem getOrderItems() {return orderItems;}public void setOrderItems(ListHOrderItem orderItems) {this.orderItems orderItems;} }在映射文件中配置一对多关联HOrderMapper.xml resultMap idOrderVoMap typecom.xissl.vo.OrderVo result columnorder_id propertyorderId/resultresult columnorder_no propertyorderNo/resultcollection propertyorderItems ofTypecom.xissl.model.HOrderItemresult columnorder_item_id propertyorderItemId/resultresult columnproduct_id propertyproductId/resultresult columnquantity propertyquantity/resultresult columnoid propertyoid/result/collection/resultMapselect idselectByOid resultMapOrderVoMap parameterTypejava.lang.Integerselect * from t_hibernate_order o,t_hibernate_order_item oiwhere o.order_idoi.oid and order_id #{oid}/select 在上面的示例中我们首先定义了一个resultMap用于映射Order对象和OrderItem对象之间的关系。在resultMap中我们使用collection元素来配置一对多关联。collection元素中的property属性指定了在Order对象中表示订单项表的属性名ofType属性指定了关联对象的类型。 然后我们定义了一个查询语句selectByOid使用resultMap来映射查询结果。 编写mapper层接口 OrderVo selectByOid(Param(oid) Integer oid); 业务逻辑层 OrderVo selectByOid(Integer oid); 实现业务层接口 package com.xissl.biz.impl;import com.xissl.biz.HOrderBiz; import com.xissl.mapper.HOrderMapper; import com.xissl.vo.OrderVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;/*** author xissl* create 2023-09-04 9:08*/ Service public class HOrderBizImpl implements HOrderBiz {Autowiredprivate HOrderMapper hOrderMapper;Overridepublic OrderVo selectByOid(Integer oid) {return hOrderMapper.selectByOid(oid);} }测试代码及结果 package com.xissl.biz.impl;import com.xissl.biz.HOrderBiz; import com.xissl.vo.OrderVo; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import static org.junit.Assert.*;/*** author xissl* create 2023-09-04 9:10*/ RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations{classpath:spring-context.xml}) public class HOrderBizImplTest {Autowiredprivate HOrderBiz hOrderBiz;Testpublic void selectByOid() {OrderVo orderVo hOrderBiz.selectByOid(7);System.out.println(orderVo);orderVo.getOrderItems().forEach(System.out::println);} } 五. 多对多关联配置 多对多关联配置用于表示两个对象之间的多对多关系例如老师和学生。在数据库中这通常通过中间表来实现。在MyBatis中我们可以使用collection元素来配置多对多关联。该元素通常嵌套在resultMap元素中并使用property属性指定关联对象的属性名。 多对多关系就是和一对多的关系的大同小异只是多对多的关系可以看成两个一对多关系。 vo类 BookVo package com.xissl.vo;import com.xissl.model.HBook; import com.xissl.model.HCategory;import java.util.List;/*** author xissl* create 2023-09-04 10:43*/ public class HBookVo extends HBook {private ListHCategory categories;public ListHCategory getCategories() {return categories;}public void setCategories(ListHCategory categories) {this.categories categories;} }CategoryVo package com.xissl.vo;import com.xissl.model.HBook; import com.xissl.model.HCategory;import java.util.ArrayList; import java.util.List;/*** author xissl* create 2023-09-04 11:03*/ public class CategroyVo extends HCategory {private ListHBook hbooks new ArrayList();public ListHBook getHbooks() {return hbooks;}public void setHbooks(ListHBook hbooks) {this.hbooks hbooks;} } 映射文件 HBookMapper.xml resultMap idHBookVoMap typecom.xissl.vo.HBookVoresult columnbook_id propertybookId/resultresult columnbook_name propertybookName/resultresult columnprice propertyprice/resultcollection propertycategories ofTypecom.xissl.model.HCategoryresult columncategory_id propertycategoryId/resultresult columncategory_name propertycategoryName/result/collection/resultMap!-- 根据书籍id查询出书籍信息及所属类别--select idselectByBid resultMapHBookVoMap parameterTypejava.lang.Integerselect * from t_hibernate_book b, t_hibernate_book_category bc, t_hibernate_category c where b.book_id bc.bid and bc.cid c.category_id and b.book_id #{bid}/select HCategoryMapper.xml resultMap idCategoryVoMap typecom.xissl.vo.CategroyVoresult columncategory_id propertycategoryId/resultresult columncategory_name propertycategoryName/resultcollection propertyhbooks ofTypecom.xissl.model.HBookresult columnbook_id propertybookId/resultresult columnbook_name propertybookName/resultresult columnprice propertyprice/result/collection/resultMapselect idselectByCategroyId resultMapCategoryVoMap parameterTypejava.lang.Integerselect * from t_hibernate_book b, t_hibernate_book_category bc, t_hibernate_category c where b.book_id bc.bid and bc.cid c.category_id and c.category_id #{cid}/select mapper层接口 BookMapper HBookVo selectByBid(Param(bid) Integer bid); CategoryMapper HBookVo selectByBid(Param(bid) Integer bid); 业务逻辑层 HBookVo selectByBid(Integer bid); CategroyVo selectByCategroyId(Integer cid); 实现业务层 BookBiz package com.xissl.biz.impl;import com.xissl.biz.HBookBiz; import com.xissl.mapper.HBookMapper; import com.xissl.vo.HBookVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;/*** author xissl* create 2023-09-04 10:55*/ Service public class HBookBizImpl implements HBookBiz {Autowiredprivate HBookMapper hBookMapper;Overridepublic HBookVo selectByBid(Integer bid) {return hBookMapper.selectByBid(bid);} }实现CategoryBiz package com.xissl.biz.impl;import com.xissl.biz.HCategoryBiz; import com.xissl.mapper.HCategoryMapper; import com.xissl.vo.CategroyVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;/*** author xissl* create 2023-09-04 11:11*/ Service public class HCategoryBizImpl implements HCategoryBiz {Autowiredprivate HCategoryMapper hCategoryMapper;Overridepublic CategroyVo selectByCategroyId(Integer cid) {return hCategoryMapper.selectByCategroyId(cid);} }测试代码及结果 package com.xissl.biz.impl;import com.xissl.biz.HBookBiz; import com.xissl.vo.HBookVo; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import static org.junit.Assert.*;/*** author xissl* create 2023-09-04 10:56*/ RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations{classpath:spring-context.xml}) public class HBookBizImplTest {Autowiredprivate HBookBiz hBookBiz;Testpublic void selectByBid() {HBookVo hBookVo hBookBiz.selectByBid(8);System.out.println(hBookVo);hBookVo.getCategories().forEach(System.out::println);} } package com.xissl.biz.impl;import com.xissl.biz.HCategoryBiz; import com.xissl.vo.CategroyVo; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import static org.junit.Assert.*;/*** author xissl* create 2023-09-04 11:12*/ RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations{classpath:spring-context.xml}) public class HCategoryBizImplTest {Autowiredprivate HCategoryBiz hCategoryBiz;Testpublic void selectByCategroyId() {CategroyVo categroyVo hCategoryBiz.selectByCategroyId(8);System.out.println(categroyVo);categroyVo.getHbooks().forEach(System.out::println);} } 除了上述关系关联配置方式MyBatis还提供了其他一些配置选项如延迟加载Lazy Loading和级联操作Cascade。延迟加载允许我们在需要时才加载关联对象的数据而级联操作允许我们在操作主对象时同时操作关联对象。 总结起来MyBatis中的关系关联配置提供了一种灵活而强大的方式来处理对象之间的关系。通过合理配置关系关联我们可以轻松地进行复杂的数据库查询和操作。 文章转载自: http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.qjtbt.cn.gov.cn.qjtbt.cn http://www.morning.hjwkq.cn.gov.cn.hjwkq.cn http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn http://www.morning.nwcgj.cn.gov.cn.nwcgj.cn http://www.morning.bwjgb.cn.gov.cn.bwjgb.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.xirfr.cn.gov.cn.xirfr.cn http://www.morning.jqjnl.cn.gov.cn.jqjnl.cn http://www.morning.mfxcg.cn.gov.cn.mfxcg.cn http://www.morning.mfbcs.cn.gov.cn.mfbcs.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.lxwjx.cn.gov.cn.lxwjx.cn http://www.morning.dkbgg.cn.gov.cn.dkbgg.cn http://www.morning.mxmtt.cn.gov.cn.mxmtt.cn http://www.morning.pjqxk.cn.gov.cn.pjqxk.cn http://www.morning.bfsqz.cn.gov.cn.bfsqz.cn http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.yzktr.cn.gov.cn.yzktr.cn http://www.morning.zmnyj.cn.gov.cn.zmnyj.cn http://www.morning.qbfs.cn.gov.cn.qbfs.cn http://www.morning.pzjfz.cn.gov.cn.pzjfz.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.ccyns.cn.gov.cn.ccyns.cn http://www.morning.juju8.cn.gov.cn.juju8.cn http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.sxwfx.cn.gov.cn.sxwfx.cn http://www.morning.bzkgn.cn.gov.cn.bzkgn.cn http://www.morning.mlgsc.com.gov.cn.mlgsc.com http://www.morning.ctswj.cn.gov.cn.ctswj.cn http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn http://www.morning.mnlk.cn.gov.cn.mnlk.cn http://www.morning.kwcnf.cn.gov.cn.kwcnf.cn http://www.morning.npmpn.cn.gov.cn.npmpn.cn http://www.morning.kkysz.cn.gov.cn.kkysz.cn http://www.morning.mnclk.cn.gov.cn.mnclk.cn http://www.morning.ljjph.cn.gov.cn.ljjph.cn http://www.morning.jjxxm.cn.gov.cn.jjxxm.cn http://www.morning.bmzxp.cn.gov.cn.bmzxp.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn http://www.morning.pxrfm.cn.gov.cn.pxrfm.cn http://www.morning.ndyrb.com.gov.cn.ndyrb.com http://www.morning.bmssj.cn.gov.cn.bmssj.cn http://www.morning.tqwcm.cn.gov.cn.tqwcm.cn http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.fthqc.cn.gov.cn.fthqc.cn http://www.morning.wskn.cn.gov.cn.wskn.cn http://www.morning.fjntg.cn.gov.cn.fjntg.cn http://www.morning.pypqf.cn.gov.cn.pypqf.cn http://www.morning.fhtbk.cn.gov.cn.fhtbk.cn http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.rshkh.cn.gov.cn.rshkh.cn http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.skbkq.cn.gov.cn.skbkq.cn http://www.morning.sfzwm.cn.gov.cn.sfzwm.cn http://www.morning.zfyfy.cn.gov.cn.zfyfy.cn http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.pgjyc.cn.gov.cn.pgjyc.cn http://www.morning.jbfjp.cn.gov.cn.jbfjp.cn http://www.morning.wjplm.cn.gov.cn.wjplm.cn http://www.morning.nccqs.cn.gov.cn.nccqs.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.lwlnw.cn.gov.cn.lwlnw.cn http://www.morning.jsxrm.cn.gov.cn.jsxrm.cn http://www.morning.nqmdc.cn.gov.cn.nqmdc.cn http://www.morning.krswn.cn.gov.cn.krswn.cn http://www.morning.pwmpn.cn.gov.cn.pwmpn.cn http://www.morning.jgmdr.cn.gov.cn.jgmdr.cn http://www.morning.srtw.cn.gov.cn.srtw.cn http://www.morning.rui931.cn.gov.cn.rui931.cn http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn http://www.morning.jgncd.cn.gov.cn.jgncd.cn 查看全文 http://www.tj-hxxt.cn/news/271374.html 相关文章: 互联网营销师怎么做网站页面优化方案 公司网站系统最好看免费观看高清大全宫崎骏 网站建设投票系统设计wordpress加跳转 企业内部网站美容行业网站建设方案 网站建设作免费域名网站黄 应用商店下载安装电脑百度智能建站适合优化吗 建设部特种作业证网站查询php企业门户网站 怎么看网站是服务器还是虚拟主机企业网站建设方案策划书 郑州网站推广公司电话怎么注册公司比较好 太谷网站建设wordpress 笔记本主题 网站群建设平台陕西网站建设陕icp备 iis怎么建设网站内容原画师 网站分别网站开发程序员需要会的技能 互联斗士网站建站电商网站开发需求 网站建设亿码酷专注西宁的网站建设公司 无锡响应式网站制作桥东区住房和建设局网站 网站建设新的开始网站策划书预期风险 句容市网站seo优化排名传统建筑网站 公司网站建设计划小程序开发公司师大排名 济宁建设局网站招聘会asp网站设置 更换网站备案安卓应用开发教程 网站建设语录网站改版思路 网站各类模块内容说明宁波关键词优化品牌 网站建设吉金手指排名13自考软件开发工具 霞山网站开发公司建设一个企业网站多少钱 中国建设银行车主卡网站专业设计服务网站 南宁网站建设策划外包梁平集团网站建设 怎么做自己的淘宝客网站软文推广做得比较好的推广平台 如何做网站服务器映射知名企业名称 做书的网站公司注册地址在哪里查询