mybatis的延迟加载
来源:互联网 发布:深圳gdp首超广州 知乎 编辑:程序博客网 时间:2024/06/05 02:56
延迟加载意义:在需求允许的情况下,先查询单表,当需要关联其它表查询时,进行延迟加载,去关联查询,达到目标:
不需要关联信息时不查询,需要时再查询。好处:提高数据库的性能。
需求:
查询订单信息,关联查询用户信息。
延迟加载需求:首次只查询订单信息,当需要关联查询用户信息时,再查询用户信息。
使用mybatis的延迟加载
1.打开延迟加载的开关
在SqlMapConfig.xml中配置setting全局参数:
lazyLoadingEnabled:延迟加载的总开关,设置为true
aggressiveLazyLoading:设置为false,实现按需加载(将积极变为消极)
<!-- 设置延迟加载 --><settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/></settings>
2.定义Mapper.xml
定义statement,只查询订单
<!-- 查询订单信息 --><select id="findOrdersList" resultMap="lazyLoad">SELECT * FROM orders</select>
resultMap
<!-- 订单及用户的resultMap,实现延迟加载 --><resultMap type="orders" id="lazyLoad"><!-- 配置订单的映射 --><id column="id" property="id"/><result column="user_id" property="user_id"/><result column="order_number" property="order_number"/><!-- 配置延迟的 用户信息select:延迟加载是调用的statement,垮空间需要加上namespacecolumn:传到statement的参数在这里需要将user_id传去将对应的用户信息查出 --><association property="user" javaType="com.mo.pojo.User" select="com.mo.mapper.UserMapper.findUserById" column="user_id"></association></resultMap>
3.在UserMapper.xml写statement,当需要用户的信息时,上面的定义的resultMap会传一个user_id过来
<!-- 根据订单ID来查询用户信息 --><select id="findUserById" parameterType="int" resultType="user">SELECT * FROM USER WHERE id=#{id}</select>
4.写Mapper.java
public interface OrdersMapperCustom {List<Orders> findOrderslazyLoadUser();}
5.单元测试
public class TestDao {//这里需要创建sqlSessionFactory工厂,因为创建新的UserDaoImpl需要注入会话工厂private SqlSessionFactory sqlSessionFactory;@Beforepublic void setUp() throws IOException{String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}@Testpublic void test4(){SqlSession sqlSession = sqlSessionFactory.openSession();OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);List<Orders> list = ordersMapperCustom.findOrderslazyLoadUser();//在这里只会执行查询订单的sqlSystem.out.println(list.size());for (Orders order : list) {User user = order.getUser();//这里需要用户的信息,就会执行懒加载,将用户的信息查询出来}}}
0 0
- Mybatis的延迟加载
- mybatis的延迟加载
- Mybatis的延迟加载
- mybatis的延迟加载
- mybatis 的延迟加载
- Mybatis的延迟加载
- Mybatis的延迟加载
- MyBatis延迟加载的问题
- 使用mybatis的延迟加载
- mybatis的延迟加载 (懒加载)
- MyBatis的延迟加载的配置
- mybatis的延迟加载,一级缓存,二级缓存
- mybatis的延迟加载和一、二级缓存
- mybatis中使用延迟加载的配置
- mybatis的延迟加载、一级缓存、二级缓存
- MyBatis延迟加载
- mybatis延迟加载
- MyBatis延迟加载
- 三、JMX官方指导文档 之 通知
- (回溯法)LeetCode#77. Combinations
- MongoDB之GridFS
- 控制Gallery 速度
- 线程范围内的数据共享
- mybatis的延迟加载
- FM和FFM原理
- MySQL视图
- Hive介绍及部署最详细文档
- 非常详细图文JDK和Tomcat安装和配置的图文教程
- React Native学习资源、开源App和组件
- 树状数组 -- hdu敌兵布阵 -- 树状数组
- Q-Learning实现
- Evaluate Reverse Polish Notation