两表关系:

1.Mybatis中一对一关系

     <!-- 两表联查,通过相同属性user_id
left join 表示以左边的表为主表
-->
<select id="findOrdersByUser" parameterType="User" resultMap="orders_user">
select
o.id,
o.number,
o.createtime,
o.user_id,
u.username,
u.address
from orders o
left join user u
on o.user_id = u.id
</select>

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

     <!-- (均采用别名方式)
type:返回类型,同时也是主要依照的表
注意:在一对一关联中不能省略属性
association:一对一标签
property:在Orders类中对应User的属性名,Orders与type中的类型需一致
javaType:该一对一关系,对应的pojo类 -->
<resultMap type="Orders" id="orders_user">
<id column="id" property="id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="user_id" property="userId"/> <association property="user" javaType="User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="address" property="address"/>
</association>
</resultMap>

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

2.Mybatis中一对多关系

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

     <!-- 此次将user表作为主表,主表中不可能出现重复id -->
<select id="findUserByOrders" parameterType="Orders" resultMap="user_orders">
select
o.id,
o.number,
o.createtime,
u.id uid,
u.username,
u.address
from user u
left join orders o
on o.user_id = u.id
</select>
     <resultMap type="User" id="user_orders">
<id column="uid" property="id"/>
<result column="username" property="username"/>
<result column="address" property="address"/> <!-- 一对多中不能简单地将javaType赋为Orders类型
此时Mybatis不能自动区别是否为集合属性,此时须通过ofType设置属性类型
-->
<collection property="order" ofType="Orders">
<id column="id" property="id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
</collection>
</resultMap>

Mybatis学习第四天——一对一&&一对多的更多相关文章

  1. MyBatis学习 之 四、MyBatis配置文件

    目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...

  2. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

  3. mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)

    下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...

  4. Mybatis学习(四)————— 高级映射,一对一,一对多,多对多映射

    一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种关系来讲,比如有员工和部 ...

  5. MyBatis学习(四)MyBatis一对一关联查询

    一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...

  6. mybatis学习 十四 resultMap标签 一对一(联合查询)

    1.使用 resultMap 实现关联单个对象(联合查询方式) <resultMap type="Student" id="stuMap1"> &l ...

  7. Mybatis学习总结四(关联查询)

    一.一对一查询 实例:查询所有订单信息,关联查询下单用户信息. Method1:使用resultType,定义订单信息po类,此po类中包括了订单信息和用户信息. public class Order ...

  8. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...

  9. MyBatis学习(四)、MyBatis配置文件

    四.MyBatis主配置文件 在定义sqlSessionFactory时需要指定MyBatis主配置文件: <bean id="sqlSessionFactory" clas ...

随机推荐

  1. 结合React使用Redux

    前面的两篇文章我们认识了 Redux 的相关知识以及解决了如何使用异步的action,基础知识已经介绍完毕,接下来,我们就可以在React中使用Redux了. 由于Redux只是一个状态管理工具,不针 ...

  2. 【Kafka】Producer配置

    名称 描述 类型 默认值 bootstrap.servers kafka集群地址,ip+端口,以逗号隔开.不管这边配置的是什么服务器,客户端会使用所有的服务器.配置的列表只会影响初始发现所有主机.配置 ...

  3. hibernate配置hbm2ddl.auto的四个参数

    <!-- Drop and re-create the database schema on startup --> <!-- hbm(hibernatemapping) ,ddl( ...

  4. struts2上传单个文件

    项目目录: struts.xml配置: <constant name="struts.enable.DynamicMethodInvocation" value=" ...

  5. 用table布局和div布局的区别

    table布局的渲染是将整个table全部渲染出来,如果网路不给力的情况下,整个table会卡死在页面div布局的话,页面渲染,会一个一个的div渲染,网页出现会一个一个出来,不管网速怎样,不会全局卡 ...

  6. Struts dispatchAction

    在Struts中定义动态Action,不用定义多个Action,可以实现一个action,多个跳转. 在定义时,继承DispatchAction,并定义parameter的名字 在jsp页面选择act ...

  7. Linux常用命令之sed(2)

    Sed SED的英文全称是 Stream EDitor,它是一个简单而强大的文本解析转换工具,在1973-1974年期间由贝尔实验室的Lee E. McMahon开发,今天,它已经运行在所有的主流操作 ...

  8. JVM的监控命令

    JVM监控命令基本就是 jps.jstack.jmap.jhat.jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...

  9. POJ 1577 Falling Leaves 二叉搜索树

    HDU 3791 Falling Leaves 二叉搜索树  Figure 1Figure 1 shows a graphical representation of a binary tree of ...

  10. R语言查找变量ls函数

    要知道目前在工作区中的可用变量,可以使用 ls()函数列出所有变量. 另外,ls() 函数可以使用模式来匹配变量名称. print(ls()) 当上面的代码执行时,它产生以下结果: [1] " ...