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

SSM(加载策略、Mybatis缓存)

延迟加载:

就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称 懒加载。

在多表中,一对多多对多通常是采用延迟加载的,在一对一多对一的情况下采用的是立即加载

在association和collection标签中有一个fetchType属性,通过修改它的值,可以修改局部的加载策略。

UserMapper.xml:

局部延迟加载:

fetchType属性: lazy。 表示的就是懒加载。eager 表示的是立即加载策略。这样的是局部设置为懒加载。

    <resultMap id="userMap2" type="com.findyou.entity.User"><!--这个是属性是集合的 其他对象--><id column="id" property="id"/><result column="username" property="username"/><!--这里是一对多 属性是集合类别的 因此 用的是 collection --><collection property="ordersList" ofType="com.findyou.entity.Orders"select="com.findyou.mapper.OrdersMapper.findAllOrdersByUid" column="id"fetchType="lazy"></collection></resultMap>

触发延迟加载:

要是不写setting的话,就不会去触发懒加载。

 在mybatis的核心配置文件里面适用<setting>修改全局的加载策略。下面这个代码是触发的是toString(),当你调用toString()方法的时候,也就是你输出打印的时候,就会触发。

    <settings><!--触发延迟加载方法 所有方法都会延迟加载--><setting name="lazyLoadTriggerMethods" value="toString()"/></settings>

全局延迟加载:

在Mybatis的核心配置文件里面中可以使用<setting>修改全局的加载策略。

但是在输出打印对象的时候,是没有懒加载的,因此要加上触发延迟加载。这样,无论什么方法都会被懒加载的。也即是相当于被加上了 fetchType = lazy。

    <settings><!--全局延迟加载--><setting name="lazyLoadingEnabled" value="true"/></settings>

注意:

局部的加载策略优先级是高于全局的加载策略。 

测试代码: 

    /*** 一对多的嵌套查询 延迟查询*/@Testpublic void test05() {InputStream inputStream = null;try {inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException e) {throw new RuntimeException(e);}SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession(); /*默认的是手动的提交 如果里面的参数是true的话 就为自动提交了*/// 这个是获取mapper对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userList = userMapper.findAllWithOrders2();for (User user : userList) {System.out.println(user);}sqlSession.close();}

运行结果:

 要是不开启懒查询的话,是:

开启懒查询的话,是:

Mybatis缓存:

经常查询一些不经常发生变化的数据,使用缓存来提高查询的效率。

mybatis是默认开启一级缓存的。

一级缓存是SqlSession范围的缓存,执行SqlSession的 增、删、改或者用ClearCache()、commit()、close()方法都会清空缓存。那么下一次用的时候就,去缓存里面找不到,就会去数据库里面找了。


http://www.mrgr.cn/news/62555.html

相关文章:

  • WPF中设置DataGrid的常用样式
  • 部署到github-pages后, 切换路由,前端路由缺失github上的项目名【已解决】
  • 前端项目【本科期间】
  • Leecode热题100-287.寻找重复数
  • 【牛客算法】某司面试算法题:小红的整数操作
  • 江协科技STM32学习- P24 DMA数据转运DMA+AD多通道
  • 【JAVA 笔记】09 ch06_arrays_sort_and_search
  • [NOIP2003 普及组] 乒乓球
  • php反序列化靶场随笔分析
  • AI产品经理零基础到进阶学习路线图,非常详细收藏我这一篇就够了
  • SOLIDWORKS CAM数据无法恢复,因为已检测到轻化零件
  • 安卓开发之登录页面(跳转版)
  • 同步模式之保护性暂停
  • 声屏障结构设计福音!基于伏图的声屏障结构强度校核仿真APP开发及应用
  • 阿里云物联网的通信方式
  • 尚航科技亮相中国国际数字经济博览会,重磅发布怀来尚云智算中心
  • Centos环境下安装docker
  • 国标GB28181设备管理软件EasyGBS国标GB28181公网平台应用到“雪亮工程”
  • 开放式耳机哪个品牌好用值得选择?2024开放式耳机蓝牙排行榜
  • 计算机毕业设计django+大模型租房推荐系统 租房可视化 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统
  • 【ChatGPT】搜索趋势分析
  • Spring Boot在校园社团信息管理中的实践与思考
  • 北京神州分诊叫号系统 doctor 任意文件上传漏洞
  • 最新AI绘画ComfyUI整合包又更新了!
  • 【天线&空中农业】蜜蜂检测系统源码&数据集全套:改进yolo11-ASF
  • go-logger v0.27.0 - 并发性能为官方库 10 倍