1、1对1

有2种方式对内嵌Bean设值:

1》关联查询就一条语句。使用association关键字,直接将嵌套对象的映射表的字段赋值内嵌对象。

<association property="teacher" javaType="com.lfy.bean.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>

2》在同一个mapper中写嵌套bean的映射查询,或者嵌套bean的查询在独立的mapper中。还是使用association关键字。

<!-- getTeacher为同mapper的一个查询。对内嵌teacher属性进行关联查询 -->
<resultMap type="com.lfy.bean.Classes" id="ClassesResultMap2">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" select="getTeacher" javaType="com.lfy.bean.Teacher"/>
</resultMap>
<!-- getTeacher为其他mapper的一个查询。对内嵌teacher属性进行关联查询 -->
<resultMap type="com.lfy.bean.Classes" id="ClassesResultMap2">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" select="com.lfy.mapper.teacherMapper.getTeacher" javaType="com.lfy.bean.Teacher"/>
</resultMap>

    总结:关键字association。

2、1对多

外键一般放置在多方,如学生与班级的关系,多个学生对应一个班级,是多对一的关系,外键应该放在学生表中,即学生表参照了班级表。

但我们现在的需求是,查询出某班级,并查询出班级的所有学生,班级与学生的关系是一对多的关系。

    <!-- 根据id查询班级信息,返回resultMap -->
<select id="selectClazzById" parameterType="int" resultMap="clazzResultMap">
SELECT * FROM tb_clazz WHERE id = #{id}
</select> <!-- 映射Clazz对象的resultMap -->
<resultMap type="com.lfy.bean.Clazz" id="clazzResultMap">
<id property="id" column="id"/>
<result property="code" column="code"/>
<result property="name" column="name"/>
<!-- 一对多关联映射:collection fetchType="lazy"表示懒加载 -->
<collection property="students" javaType="ArrayList"
column="id" ofType="com.lfy.bean.Student"
select="com.lfy.mapping.StudentMapper.selectStudentByClazzId"
fetchType="lazy">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
</collection>
</resultMap>

fetchType属性:有两个取值eager和lazy,eager表示立即加载,是默认的加载形式。在查询Clazz对象的时候,会立即执行关联的selectStudentByClazzId中定义的SQL语句去查询班级的所有学生;lazy表示懒加载,其不会立即发送SQL语句去查询班级的所有学生,而是等到需要使用到班级的students属性时,才会发送SQL语句去查询班级的所有学生信息。

fetch机制更多的是为了性能考虑,如果查询班级时确定会访问班级的所有学生,则该属性应该设置为eager;如果查询班级时只是查询班级信息,有可能不会访问班级的所有学生,则该属性应该设置为lazy。一般情况下,一对多所关联的集合对象,都应该被设置成lazy。

使用懒加载,还需要在Mybatis配置文件中增加如下配置:

总结:关键字collection。

3、多对多

数据库中的多对多关系,推荐使用中间表来维护关系,中间表中的订单id作为外键参照订单表的id,商品id作为外键参照商品表的id。

主要是对前面两种的总和应用。

最新文章

  1. Searching for a valid kernel header path... The path &quot;&quot; is not a valid path to the ***** kernel headers. Would you like to change it? [yes]
  2. JAVA 8 Lambda表达式-Lambda Expressions
  3. [20130704] Intra-Query Parallel Thread Deadlocks
  4. c++中二进制和整数转化
  5. BZOJ4298 : [ONTAK2015]Bajtocja
  6. 批量kill mysql processlist进程
  7. poj 3083 Children of the Candy Corn (广搜,模拟,简单)
  8. xml文件操作
  9. MODBUS协议解析中常用的转换帮助类(C#)
  10. linux-shell系列4-init
  11. Nagios 监控 Mysql
  12. Android Studio xml文件中的布局预览视图
  13. Jmeter使用自定义编写代码
  14. 啰里吧嗦redis
  15. 深度学习网络层之 Pooling
  16. Fedora下Eclipse/MyEclipse崩溃的解决方案
  17. 在Windows下编译Emacs
  18. 131.007 Unsupervised Learning - Feature Selection | 非监督学习 - 特征选择
  19. Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性
  20. IDEA2017 使用(二)

热门文章

  1. docker安装各类软件
  2. Struts 2 实现Action的几种方式_java - JAVA
  3. springboot maven打包插件
  4. python 操作符**与*的用法
  5. 对Node.js 中的依赖管理的研究-----------------引用
  6. Python基础(四)
  7. MySQL的视图和索引
  8. 论文阅读:FlexGate: High-performance Heterogeneous Gateway in Data Centers
  9. Python3学习笔记(八):集合
  10. KafKa集群安装详细步骤