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

学做网站论坛坑人吗南昌市 做网站的公司

学做网站论坛坑人吗,南昌市 做网站的公司,wordpress 幻灯片 插件下载,做网站时随便弄上去的文章怎么删掉引言 延迟加载是MyBatis优化性能的核心技术之一&#xff0c;特别适用于处理对象关联关系。当主实体关联的子实体数据量较大或访问频率较低时&#xff0c;延迟加载能显著减少不必要的数据库查询&#xff0c;提升系统性能。完整代码实现 1. XML映射配置 <!-- 学生映射配置 --&…

引言

延迟加载是MyBatis优化性能的核心技术之一,特别适用于处理对象关联关系。当主实体关联的子实体数据量较大或访问频率较低时,延迟加载能显著减少不必要的数据库查询,提升系统性能。


完整代码实现

1. XML映射配置
<!-- 学生映射配置 -->
<resultMap id="studentMap" type="com.test.entity.Student"><id property="id" column="id"/><result property="name" column="name"/><association property="clazz" javaType="com.test.entity.Class"column="cid"select="com.test.repository.ClassRepository.findByClaId"/>
</resultMap><select id="findByStuId" parameterType="java.lang.Integer" resultMap="studentMap">SELECT * FROM student WHERE id = #{id}
</select><!-- 班级映射配置 -->
<select id="findByClaId" parameterType="java.lang.Integer" resultType="com.test.entity.Class">SELECT * FROM class WHERE id = #{id}
</select>
2. 仓库接口定义
// 学生仓库接口
public interface StudentRepository {Student findByStuId(Integer id);
}// 班级仓库接口
public interface ClassRepository {Class findByClaId(Integer id);
}

逐行解析配置

<resultMap id="studentMap" type="com.test.entity.Student">
  • <resultMap>:定义ORM映射规则
  • id="studentMap":映射规则唯一标识符
  • type="com.test.entity.Student":目标实体类全路径
<id property="id" column="id"/>
<result property="name" column="name"/>
  • <id>:主键字段映射(数据库id列 → 实体id属性)
  • <result>:普通字段映射(数据库name列 → 实体name属性)
<association property="clazz" javaType="com.test.entity.Class"column="cid"select="com.test.repository.ClassRepository.findByClaId"/>
  • property="clazz":映射到Student实体的clazz属性
  • javaType="com.test.entity.Class":关联属性的完整类型
  • column="cid":传递到关联查询的参数列(当前查询的cid字段值)
  • select="...":指定延迟加载的查询方法(关键配置)
<select id="findByStuId" resultMap="studentMap">SELECT * FROM student WHERE id = #{id}
</select>
  • 主查询:根据学生ID获取基本信息(不包含班级数据)

延迟加载执行流程

在这里插入图片描述


延迟加载核心特性

  1. 按需加载机制

    • 初始查询仅获取学生基础数据(不含关联对象)
    • 班级数据在首次调用getClazz()时动态加载
    • 避免不必要的数据传输和内存占用
  2. N+1查询模式

    • 1次主查询获取学生列表
    • N次关联查询获取每个学生的班级数据
    • 示例:查询10个学生 → 1(主查询)+10(班级查询)
  3. 关联查询分离

    • 主查询与关联查询完全解耦
    • 各查询可独立优化和复用
    • 通过select属性指定关联加载方法

延迟加载 vs JOIN查询

维度延迟加载JOIN查询
查询次数1 + N(按需加载)1次(复杂JOIN)
数据量首次响应快,传输量小单次传输量大
内存占用初始内存占用低一次性加载所有关联数据
适用场景关联数据访问率<30%需要立即使用所有关联数据
性能瓶颈N+1问题(批量操作时)JOIN复杂度
代码维护逻辑清晰,关联配置解耦SQL复杂度高

最佳实践与优化策略

1. 全局配置启用(mybatis-config.xml)
<settings><!-- 启用延迟加载 --><setting name="lazyLoadingEnabled" value="true"/><!-- 禁用激进加载 --><setting name="aggressiveLazyLoading" value="false"/><!-- 按需加载触发方法 --><setting name="lazyLoadTriggerMethods" value="equals,clone"/>
</settings>
2. 批量加载优化
<association property="clazz" select="com.test.repository.ClassRepository.findById"fetchType="lazy"  <!-- 显式声明加载方式 -->column="cid"/>
3. 解决N+1问题
  • 批量预加载:通过@Fetch注解配置批量加载
    @Fetch(FetchMode.SUBSELECT)
    private Class clazz;
    
  • 智能判断:根据业务场景混合使用JOIN和延迟加载
  • 二级缓存:对频繁访问的关联实体启用缓存
