网站内容页301如何做,企业网站建设费用会计分录,连云港 网站设计,个人主页是什么查询所有客户以及对应的订单
目录
左连接查询#xff08;不支持懒加载#xff09;分步查询#xff08;支持懒加载#xff09;左连接查询#xff08;不支持懒加载#xff09;
场景#xff1a;我们想要查询出所有的客户#xff0c;并且把每个客户对应的订单也查出来。…查询所有客户以及对应的订单
目录
左连接查询不支持懒加载分步查询支持懒加载左连接查询不支持懒加载
场景我们想要查询出所有的客户并且把每个客户对应的订单也查出来。这时候可以使用左连接查询。
那么如何在 MyBatis 中实现左连接查询呢
给客户的 domain 增添一个字段来表示对应的订单private ListOrder orders new ArrayList();
Setter
Getter //使用注解生成 get 与 set 方法
ToString
public class Customer {private Integer cust_id;private String cust_name;private String cust_profession;private String cust_phone;private String email;private ListOrder orders new ArrayList(); // 对应的订单
}在 CustomerMapper 接口类中添加方法
/*查询客户和订单*/
public ListCustomer getAllCustomer();在 CustomerMapper 映射文件中写 SQL由于查询结果既包含客户又包含订单我们需要用 resultMap 来自定义结果集。与之前查询订单(多)附带客户(一)的 association 相对于这里查询客户(一)附带订单(多)需要 collection 标签。
代码如下
!--自定义结果集--
resultMap idcustMap typecustomerid columncust_id propertycust_id/result columncust_name propertycust_name/result columncust_phone propertycust_phone/result columncust_profession propertycust_profession/result columnemail propertyemail/collection propertyorders ofTypeOrderid columnorder_id propertyorder_id/result columnorder_name propertyorder_name/result columnorder_num propertyorder_num//collection
/resultMap!--查询所有客户和订单--
select idgetAllCustomer resultMapcustMap /*使用自定义的结果集*/SELECT * FROM customer AS c LEFT JOIN order AS o ON c.cust_id o.cust_id;
/select测试类中
public void test4(){SqlSession sqlSession MybatisUtils.openSession();CustomerMapper customerMapper sqlSession.getMapper(CustomerMapper.class);ListCustomer allCustomer customerMapper.getAllCustomer();for (Customer customer : allCustomer) {System.out.println(customer);}sqlSession.close();
}运行结果成功查询出所有的客户与他们对应的订单。
分步查询支持懒加载
分步查询也可以达到我们的要求先查出所有客户的信息再根据查出的客户的 cust_id 去查订单。
OrderMapper 接口中定义根据 cust_id 查询订单的方法 OrderMapper 映射文件中写 SQL 定义好接口中的方法后CustomerMapper 映射文件中写 SQL利用 collection 实现分步查询与之前的 association 类似。 测试类中 运行结果每个查询出来的用户都会再根据他的 cust_id 去查询订单。但是由图可见会产生很多的 sql 语句。左连接只需要一句SQL