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语句动态的组装能力,而且他只有 ...
随机推荐
- NodeJs加载站点的所有页面不存在则404
演示 链接:https://pan.baidu.com/s/1TZ351m3wUWZpq46qGbejjg 密码:ijj5 代码: var http = require("http" ...
- length、length()、size()区别 List与String相互转换
字符串 数组 List对象 定义 String str = ""; String[] s = new String[5]; char[] s; List<String&g ...
- 自学Zabbix14.1 二次开发API
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix14.1 二次开发API Zabbix API我们可以做很多,自己开发web界面. ...
- 深入理解Adaboost算法
理解算法确实是欲速则不达,唯有一步一步慢慢看懂,然后突然觉得写的真的太好了,那才是真的有所理解了. Adaboost的两点关键点: 1. 如何根据弱模型的表现更新训练集的权重: 2. 如何根据弱模型的 ...
- sqlite 日期型 字符串转为日期型
因为sqlite为弱引用,使用字段前将他强制转为日期型,用datetime.或者最原始的 strftime. SELECT distinct ID from testTable where datet ...
- A1089. Insert or Merge
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- 【LOJ#6283】数列分块7
题目大意:维护一个 N 个数组成的序列,支持区间加.区间乘.单点询问. 题解:在每一个块中维护两个标记,即:整块加和的标记和整块乘积的标记.不过由于有两个标记,涉及到计算区间总和的顺序问题. 一个指定 ...
- 【洛谷P5020】货币系统 完全背包
题目大意:给定 N 个数,求在这 N 个数中至少选出几个数能表示出所有数字,输出最少的个数. 题解:由于只有小的数字可以表示大的数字,因此首先需要对这 N 个数字进行从小到大排序.排序之后就变成一道不 ...
- springboot与springcloud的版本问题
Spring Cloud为开发者提供了一套可以用来快速搭建分布式系统中常见模式的工具.提取主干即是Spring Cloud提供了一套工具.这些工具为开发人员提供了分布式系统下常见问题的通用解决方案.这 ...
- toogle
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...