zoukankan      html  css  js  c++  java
  • Mybatis学习第四天——一对一&&一对多

    两表关系:

    1.Mybatis中一对一关系

     1     <!-- 两表联查,通过相同属性user_id
     2         left join 表示以左边的表为主表
     3      -->
     4     <select id="findOrdersByUser" parameterType="User" resultMap="orders_user">
     5         select
     6         o.id,
     7         o.number,
     8         o.createtime,
     9         o.user_id,
    10         u.username,
    11         u.address 
    12         from orders o
    13         left join  user u
    14         on o.user_id = u.id
    15     </select>

    一对一查询的sql代码,这里采用的是resultMap方式查询,即在Orders类中定义一对一的User对象 private User user;

     1     <!-- (均采用别名方式)
     2         type:返回类型,同时也是主要依照的表
     3         注意:在一对一关联中不能省略属性
     4         association:一对一标签
     5             property:在Orders类中对应User的属性名,Orders与type中的类型需一致
     6             javaType:该一对一关系,对应的pojo类 8      -->
     9     <resultMap type="Orders" id="orders_user">
    10         <id column="id" property="id"/>
    11         <result column="number" property="number"/>
    12         <result column="createtime" property="createtime"/>
    13         <result column="user_id" property="userId"/>
    14         
    15         <association property="user" javaType="User">
    16             <id column="user_id" property="id"/>
    17             <result column="username" property="username"/>
    18             <result column="address" property="address"/>
    19         </association>
    20     </resultMap>

    注意:id标签表示唯一性,一般是选取该表的id字段,当出现一对一、一对多关系时涉及2个id,那么可以选取表中(能访问的任意属性)能够表示该表唯一性的属性放在id标签中,上面代码此时order表中user_id字段与user表中id一致,故可以作为唯一性标志,若只能找到该表的id为唯一性属性,同时另一张表中已采用id为唯一标签,此时可以对id进行别名区别。别名操作在sql语句中执行。

    2.Mybatis中一对多关系

    一对多关系与一对一相似,主要在标签方面有些区别

     1     <!-- 此次将user表作为主表,主表中不可能出现重复id -->
     2     <select id="findUserByOrders" parameterType="Orders" resultMap="user_orders">
     3         select
     4         o.id,
     5         o.number,
     6         o.createtime,
     7         u.id uid,
     8         u.username,
     9         u.address 
    10         from user u
    11         left join orders o
    12         on o.user_id = u.id
    13     </select>
     1     <resultMap type="User" id="user_orders">
     2         <id column="uid" property="id"/>
     3         <result column="username" property="username"/>
     4         <result column="address" property="address"/>
     5         
     6         <!-- 一对多中不能简单地将javaType赋为Orders类型
     7             此时Mybatis不能自动区别是否为集合属性,此时须通过ofType设置属性类型
     8          -->
     9         <collection property="order" ofType="Orders">
    10             <id column="id" property="id"/>
    11             <result column="number" property="number"/>
    12             <result column="createtime" property="createtime"/>        
    13         </collection>
    14     </resultMap>
  • 相关阅读:
    【笔记】黄如花.信息检索.学习心得
    【心得】Lattice和Xilinx工具关键特性对比(Diamond、ISE)
    【导航】FPGA相关
    【笔记】黄如花.信息检索.前4章心得(新增大牛汇总的公开课资源)
    python正则表达式练习题
    python正则表达式(1)--特殊字符
    【转】什么时候 i = i + 1 并不等于 i += 1?
    Linux查看文件指定行数内容
    python mysqldb批量执行语句executemany
    linux命令行常用快捷键
  • 原文地址:https://www.cnblogs.com/lisd/p/10277806.html
Copyright © 2011-2022 走看看