MyBatis(8)延迟加载&缓存

 什么是延迟加载?

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();            }
复制代码

 结果:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信