支付招聘网站怎么做费用做积分商城网站
2026/4/16 9:47:51 网站建设 项目流程
支付招聘网站怎么做费用,做积分商城网站,网站建设理由和目的,网站logoico怎么做文章目录第9章#xff1a;MyBatis多级缓存和懒加载一级缓存二级缓存怎么使用懒加载第9章#xff1a;MyBatis多级缓存和懒加载 一级缓存 什么是缓存#xff1f; 一级缓存核心定位 一级缓存是 MyBatis 内置的 默认缓存机制#xff0c;无需手动配置#xff0c;默认开启。作…文章目录第9章MyBatis多级缓存和懒加载一级缓存二级缓存怎么使用懒加载第9章MyBatis多级缓存和懒加载一级缓存什么是缓存一级缓存核心定位一级缓存是 MyBatis 内置的默认缓存机制无需手动配置默认开启。作用域仅限当前SqlSession数据库会话不同 SqlSession 之间的缓存相互隔离。缓存介质内存基于HashMap存储缓存键由Mapper ID SQL 语句 参数 分页信息 环境信息组成。核心价值减少同一 SqlSession 内重复查询的数据库交互提升查询性能。一级缓存生效与失效条件场景类型生效条件失效条件核心前提同一 SqlSession、相同 Mapper IDSQL 参数不同 SqlSession、SQL / 参数 / 分页不同数据库操作影响未执行增删改insert/update/delete操作执行增删改操作自动清空当前 SqlSession 缓存手动干预未调用clearCache()或close()方法调用sqlSession.clearCache()手动清空、sqlSession.close()关闭会话配置影响默认配置无特殊禁用全局配置localCacheScopeSTATEMENT禁用一级缓存一级缓存工作流程一级缓存核心特性ServiceSlf4jpublicclassUserService{AutowiredprivateSqlSessionTemplatesqlSessionTemplate;/*一级缓存 有效的访问*/publicvoidfirstCache(){SqlSessionFactorysqlSessionFactorysqlSessionTemplate.getSqlSessionFactory();SqlSessionsqlSessionsqlSessionFactory.openSession();UserMapperuserMappersqlSession.getMapper(UserMapper.class);UseruseruserMapper.selectById(1);log.info(第一次查询结果:{},user);Useruser2userMapper.selectById(1);log.info(第二次查询结果:{},user2);log.info(两个user是否是同一个对象:{},useruser2);sqlSession.close();}/*一级缓存 失效的访问*/publicvoidfirstCacheInvalidation(){SqlSessionFactorysqlSessionFactorysqlSessionTemplate.getSqlSessionFactory();SqlSessionsqlSessionsqlSessionFactory.openSession();UserMapperuserMappersqlSession.getMapper(UserMapper.class);UseruseruserMapper.selectById(1);log.info(第一次查询结果:{},user);/*执行 写的操作*/user.setAge(18);introwsuserMapper.update(user);log.info(执行写的操作影响行数{},rows);//清空缓存// sqlSession.clearCache();Useruser2userMapper.selectById(1);log.info(第二次查询结果:{},user2);log.info(两个user是否是同一个对象:{},useruser2);sqlSession.close();}}二级缓存怎么使用核心概念界定二级缓存核心定位二级缓存Mapper 级缓存是 MyBatis 的跨 SqlSession 缓存作用域为同一个 Mappernamespace不同 SqlSession 可共享缓存数据。缓存介质默认内存HashMap支持自定义如 Redis等第三方缓存核心价值减少不同 SqlSession 间重复查询的数据库交互适用于查询频率高、修改频率低的数据如字典表、配置表依赖条件实体类需实现Serializable接口需手动开启一级缓存与二级缓存核心区别对比维度一级缓存SqlSession 级二级缓存Mapper 级作用域单个 SqlSession同一个 Mappernamespace共享性不可跨 SqlSession 共享可跨 SqlSession 共享开启方式默认开启无需配置需全局配置 Mapper 配置手动开启实体类要求无强制序列化要求必须实现 Serializable 接口失效触发同一 SqlSession 内增删改、clearCache ()对应 Mapper 内增删改操作、缓存过期等适用场景单会话内重复查询多会话共享高频查询数据二级缓存工作流程二级缓存开启条件三步缺一不可全局配置开启springBoot 配置文件中设置cacheEnabledtrueMapper 级开启在 Mapper XML 中添加cache/标签实体类序列化缓存的实体类必须实现java.io.Serializable接口避免序列化异常。二级缓存配置详解mybatis:configuration:cache-enabled:true# 启用二级缓存!-- Mapper XML 中配置二级缓存 --mappernamespacecom.example.mapper.UserMapper!-- 开启二级缓存配置 --cacheevictionLRUflushInterval60000size512readOnlytrue/selectidselectUserByIdparameterTypelongresultTypeUseruseCachetrueSELECT * FROM user WHERE id #{id}/select/mapper二级缓存属性详解表属性可选值默认值说明evictionLRU/FIFO/SOFT/WEAKLRU缓存回收策略flushInterval毫秒数无缓存刷新间隔size正整数1024缓存引用数量readOnlytrue/falsefalse是否只读blockingtrue/falsefalse是否使用阻塞缓存常见的缓存回收策略策略缩写全称策略说明LRULeast Recently Used移除最长时间未被使用的对象默认策略。FIFOFirst In First Out按对象进入缓存的顺序来移除它们。SOFTSoft Reference基于垃圾回收器状态和软引用规则来移除对象。WEAKWeak Reference更积极地基于垃圾收集器状态和弱引用规则移除对象。// 使用二级缓存需要实体类实现Serializable接口DataNoArgsConstructorAllArgsConstructorpublicclassUserimplementsSerializable{privateLongid;privateStringusername;privateStringemail;privateIntegerage;privateDatecreateTime;privateDateupdateTime;// 关联对象也需要序列化}// 二级缓存服务演示ServiceSlf4jpublicclassSecondLevelCacheService{AutowiredprivateUserMapperuserMapper;/** * 演示二级缓存跨SqlSession共享 */publicvoiddemonstrateSecondLevelCache(){Useruser1userMapper.selectUserById(1L);log.info(SqlSession查询: {},user1);// 重新调用方法模拟第二个SqlSession实际应用中可能是另一个请求log.info( 二级缓存演示结束 );}/** * 二级缓存失效场景 */publicvoiddemonstrateSecondLevelCacheInvalidation(){// 执行更新操作Useruser1newUser();user1.setId(1L);user1.setEmail(newemailexample.com);intupdateCountuserMapper.updateUser(user1);log.info(更新影响行数: {},updateCount);}}懒加载懒加载核心定位懒加载延迟加载是 MyBatis 关联查询的性能优化机制指查询主对象时不立即加载关联对象而是在首次访问关联对象时才触发查询xa对立概念立即加载默认行为查询主对象时同时加载所有关联对象核心价值避免不必要的关联查询减少数据库压力如仅需查询用户基本信息时无需加载其所有订单适用场景一对一、一对多、多对多关联查询且关联数据不总是需要使用懒加载与立即加载对比懒加载开启条件全局配置开启延迟加载lazyLoadingEnabledtrue默认 false关闭积极加载aggressiveLazyLoadingfalseSpringBoot 2.x 已默认关闭确保按需加载关联标签配置可选association或collection标签添加fetchTypelazy优先级高于全局配置懒加载配置详解mybatis:configuration:lazy-loading-enabled:true# 开启全局懒加载aggressive-lazy-loading:false# 关闭积极加载按需加载map-underscore-to-camel-case:true懒加载实战案例!-- 基础用户结果映射不包含关联对象 --resultMapidBaseUserMaptypecom.example.entity.Useridcolumnuser_idpropertyuserId/resultcolumnuser_namepropertyuserName/resultcolumncard_idpropertycardId//resultMap!-- 嵌套查询结果映射使用子查询方式加载关联对象 --resultMapidUserWithIdCardNestedQueryMaptypecom.example.entity.UserextendsBaseUserMapassociationpropertyidCardcolumncard_idselectcom.example.mapper.IdCardMapper.selectByIdjavaTypecom.example.entity.IdCardfetchTypelazy//resultMap!-- 嵌套查询方式查询用户触发子查询加载身份证 --selectidselectUserWithIdCardNestedresultMapUserWithIdCardNestedQueryMapSELECT user_id, user_name, card_id FROM t_user WHERE user_id #{userId}/select懒加载最佳实践适用场景关联数据量大且不经常使用需要快速响应的列表查询移动端应用减少数据传输注意事项 --SELECTuser_id,user_name,card_idFROM t_userWHERE user_id #{userId}懒加载最佳实践 - 适用场景 - 关联数据量大且不经常使用 - 需要快速响应的列表查询 - 移动端应用减少数据传输 - 注意事项 - 注意 N1 查询问题

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询