用户和订单的需求

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

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

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

OrderUser.java:

  1. package cn.sm1234.domain;
  2.  
  3. public class OrderUser extends Order {
  4.  
  5. //Order中没有name
  6. private String name;
  7.  
  8. public String getName() {
  9. return name;
  10. }
  11.  
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15.  
  16. }
  1. @Test
  2. public void test1() {
  3. SqlSession sqlSession = SessionUtils.getSession();
  4. // getMapper(): 返回指定接口的动态代理的实现类对象
  5. OrderDao dao = sqlSession.getMapper(OrderDao.class);
  6. List<OrderUser> list = dao.queryOrderUser();
  7. for (OrderUser orderUser : list) {
  8. System.out.println(orderUser.getName()+"-"+orderUser.getProductname());
  9. }
  10. sqlSession.commit();
  11. sqlSession.close();
  12. }

OrderDao.java:

  1. public interface OrderDao {
  2.  
  3. /**
  4. * 查询订单,并且关联查询用户信息
  5. */
  6. public List<OrderUser> queryOrderUser();
  7. }

(2)ResultMap封装

  1. <!-- type="实体类" -->
  2. <resultMap type="Order" id="OrderUserResultMap">
  3. <id column="id" property="id"/>
  4. <result column="productname" property="productname"/>
  5. <result column="orderno" property="orderno"/>
  6. <!-- user_id封装到User中 -->
  7. <!-- 关联属性
  8. property:关联属性名称(Order类中的user)
  9. javaType:类型(User (即User user))
  10. -->
  11. <association property="user" javaType="User">
  12. <!-- column中的字段名称应该为当前查询结果的字段名称 -->
  13. <id column="user_id" property="id"/>
  14. <result column="name" property="name"/>
  15. <result column="password" property="password"/>
  16. </association>
  17.  
  18. </resultMap>
  19.  
  20. <select id="queryOrderUserResultMap" resultMap="OrderUserResultMap">
  21. SELECT o.id,o.user_id,u.name,o.productname
  22. FROM t_order o LEFT JOIN t_user u ON o.user_id= u.id
  23. </select>

Order.java:

  1. package cn.sm1234.domain;
  2.  
  3. public class Order {
  4.  
  5. private Integer id;
  6. private String productname;
  7. private String orderno;
  8. private Integer userId;
  9.  
  10. private User user;
  11.  
  12. public Integer getId() {
  13. return id;
  14. }
  15. public void setId(Integer id) {
  16. this.id = id;
  17. }
  18. public String getProductname() {
  19. return productname;
  20. }
  21. public void setProductname(String productname) {
  22. this.productname = productname;
  23. }
  24. public String getOrderno() {
  25. return orderno;
  26. }
  27. public void setOrderno(String orderno) {
  28. this.orderno = orderno;
  29. }
  30. public Integer getUserId() {
  31. return userId;
  32. }
  33. public void setUserId(Integer userId) {
  34. this.userId = userId;
  35. }
  36. public User getUser() {
  37. return user;
  38. }
  39. public void setUser(User user) {
  40. this.user = user;
  41. }
  42.  
  43. }
  1. /**
  2. * 查询订单,查询用户(ResultMap)
  3. * @return
  4. */
  5. public List<Order> queryOrderUserResultMap();
  1. @Test
  2. public void test2() {
  3. SqlSession sqlSession = SessionUtils.getSession();
  4. // getMapper(): 返回指定接口的动态代理的实现类对象
  5. OrderDao dao = sqlSession.getMapper(OrderDao.class);
  6. List<Order> list = dao.queryOrderUserResultMap();
  7. for (Order order : list) {
  8. System.out.println(order.getProductname()+"-"+order.getUser().getName());
  9. }
  10. sqlSession.commit();
  11. sqlSession.close();
  12. }

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. git命令行界面

    学习目标:掌握git命令行界面的操作.掌握最基本的clone add commit push pull操作. 先下载客户端:http://github-windows.s3.amazonaws.com ...

  2. 架构师成长之路7.1 CDN理论

    点击返回架构师成长之路 架构师成长之路7.1 CDN理论 CDN,Content Distribute Network,内容分发网络:CDN解决的是如何将数据快速可靠从源站传递到用户的问题.用户获取数 ...

  3. BroadcastReceiver 接收系统短信广播

    BroadcastReceiver 接收系统短信广播 /* 注册广播:    * |--静态注册  (在AndroidManifest .xml 中注册)  * <receiver androi ...

  4. [luogu4513]小白逛公园

    题目描述 在小新家附近有一条"公园路",路的一边从南到北依次排着n个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了. 一开始,小白就根据公园的风景给每个公园打了分-.-.小新 ...

  5. 清理SharePoint 2013 安装配置环境

      最近我们在做Farm Building时,经常要清理Sharepoint的环境,简单整理了下清理步骤: 1.       Delete web app 2.       Delete servic ...

  6. 洛谷 P1110 [ZJOI2007]报表统计 解题报告

    P1110 [ZJOI2007]报表统计 题目描述 \(Q\)的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小\(Q\)希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细 ...

  7. luogu4197 Peaks (kruskal重构树+主席树)

    按照边权排序建出kruskal重构树,每次就变成了先找一个权值<=x的最远的祖先,然后看这个子树的第k小.离散化一下,在dfs序上做主席树即可 而且只需要建叶节点的主席树 注意输出的是第k小点的 ...

  8. [POI2010]KLO-Blocks——一道值得思考的题

    题目大意: 给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1.经过一定次数的操 ...

  9. js(=>) 箭头函数 详细解说 案例大全

    ES6标准新增了一种新的函数:Arrow Function(箭头函数). 为什么叫Arrow Function?因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: fu ...

  10. VBScript入门篇

    VBScript入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义一个过程 定义一个过程:可以将相同的操作的代码提取出来,方便其他人来调用这段代码,可以减少你的代码的重 ...