当前位置: 首页 > 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

相关文章:

  • Tomcat(116) 如何在Tomcat中解决缓存问题?
  • 【算法不挂科】算法期末考试【选择题专项练习】<多单元汇总>
  • Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
  • PostgreSQL学习笔记(一):PostgreSQL介绍和安装
  • LED背光驱动芯片RT9293应用电路
  • python3中的匿名函数
  • 【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 倍