Mybatis进阶学习笔记——关系查询——一对多查询
一个客户拥有多个订单
<resultMap type="User" id="UserOrderResultMap">
<id column="id" property="id"/>
<result column="name" property="name"/> <!-- 如何体现出User中封装的订单呢?需要用到collection标签 -->
<!--
collection:需要封装的集合
property:关联属性的名字
-->
<!-- <collection property="orders" javaType="Order"> -->
<!-- opType使用alt+/会自动提示 -->
<collection property="orders" ofType="Order">
<id column="order_id" property="id"/>
<result column="orderno" property="orderno"/>
<result column="productname" property="productname"/>
</collection> </resultMap> <select id="queryUserOrder" resultMap="UserOrderResultMap">
SELECT u.id,u.name,o.orderno,o.id order_id,o.productname FROM t_user u LEFT JOIN t_order o ON o.user_id=u.id
</select>
User.java:
package cn.sm1234.domain; import java.util.ArrayList;
import java.util.List; public class User { private Integer id;
private String name;
private String password; private List<Order> orders = new ArrayList<Order>(); public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
} }
package cn.sm1234.dao;
import java.util.List;
import cn.sm1234.domain.User;
public interface UserDao {
public List<User> queryUserOrder();
}
@Test
public void test3() {
SqlSession sqlSession = SessionUtils.getSession();
// getMapper(): 返回指定接口的动态代理的实现类对象
UserDao dao = sqlSession.getMapper(UserDao.class);
List<User> userList = dao.queryUserOrder();
for (User user : userList) {
System.out.println("用户信息"+user.getId()+"-"+user.getName());
for(Order order : user.getOrders()){
System.out.println("订单信息"+order.getOrderno()+"-"+order.getProductname());
}
}
sqlSession.commit();
sqlSession.close();
}
数据库信息:

测试查询结果:

Mybatis进阶学习笔记——关系查询——一对多查询的更多相关文章
- Mybatis进阶学习笔记——关系查询——一对一查询
用户和订单的需求 通过查询订单,查询用户,就是一对一查询 (1)自定义JavaBean(常用,推荐使用) <select id="queryOrderUser" result ...
- MYSQL进阶学习笔记十:MySQL慢查询!(视频序号:进阶_23-24)
知识点十一:MySQL 慢查询的应用(23) 一.慢查询定义 MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为慢查询. 查看时间限制 show variables lik ...
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...
- Mybatis进阶学习笔记——动态sql
1.if标签 <select id="queryByNameAndTelephone" parameterType="Customer" resultTy ...
- Mybatis进阶学习笔记——输出映射
输出映射(例如一个方法的返回至使用什么类型去接收) 1.基本类型 <!-- 统计记录数 --> <select id="queryTotalCount" resu ...
- Mybatis进阶学习笔记——输入映射
1.输入映射 输入映射支持的类型: 1) 基本的类型,int,String,double 等(*)2) JavaBean 类型(*)3) 包装JavaBean 类型(对象里面包含另一个对象) 1.1基 ...
- 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战
前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...
- ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改
ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...
随机推荐
- BZOJ2120&2453数颜色——线段树套平衡树(treap)+set/带修改莫队
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- Codeforces Round #381 (Div. 2)C Alyona and mex
Alyona's mother wants to present an array of n non-negative integers to Alyona. The array should be ...
- day26 多继承
class A(object): def test(self): print('from A') class B(A): def test(self): print('from B') class C ...
- python numpy 数组拼接
我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2], [3, 4, 5], [6, 7, ...
- Some Interesting Problems(持续更新中)
这种题目详解,是“一日一测”与“一句话题解”栏目所无法覆盖的,可能是考试用题,也可能是OJ题目.常常非常经典,可以见微知著.故选其精华,小列如下. T1:fleet 给定一个序列,询问[L,R]间有多 ...
- 关于scrollintoview()真的是有意思极了,结合普通tab切换一起看看
scrollIntoView(alignWithTop) 是html5新特性中的一个元素,他主要是指滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素. alignWithTop是true ...
- AS3.0:给图片添加滤镜模糊与斜角效果
滤镜可应用于任何显示对象(即,从 DisplayObject 类继承的对象), 例如 MovieClip.SimpleButton.TextField 和 Video 对象,以及 BitmapData ...
- idea svn performing vcs refresh 很长时间
go to settings - version control - background set changelists to cache initially to minimal value (1 ...
- Adobe Premiere Pro CC ------ 快捷键
ctrl + ~:全屏 Esc:退出全屏
- CodeForces - 893D 贪心
http://codeforces.com/problemset/problem/893/D 题意 Recenlty Luba有一张信用卡可用,一开始金额为0,每天早上可以去充任意数量的钱.到了晚上, ...