用户和订单的需求

通过查询订单,查询用户,就是一对一查询

(1)自定义JavaBean(常用,推荐使用)

     <select id="queryOrderUser" resultType="OrderUser">
SELECT o.id,o.user_id,u.name,o.productname
FROM t_order o LEFT JOIN t_user u ON o.user_id= u.id
</select>

OrderUser.java:

 package cn.sm1234.domain;

 public class OrderUser extends Order {

     //Order中没有name
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
     @Test
public void test1() {
SqlSession sqlSession = SessionUtils.getSession();
// getMapper(): 返回指定接口的动态代理的实现类对象
OrderDao dao = sqlSession.getMapper(OrderDao.class);
List<OrderUser> list = dao.queryOrderUser();
for (OrderUser orderUser : list) {
System.out.println(orderUser.getName()+"-"+orderUser.getProductname());
}
sqlSession.commit();
sqlSession.close();
}

OrderDao.java:

 public interface OrderDao {

     /**
* 查询订单,并且关联查询用户信息
*/
public List<OrderUser> queryOrderUser();
}

(2)ResultMap封装

     <!-- type="实体类" -->
<resultMap type="Order" id="OrderUserResultMap">
<id column="id" property="id"/>
<result column="productname" property="productname"/>
<result column="orderno" property="orderno"/>
<!-- user_id封装到User中 -->
<!-- 关联属性
property:关联属性名称(Order类中的user)
javaType:类型(User (即User user))
-->
<association property="user" javaType="User">
<!-- column中的字段名称应该为当前查询结果的字段名称 -->
<id column="user_id" property="id"/>
<result column="name" property="name"/>
<result column="password" property="password"/>
</association> </resultMap> <select id="queryOrderUserResultMap" resultMap="OrderUserResultMap">
SELECT o.id,o.user_id,u.name,o.productname
FROM t_order o LEFT JOIN t_user u ON o.user_id= u.id
</select>

Order.java:

 package cn.sm1234.domain;

 public class Order {

     private Integer id;
private String productname;
private String orderno;
private Integer userId; private User user; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProductname() {
return productname;
}
public void setProductname(String productname) {
this.productname = productname;
}
public String getOrderno() {
return orderno;
}
public void setOrderno(String orderno) {
this.orderno = orderno;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
} }
     /**
* 查询订单,查询用户(ResultMap)
* @return
*/
public List<Order> queryOrderUserResultMap();
     @Test
public void test2() {
SqlSession sqlSession = SessionUtils.getSession();
// getMapper(): 返回指定接口的动态代理的实现类对象
OrderDao dao = sqlSession.getMapper(OrderDao.class);
List<Order> list = dao.queryOrderUserResultMap();
for (Order order : list) {
System.out.println(order.getProductname()+"-"+order.getUser().getName());
}
sqlSession.commit();
sqlSession.close();
}

Mybatis进阶学习笔记——关系查询——一对一查询的更多相关文章

  1. Mybatis进阶学习笔记——关系查询——一对多查询

    一个客户拥有多个订单 <resultMap type="User" id="UserOrderResultMap"> <id column=& ...

  2. Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)

    1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...

  3. Mybatis进阶学习笔记——动态sql

    1.if标签 <select id="queryByNameAndTelephone" parameterType="Customer" resultTy ...

  4. Mybatis进阶学习笔记——输出映射

    输出映射(例如一个方法的返回至使用什么类型去接收) 1.基本类型 <!-- 统计记录数 --> <select id="queryTotalCount" resu ...

  5. Mybatis进阶学习笔记——输入映射

    1.输入映射 输入映射支持的类型: 1) 基本的类型,int,String,double 等(*)2) JavaBean 类型(*)3) 包装JavaBean 类型(对象里面包含另一个对象) 1.1基 ...

  6. IBatis.Net学习笔记六--再谈查询

    在IBatis.Net学习笔记五--常用的查询方式 中我提到了一些IBatis.Net中的查询,特别是配置文件的写法. 后来通过大家的讨论,特别是Anders Cui 的提醒,又发现了其他的多表查询的 ...

  7. SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题

    目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...

  8. 数据库学习笔记3 基本的查询流 2 select lastname+','+firstname as fullname order by lastname+','+firstname len() left() stuff() percent , select top(3) with ties

    数据库学习笔记3 基本的查询流 2   order by子句对查询结果集进行排序 多列和拼接 多列的方式就很简单了 select firstname,lastname from person.pers ...

  9. 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

    前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...

随机推荐

  1. BZOJ1045 HAOI2008糖果传递(贪心)

    显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断 ...

  2. MarkdownPad 注册码 Version 2.5.0.27920

    [注册码] 还望多多支持正版 邮箱地址: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6 ...

  3. Uva1001-floyd算法-建图

    给出一些球,球内的时间为零,球之间的速度为10每单位. 给两个点,求最短时间. 把每一个球当做点,球间的距离就是floyd的d数组.之后跑一遍floyd wa了两发因为d数组定义成int了 #incl ...

  4. bzoj 3295 动态逆序对 (三维偏序,CDQ+树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3295 思路: 可以将这道题看成倒着插入,这样就可以转化成求逆序对数,用CDQ分治降维,正反用 ...

  5. android post 方式 访问网络 实例

    android post 方式 访问网络 实例 因为Android4.0之后对使用网络有特殊要求,已经无法再在主线程中访问网络了,必须使用多线程访问的模式 该实例需要在android配置文件中添加 网 ...

  6. 洛谷 P2764 最小路径覆盖问题 解题报告

    P2764 最小路径覆盖问题 问题描述: 给定有向图\(G=(V,E)\).设\(P\) 是\(G\) 的一个简单路(顶点不相交)的集合.如果\(V\) 中每个顶点恰好在\(P\) 的一条路上,则称\ ...

  7. for循环实例

    for循环“池理解”[root@localhost ~]# vi showday.sh#!/bin/bashfor TM in "Morning" "Noon" ...

  8. if语句实例

    if 单分支#!/bin/bashRATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 ...

  9. luogu4932 浏览器 (拆)

    分析1的个数的奇偶性: 奇xor奇=偶xor偶=偶 奇xor偶=奇 所以只要统计1的个数是奇数的数的个数 和 是偶数的个数 乘一起就行了 直接用bitset来做,虽然常数很小/数据随机可以过,但复杂度 ...

  10. bypy 用法

    因为服务器上爬取到的40个G的数据采用http,ftp,scp传输到本地效果不太理想.找资料就看到了bypy,利用百度云存储解决这个问题,解决了服务器带宽有限的问题. pip install bypy ...