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

做T恤卖网站wordpress 主题 最简单

做T恤卖网站,wordpress 主题 最简单,建筑模板价格现在是多少的,做个自己的影院网站怎么做典型的N1查询问题:当需要查询主实体及其关联子实体时,传统做法是先查询主实体,再循环查询每个主实体对应的子实体,导致数据库查询次数为 1(主查询) N(子查询),性能较差。 优化方案示例 以下是一个完整示例&#xff…

典型的N+1查询问题:当需要查询主实体及其关联子实体时,传统做法是先查询主实体,再循环查询每个主实体对应的子实体,导致数据库查询次数为 1(主查询) + N(子查询),性能较差。

优化方案示例

以下是一个完整示例,包括表结构、实体类、Mapper接口和优化后的查询代码:

1. MySQL表结构
-- 主表:订单
CREATE TABLE `orders` (`id` bigint NOT NULL AUTO_INCREMENT,`order_no` varchar(50) NOT NULL COMMENT '订单号',`total_amount` decimal(10,2) DEFAULT NULL COMMENT '总金额',PRIMARY KEY (`id`)
);-- 子表:订单详情
CREATE TABLE `order_items` (`id` bigint NOT NULL AUTO_INCREMENT,`order_id` bigint NOT NULL COMMENT '订单ID',`product_name` varchar(100) DEFAULT NULL COMMENT '商品名称',`quantity` int DEFAULT NULL COMMENT '数量',PRIMARY KEY (`id`),KEY `idx_order_id` (`order_id`)
);
2. 实体类
// 订单实体
public class Order {private Long id;private String orderNo;private BigDecimal totalAmount;private List<OrderItem> items; // 订单详情列表// getters/setters
}// 订单详情实体
public class OrderItem {private Long id;private Long orderId;private String productName;private Integer quantity;// getters/setters
}
3. MyBatis Mapper接口
public interface OrderMapper {// 查询单个订单Order selectOrderById(Long id);// 批量查询订单详情List<OrderItem> selectItemsByOrderIds(@Param("orderIds") List<Long> orderIds);
}
4. MyBatis XML映射文件
<!-- OrderMapper.xml -->
<mapper namespace="com.example.mapper.OrderMapper"><select id="selectOrderById" resultType="com.example.entity.Order">SELECT * FROM orders WHERE id = #{id}</select><select id="selectItemsByOrderIds" resultType="com.example.entity.OrderItem">SELECT * FROM order_items WHERE order_id IN <foreach collection="orderIds" item="id" open="(" separator="," close=")">#{id}</foreach></select>
</mapper>
5. 优化后的Service代码
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;public Order getOrderWithItems(Long orderId) {// 1. 查询主订单Order order = orderMapper.selectOrderById(orderId);if (order == null) {return null;}// 2. 批量查询订单详情(关键优化点)List<OrderItem> items = orderMapper.selectItemsByOrderIds(Collections.singletonList(orderId));// 3. 关联数据order.setItems(items);return order;}
}

优化前后对比

优化前(N+1查询):

// 传统N+1查询方式(不推荐)
public Order getOrderWithItemsBad(Long orderId) {Order order = orderMapper.selectOrderById(orderId);if (order != null) {// 循环查询每个订单的详情(导致N次查询)List<OrderItem> items = new ArrayList<>();for (Long itemId : order.getItemIds()) {OrderItem item = itemMapper.selectById(itemId);items.add(item);}order.setItems(items);}return order;
}

优化后(批量查询):

// 优化后的批量查询方式
public Order getOrderWithItems(Long orderId) {Order order = orderMapper.selectOrderById(orderId);if (order != null) {// 批量查询所有详情(只需1次查询)List<OrderItem> items = itemMapper.selectByOrderIds(Collections.singletonList(orderId));order.setItems(items);}return order;
}

核心优化思路

  1. 减少数据库交互次数:从多次查询变为两次查询(一次主查询 + 一次批量子查询)

  2. 利用集合操作替代循环查询

    • 先查询主实体
    • 提取所有关联ID
    • 使用 IN 语句一次性查询所有关联子实体
    • 通过Map分组快速关联数据
  3. MyBatis关键配置

    • 使用 <foreach> 标签处理批量查询
    • 通过 @Param 注解传递参数列表
    • 确保子表有合适的索引(如示例中的 idx_order_id

这种优化方案在数据量越大时效果越明显,尤其适合一对多关联查询场景。

http://www.dtcms.com/wzjs/584464.html

相关文章:

  • 广州中学生网站制作怎么做网站主
  • 百度恶意屏蔽网站重庆建设工程网站
  • 高校部门网站建设网络营销公司都做什么的
  • 背景网站建设公司瑞幸咖啡网络营销策划方案
  • 昆明哪有做网站的做一个平台app需要多少钱
  • 阿里云做网站买什么什么是门户网站有哪些
  • 帮网站做点击旅游网站怎么建设
  • 南宁网络推广建站修改WordPress的权限
  • 网站优化是怎么做的精品网站
  • 网站盈利方法保定做网站多钱
  • 咸宁市网站建设网站推广员如何做
  • 成都开发小程序的公司东莞网站优化制作
  • 瑞安网站制作友情链接站长平台
  • 宁波 住房和建设局网站首页wordpress 蜜蜂采集
  • ps怎么艺术字字体设计网站最好网站建设公司运营团队
  • 赣州网站设计艺美网站建设
  • WordPress博客建站系统镇江网站建设推广公司
  • 网站如何添加统计代码招聘网站数据分析要怎么做
  • 建筑网站设置工资单人换了怎么换购物网站的经营要素
  • ui设计在线网站泉州做网站建设
  • 网站301了不知道在哪做的wordpress数组
  • 枣阳市建设局网站怎么自己做电影网站
  • 网站开发 项目计划网站开发视频播放好做吗
  • 保养车哪个网站做的好谷歌 chrome 浏览器
  • 郴州网站优化公司只做恐怖片的网站
  • 网站建设外包公司怎么样易语言wordpress发布
  • 烟台工程建设信息网站开发公司与物业公司合同
  • 建网站需要什么东西北京常用网站
  • 织梦网站字体大小旺道seo网站优化大师
  • 怎么做视频网站教程论坛seo教程