当前位置: 首页 > news >正文

如何创建div做网站做网站时如何确定网站主题

如何创建div做网站,做网站时如何确定网站主题,北京专业网站外包公司,知名企业门户网站建设联系电话前言 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.yingshimen.cn/news/3579/

相关文章:

  • 嘉兴做网站优化多少钱海澜之家的网站建设目标
  • 网站开发数据库设计的作用搭建一个app平台需要多少钱
  • 网站建设培训教程做网站要多少像素
  • 嘉兴微信网站职业资格证培训机构加盟
  • 网站开发我嵌入式开发网站开发从哪里学起
  • 呼伦贝尔做网站公司重庆网站运营公司
  • 多城市网站设计开发云app
  • 在一家传媒公司做网站编辑_如何?竞价排名规则
  • 旅游网站wordpress郑州建设企业网站找哪个公司
  • 一台服务器可以建设几个网站顶做抱枕网站
  • 大连网站的建设公众号怎么做网站
  • 宁波住房和城乡建设部网站wordpress生成的html
  • 网站颜色搭配技巧框架网站怎么做
  • 网站图片设置网站推广怎么做有效果
  • 重庆市城市建设规划官方网站百度联盟一天多少收入
  • 网站建设不赚钱设计网页页面
  • 温州网站建设有限公司wordpress 3.9 sae
  • 泰安市建设职工培训中心网站官网广州十大网站建设
  • 官方网站怎么找深圳网站制作公司咨询
  • 大型网站tag标签 索引营销和运营的区别是什么
  • 深圳小企业网站建设虚拟资源交易平台Wordpress源码
  • 汉服网站设计模板正规的南昌网站建设
  • 北京哪个网站制作公司域名查询中国万网
  • 手机网站自适应代码佛山市锵美装饰有限公司网站建设案例
  • 为什么网站建设图片显示不出来怎么做网站主页
  • 沧浪网站建设方案自己建设网站怎么盈利
  • 二级域名做网站域名做公司永久免费网站什么好
  • 删除wordpress站贵阳企业建站系统模板
  • 宠物医院网站建设方案企业网站免费建站程序
  • 拟采用建站技术网络规划设计师下午题2023估分