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

网站域名类型社交网站建设技术

网站域名类型,社交网站建设技术,百度高级搜索首页,嘉兴品牌网站建设jpa避免n1介绍 像JPA这样的ORM框架通过帮助我们在对象-关系数据映射期间避免了很多样板代码#xff0c;从而简化了我们的开发过程。 但是#xff0c;它们还给表带来了一些其他问题#xff0c;N 1是其中之一。 在本文中#xff0c;我们将简要介绍该问题以及避免这些… jpa避免n1 介绍 像JPA这样的ORM框架通过帮助我们在对象-关系数据映射期间避免了很多样板代码从而简化了我们的开发过程。 但是它们还给表带来了一些其他问题N 1是其中之一。 在本文中我们将简要介绍该问题以及避免这些问题的一些方法。 问题 作为示例我将使用在线图书订购应用程序的简化版本。 在这样的应用程序中我可能会创建一个如下所示的实体来代表采购订单– Entity public class PurchaseOrder {Idprivate String id;private String customerId;OneToMany(cascade ALL, fetch EAGER)JoinColumn(name purchase_order_id)private ListPurchaseOrderItem purchaseOrderItems new ArrayList(); } 采购订单由订单ID客户ID和要购买的一个或多个项目组成。 PurchaseOrderItem实体可能具有以下结构– Entity public class PurchaseOrderItem {Idprivate String id;private String bookId; } 这些实体已经简化了很多但是出于本文的目的这是可以做到的。 现在假设我们需要找到一个客户的订单以在他们的采购订单历史记录中显示它们。 以下查询将用于此目的– SELECTP FROMPurchaseOrder P WHEREP.customerId :customerId 转换为SQL后其外观如下所示– selectpurchaseor0_.id as id1_1_,purchaseor0_.customer_id as customer2_1_ frompurchase_order purchaseor0_ wherepurchaseor0_.customer_id ? 此查询将返回客户拥有的所有采购订单。 但是为了获取订单项JPA将为每个单独的订单发出单独的查询。 例如如果某个客户有5个订单那么JPA将发出5个附加查询以获取这些订单中包含的订单项。 这基本上被称为N 1问题-1个查询以获取所有N个采购订单N个查询以获取所有订单商品。 当我们的数据增长时此行为为我们带来了可伸缩性问题。 即使适量的订单和项目也会造成严重的性能问题。 解决方案 避免热切获取 这是问题背后的主要原因。 我们应该摆脱从映射中获取的所有渴望。 它们几乎没有任何好处可证明其可用于生产级应用程序。 我们应该将所有关系标记为“懒惰”。 需要注意的重要一点–将关系映射标记为“惰性”并不保证基础持久性提供程序也将其同样对待。 JPA规范不保证延迟获取。 充其量对持久提供者来说是一个提示。 但是考虑到Hibernate我从未见过这样做。 仅获取实际需要的数据 始终建议使用此方法而不考虑是否要进行急切/懒惰的访存。 我记得我进行过一次N 1优化将REST端点的最大响应时间从17分钟提高到1.5秒 。 端点根据某些条件获取单个实体对于我们当前的示例该实体将遵循以下原则 TypedQueryPurchaseOrder jpaQuery entityManager.createQuery(SELECT P FROM PurchaseOrder P WHERE P.customerId :customerId, PurchaseOrder.class); jpaQuery.setParameter(customerId, Sayem); PurchaseOrder purchaseOrder jpaQuery.getSingleResult();// after some calculation anotherRepository.findSomeStuff(purchaseOrder.getId()); id是结果中唯一用于后续计算的数据。 有几个客户有上千个订单。 每个命令依次又有数千个其他几种不同类型的子级。 不用说每当在此端点接收到针对这些订单的请求时数据库中就会执行数千个查询。 为了提高性能我所做的就是- TypedQueryString jpaQuery entityManager.createQuery(SELECT P.id FROM PurchaseOrder P WHERE P.customerId :customerId, String.class); jpaQuery.setParameter(customerId, Sayem); String orderId jpaQuery.getSingleResult();// after some calculation anotherRepository.findSomeStuff(orderId); 只是此更改导致680倍的改进 。 如果我们要获取多个属性则可以利用JPA提供的Constructor表达式– SELECT NEW com.codesod.example.jpa.nplusone.dto.PurchaseOrderDTO(P.id, P.orderDate) FROM PurchaseOrder P WHERE P.customerId :customerId, PurchaseOrderDTO.class); jpaQuery.setParameter(customerId, Sayem); ListPurchaseOrderDTO orders jpaQuery.getResultList(); 使用构造函数表达式的一些注意事项– 目标DTO必须具有其参数列表与要选择的列匹配的构造函数 必须指定DTO类的完全限定名称 使用联接提取/实体图 每当我们需要同时获取带有所有子元素的实体时就可以在查询中使用JOIN FETCH 。 这样可以减少数据库流量从而提高性能。 JPA 2.1规范引入了实体图它使我们能够创建静态/动态查询负载计划。 Thorben Janssen 这里和这里 写了几篇文章详细介绍了它们的用法值得一看。 这篇文章的一些示例代码可以在Github上找到。 翻译自: https://www.javacodegeeks.com/2018/04/jpa-tips-avoiding-the-n-1-select-problem.htmljpa避免n1
http://www.pierceye.com/news/486730/

相关文章:

  • 如何做天猫网站医学ppt模板免费下载网站
  • 网站上的通话功能怎么做网站用不用备案
  • 信誉好的模板网站建设wordpress 伪静态设置
  • wordpress主题外贸网站wordpress检查php版本号
  • 便宜电商网站建设找平面图的网站
  • 大型网站建设制作平台东莞南城房价
  • 360免费视频网站建设mvc网站开发之美
  • 武宁县建设工程招标公告门户网站设计一个网站先做哪些构造
  • 公司网站免费建设2023设计院裁员惨烈程度
  • 别人做的网站不能用设计网站教程
  • 设计师发布作品的网站wordpress仿
  • 品牌微信网站建设柳州做网站制作的公司有哪些
  • 买域名做网站推广都是些什么网站点击后的loading是怎么做的
  • 北京网站优化技术泰州自助建站软件
  • 公司企业网站建设目的站长统计官方网站
  • 集团公司网站模板wordpress更换主题方法
  • 临沂网站建设电话建设网站审批手续
  • 国外做健康的网站专门做鞋子的网站吗
  • 手机网站支持微信支付吗北京短视频拍摄
  • 做静态网站工资多少网站前期推广
  • 做预算查价格的网站是哪个好网站开发维护多少钱
  • 个人互动网站365建筑人才网
  • 天津外贸公司网站制作淘客cms网站建设
  • 怎样做微网站网站建设pc指什么软件
  • 四川 网站建设wordpress腾讯地图插件下载
  • 宁波网站公司哪家好百度关键词搜索量排名
  • 北京国税局网站做票种核定时眉山网站优化
  • 网站备案授权书成都网站建设十强企业
  • 网站流量图怎么做的wordpress单号管理系统
  • 生活服务网站建设方案天猫店铺装修做特效的网站