zoukankan      html  css  js  c++  java
  • MyBatis:学习笔记(3)——关联查询

    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的区别:点击查看  

  • 相关阅读:
    ros 无线WDS MESH配置一(这个不好用,没有方法二好用)
    ROS脚本编辑器Notepad++装一个mikrotik的插件 RouterOS-Syntax-highliter
    关于ip-neighbor里的mac telnet的一些说明
    ros无线2G和5G的带宽简单计算
    ros的AP创建20个虚拟AP-VAP的脚本
    python异常值(outlier)检测实战:KMeans + PCA + IsolationForest + SVM + EllipticEnvelope
    str.replace替换变量名的字符串
    pd.ExcelWriter(to_excel)保存结果到已存在的excel文件中
    pandas.DataFrame.dropna删除缺失值
    pandas.DataFrame.astype数据结构转换
  • 原文地址:https://www.cnblogs.com/MrSaver/p/6360112.html
Copyright © 2011-2022 走看看