天气甚好,怎能不学习?
一、单向和双向
包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在 hibernate 中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种关系来讲,比如有员工和部门,一个部门中有多个员工,从部门方看,是一对多关系,而多名员工属于一个部门,是多对一关系,那么如果我们的业务需求只需要通过部门查找到所有的员工,那么我们就只需要进行单向一对多的映射,如果我们需要通过员工来查询出对应的部门,那么我们就需要进行单向多对一的映射,而如果我们这两个业务需求都需要实现,也就是不管从哪一方进行查找,都需要能够找到对方,那么此时就应该编写双向一对多或者双向多对一 (双向一对多和双向多对一是一样的意思)。所以,不管是编写哪一种,都是根据业务需求来进行决策的。这就是单向和双向的意思。
什么是多对多?
多对多就是不管从哪一方看,都是一对多,那么该关系就是多对多。比如学生跟选修课之间,从学生方看,一个学生能选多门选修课,一对多关系,从选修课之间,一门选修课可以被多个学生选择,也是一对多关系,那么学生跟选修课就是多对多关系。多对多关系之间都会由第三张表来表示这种关系。而不会相互设置外键。
二、测试环境
三、一对一映射
有了上面这个关系图,那我们测试就好做多了,就拿 orders 和 user 来测试,从 orders 方看向 user 方,就是一对一映射。也就是单向一对一,只需要根据 orders 能找出 user 即可。
两种方案,映射文件中输出映射使用 resultType 和 resultMap。这里只关注映射文件,全局配置文件就不多说了,还是老样子的配置
3.1、使用 resultType
UserMapper.xml
UserExt.java
因为需要在查询 orders 时,将对应的 user 也查询出来,那么使用 resultType 的话,就需要创建一个 OrdersExt,将 user 和 orders 中的属性合并在一起,形成一个新的 pojo。这样就能够将查询出来的记录都映射到该 pojo 上了
3.2、使用 resultMap
usermapper.xml
resultMap
使用 resultMap 的话就不需要构造一个新的 pojo,只需要将查询出来的记录的值通过 resultMap 帮我们映射到指定到哪个 pojo 的哪个属性上即可。
- 1 2DOCTYPE mapper
- 3PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 7 resultMap
- 8 type:返回对象类型。全限定名,如果使用了typeAliases设置别名,则可以使用别名
- 9 id:唯一标识,供下面使用
- 10
来源: http://www.cnblogs.com/whgk/p/6721935.html