什么是延迟加载?
resultMap可以实现高级映射,association,collection具有延迟加载的功能。
当我们需要查询某个信息的时候,再去查询,达到按需查询,就是延迟加载
可以大大提高数据库的性能
那么我们代码撸起来把:
延迟加载我们首先要在全局配置文件中开启:
SQlMapConfig.xml:
<!-- 延迟加载 --> <settings> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"/> </settings>
lazyLoadingEnabled:全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。
aggressiveLazyLoading:当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。
其次是OrderMapperCustomer.xml映射文件:
<!-- 延迟加载 --> <resultMap type="com.MrChengs.po.Orders" id="slow"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <!-- 实现对用户信息进行延迟加载 select:指定延迟加载需要执行的statement的id(是根据user_id查询用户信息的statement) 要使用userMapper.xml中findUserById完成根据用户id(user_id)用户信息的查询,如果findUserById不在本mapper中需要前边加namespace column:订单信息中关联用户信息查询的列,是user_id 关联查询的sql理解为: SELECT orders.*, (SELECT username FROM USER WHERE orders.user_id = user.id)username, (SELECT sex FROM USER WHERE orders.user_id = user.id)sex FROM orders --> <association property="user" javaType="com.MrChengs.po.User" select="com.MrChengs.mapper.UserMapper.findUserById" column="user_id"></association> </resultMap> <select id="findSlowing" resultMap="slow"> SELECT * from orders </select>
测试文件:
//延迟加载 @Test public void testfindSlowing() throws Exception { SqlSession sqlSession = getSqlSessionFactory().openSession(); //代理对象 OrderMapperCustomer mapper = sqlSession.getMapper(OrderMapperCustomer.class); //测试findOrderUsers List<Orders> orders = mapper.findSlowing(); for(Orders order : orders){ User user = order.getUser(); System.out.println(user); } sqlSession.close(); }
结果:

