12.mybatis_lazyLoading(传智播客)

延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。
resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。

需求:查询订单信息的同时延时加载下单用户的信息

需求分析:如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。

开发步骤

1.配置与依赖

//在mybatis.xml文件中添加配置

   
   


//在pom文件中添加依赖

  cglib
  cglib
  2.2.2

2.mapper接口

public interface LazyLoadingMapper {
    List getOrdersUser();

    User getUserById(int id);
}

3.sql映射文件




    

    
        
        
        
        
        
    

    

4.po类编写

public class User {
    //属性名要和数据库表的字段对应
    private int id;
    private String username;// 用户姓名
    private String sex;// 性别
    private String birthday;// 生日
    private String address;// 地址
    //get和set方法......
}

public class Orders{
    private int order_id;
    private int user_id;
    private String order_no;
    private String createTime;
    private String note;
    private User user;
    //get和set方法......
}

5.测试

public class Test {
    private static final Logger log = Logger.getLogger(Test.class.getName());
    public static void main(String[] args) throws Exception {
        // 1.获取mybatis配置文件的路径
        String resource = "config/mybatis.xml";
        // 2.得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 3.根据mybatis配置文件的信息创建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        LazyLoadingMapper orderUserMapper = sqlSession.getMapper(LazyLoadingMapper.class);
        List ordersList = orderUserMapper.getOrdersUser();
        for(Orders demo:ordersList){
            System.out.println(demo.getOrder_no());
            User user = demo.getUser();
            System.out.println(user.getId());
            System.out.println(user.getUsername());
        }
    }
}

运行测试结果如下
12.mybatis_lazyLoading(传智播客)_第1张图片

你可能感兴趣的:(Mybatis)