4. 方法命名规范

如示例所示,采用findByStuId/findByClaId的明确命名:

  • 清晰区分主查询和关联查询
  • 避免方法重载导致的歧义
  • 提高代码可读性和维护性

典型应用场景

  1. 列表-详情页模式

    • 列表页:仅加载学生基本信息(findByStuId
    • 详情页:点击时加载班级数据(触发getClazz()
  2. 大对象关联

    • 学生关联班级简历(大文本字段)
    • 初始不加载,需要时再获取
  3. 多级嵌套关联

    学生
    班级
    班主任
    教研组

    逐级延迟加载避免深度JOIN

  4. 微服务架构

    • 学生服务和班级服务分离时
    • 通过延迟加载实现跨服务数据聚合

总结

MyBatis延迟加载通过精妙的<association>配置和按需加载机制,在保证功能完整性的同时优化了系统性能。关键点在于:

  1. 使用select属性分离关联查询
  2. 通过明确的方法命名(如findByXxxId)增强可读性
  3. 合理配置全局延迟加载策略
  4. 根据业务场景选择加载策略(延迟加载/JOIN/批量加载)

正确使用延迟加载可使应用在数据层获得10x性能提升,特别适用于大型企业级应用和高并发场景。


文章转载自:

http://aWAKQ9dF.wrysm.cn
http://OkXKc1Qh.wrysm.cn
http://8UPk1T7j.wrysm.cn
http://EZM6qqpj.wrysm.cn
http://SKobXLU5.wrysm.cn
http://0ldGPfxS.wrysm.cn
http://JL2AFxM3.wrysm.cn
http://HaUMcdzx.wrysm.cn
http://C9jYMUYD.wrysm.cn
http://qdR6ciop.wrysm.cn
http://sbzjXkyw.wrysm.cn
http://lCAMomZd.wrysm.cn
http://X1QuFJVG.wrysm.cn
http://eLI8e9fF.wrysm.cn
http://P4fljzWc.wrysm.cn
http://qflgfCYX.wrysm.cn
http://Zg51Qk6p.wrysm.cn
http://nrxCGj1M.wrysm.cn
http://VkuLS0RF.wrysm.cn
http://x3GMEg10.wrysm.cn
http://IdP1lLgw.wrysm.cn
http://MPkOgVtz.wrysm.cn
http://ZfqShDYl.wrysm.cn
http://Rn6F7Tpw.wrysm.cn
http://6buVVJKI.wrysm.cn
http://54R1LpDG.wrysm.cn
http://Bebl7nPI.wrysm.cn
http://oHwuoaGR.wrysm.cn
http://BZLF4KDS.wrysm.cn
http://qLbx5Mwl.wrysm.cn
http://www.dtcms.com/wzjs/746592.html

相关文章:

  • 广告公司做网站的效果怎么样外贸网站建设公司 迅当网
  • 阜南做网站购物网站建设优缺点
  • 黑龙江中国建设监理协会网站cpanel wordpress是什么
  • 了解宿迁建设网站微信公众号申请注册官网
  • 自己做的网站主页打开速度wordpress 模板丢失
  • 门户型网站都有哪些东莞外贸公司网站建设
  • 网站开发需要学mvc吗常熟企业建设网站公司
  • 个人网站包括哪些内容网站构造
  • 怎么把网站放到空间吗企业网站建设论文模板
  • 建站吗官方网站摄影课程自学网站
  • 怎么和网站建设公司签合同大型户外广告设计公司
  • 淘宝客网站哪里可以做广州白云区网站开发
  • 找人做一下网站大概多少钱深圳品牌网站推广公司哪家好
  • 网站建设企业咨询做网站时怎么透明化
  • 个人做视频网站长沙多地发布最新通告
  • python做网站的开发网站开发费用结算
  • 多企业宣传网站建设网站建设高端培训
  • 网站建设怎么配置伪静态文件晋江论坛怎么搜索帖子
  • 网站开发属于专利吗今天特大新闻
  • 男科医院网站建设策略wordpress导航菜单函数
  • 做内容网站 用什么模版WordPress虚拟资源模板
  • 建网站需要什么知识营销比较好的知名公司有哪些
  • 做的网站如何改标题建设银行官方网站-云服务
  • 怎么做属于自己的音乐网站百度广告平台电话
  • 做淘客网站能干嘛建立网站还是建设网站
  • 做网站最快的编程语言ppt模板免费下载 素材学生版
  • 瑞安网站建设公司中国建设工程造价管理协会网站
  • 福州网站seo推广优化百度提交网站收录
  • 网站设计公司 无锡iis一个文件夹配置多个网站
  • 律师事务所 网站建设网站建设必须要备案吗