MyBatis:学习笔记(3)——关联查询

关联查询

理解联结

  SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选

  模拟一个简单的在线商品购物系统,如果我们将用户信息和订单信息都保存在user表中,这样就不存在联结关系,因为我们仅仅操作一张表就好

  但是这是非常不明智的选择,举例来说,一个用户可以拥有多个订单,如果保存在一个表中,势必会导致用户信息的多次出现,因为每个订单绑定的用户信息都是相同的。

  所以我们尽量要将不同的信息存储与不同的表中,但是单单像下面这样,数据相互独立,查询将会更加不便。

    

  所以,我们在创建表的时候就应该为联结准备条件,像下面这样,这样我们就在形式上创建了一种关联关系

    

创建联结

  我们只是为了解释和引入关联的概念,就简单实现关联的SQL语句

    

  结果如图所示

    

一对一查询

使用ResultType

  1.需求

    为了更好的理解一对一查询,我们设计如下需求:查询订单信息,病关联查询创建该订单的用户信息。

  2.SQL语句:

    

  3.POJO:

   

说明:

  将上边SQL查询的结果集映射到POJO中, 所以该POJO必须包含所有的查询列名。但是原始的Orders.java不能映射全部字段,需要新创建或者扩展原始的POJO,来包含所有的查询列。

4.编写映射文件:Mapper.xml

          

  5.使用动态代理的方法

    

  6.测试

    

使用resultMap

  1.需求

    为了更好的理解一对一查询,我们设计如下需求:查询订单信息,病关联查询创建该订单的用户信息。

  2.SQL语句:

    

  3.直接映射到Order对象中

    

  说明:

    使用resultMap将查询结果中的订单信息映射到Orders对象中,在Orders类中添加user属性,将关联查询到的用户信息映射到Orders对象中的user属性中。

  4.定义ResultMap

     

  5.定义StateMent

    

  6.测试

    

一对多查询

  1.需求

    为了更好的理解一对多查询,我们设计如下需求:查询订单信息,并关联查询创建该订单的订单明细信息。

  2.SQL语句    

    

  3.直接映射到Order对象中

    

  4.resultMap的定义

    

  说明

    collection中,要使用ofType属性,表示list集合属性中的POJO类型。  

  5.定义StateMent

    

  6.测试

    Orders{id=3, userId=1, number='1000010', createtime=Wed Feb 04 13:22:35 CST 2015, note='null', user=User{id=1, username='王五', sex='2', birthday=null, address='null'}, details=[OrderDetail{id=1, orders_id=null, items_id=1, items_num=1}, OrderDetail{id=2, orders_id=null, items_id=2, items_num=3}]}
    Orders{id=4, userId=1, number='1000011', createtime=Tue Feb 03 13:22:41 CST 2015, note='null', user=User{id=1, username='王五', sex='2', birthday=null, address='null'}, details=[OrderDetail{id=3, orders_id=null, items_id=3, items_num=4}, OrderDetail{id=4, orders_id=null, items_id=2, items_num=3}]}

总结

  resultMap与resultType的区别:点击查看  

  

  

MyBatis:学习笔记(3)——关联查询的更多相关文章

  1. Mybatis学习笔记(七) —— 关联查询

    一.一对多查询 需求:查询所有订单信息,关联查询下单用户信息. 注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则 ...

  2. mybatis学习笔记(10)-一对一查询

    mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...

  3. Mybatis学习4——一对一关联查询方法2------实体作为属性

    实体order和user采用resultMap order package pojo; import java.util.Date; public class Order { private Inte ...

  4. Mybatis学习4——一对一关联查询方法1--创建实体

    创建一个实体继承两个实体之一,另一个实体作为属性 实体1. order package pojo; import java.util.Date; public class Order { privat ...

  5. 1.4(Mybatis学习笔记)关联映射

    一.一对一 mybatis处理一对一主要通过<resultMap>中的<association>元素来处理. <association>元素主要使用方方式有两种: ...

  6. Mybatis学习笔记7 - select查询的相关属性使用

    1.当接口的返回类型是集合List时,resultType要写集合中元素的类型 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean ...

  7. mybatis学习笔记(14)-查询缓存之中的一个级缓存

    mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...

  8. Mybatis学习笔记二

    本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...

  9. Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)

    一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...

随机推荐

  1. IIS7无后缀URL部署问题 MVC4 MVC URL映射 windows server 2008

    前言和中间一段都是我找到问题的过程和思维方法.没兴趣的可以直接跳过看后面的问题和解决. 前言: 问题发生在站点完成后,部署到服务器上.以为这个是最轻松的工作.结果悲剧了.windows server ...

  2. LVS+Keppalived实现高可用负载均衡

    三.LVS Keppalived的安装 3.1.环境描述 LVS server1 (Master):10.0.0.202 虚拟IP为:10.0.0.210 LVS server2 ( Slave ) ...

  3. 为CKEditor开发插入代码的插件 已提供下载

    http://www.cnblogs.com/moozi/archive/2010/01/06/1640034.html

  4. 远离DoS攻击 Windows Server 2016发布DNS政策

             Windows Server 2016的网络功能虽然没有获得像Docker容器和Nano Server同等重要的关注,但是管理员们应该了解的是,新的域名系统(Domain Name ...

  5. Extjs6中的新特性

    Ext JS在Sencha框架中引入了许多新的和令人兴奋的改进.这些变化为基于所有现代浏览器.设备和屏幕尺寸带来了新的功能和可用性. 工具包(ToolKits) Ext JS 6最大的变化就是将Ext ...

  6. laravel5 html引用问题

    1. Composer 安装 编辑 composer.json 文件, require 节点下增加: "illuminate/html": "~5.0" 然后 ...

  7. LPC1788的spi使用

    #ifndef __SPI_H_ #define __SPI_H_ #include "common.h" #include "delay.h" // cs p ...

  8. 初步了解php,实现注册及登录

    直接上图(数据库是用wamp实现的) 注册页 html 及 php 代码 登陆页 html 及 php 代码

  9. bzoj3110: [Zjoi2013]K大数查询 【cdq分治&树套树】

    模板题,折腾了许久. cqd分治整体二分,感觉像是把询问分到答案上. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = ...

  10. cygwin的安装,vi的使用,gcc,g++的使用(转)

    源:cygwin的安装,vi的使用,gcc,g++的使用 Gcc的Makefile简单使用