论:一对多:(举例一个省有多个市)就是实体类中有(市)类型集合属性;多对一:(多个市有一个共同的省)就是类中有(省)类型的属性。下面来介绍:一对一、多对一的使用方式。

一对多方:

package mlq.bean;
import java.io.Serializable;
import java.util.List;
public class Country implements Serializable {
private Integer cid;
private String cname;
private List<Provincial> list;
get、set 省略...
}

 多对一方:

package mlq.bean;

import java.io.Serializable;
public class Provincial implements Serializable {
private Integer pid;
private String pname;
private Integer countryid;
private Country country;
 get、set 省略...
 }

映射文件配置:(仅供参考)

  <!--使用懒加载技术实现查询-->
<select id="allLzcCountry" resultMap="MyLzcCountrys">
SELECT `cid`,`cname` FROM `country` AS a
WHERE a.`cid`=#{id}
</select> <select id="allLzcCountrys" resultType="Provincial">
select pid,pname,countryid from provincial AS b where b.countryid=#{cid}
</select> <resultMap id="MyLzcCountrys" type="Country">
<id property="cid" column="cid"/>
<result property="cname" column="cname"/>
<!--一对多实体类中的集合赋值-->
<collection property="list" ofType="Provincial" select="allLzcCountrys" column="cid">
<id property="pid" column="pid"/>
<result property="pname" column="pname"/>
</collection>
</resultMap>
  <!--使用延迟加载技术实现多对一的关系-->
<!--首先根据查询id查询省会-->
<select id="selectProvincialByid" resultMap="MeMap">
SELECT `pid`,`pname`,`countryid` FROM `provincial`
WHERE `pid`=#{pid}
</select>
<!--再根据省会查询出来的id查询国家-->
<select id="selectCountryByid" resultType="Country">
SELECT `cid`,`cname` FROM `country` WHERE `cid`=#{cid}
</select>
<resultMap id="MeMap" type="Provincial">
<id property="pid" column="pid"/>
<result property="pname" column="pname"/>
<result property="countryid" column="countryid"/>
<!--根据省会查询出来的id查询国家-->
<association property="country" javaType="Provincial" select="selectCountryByid" column="countryid"/>
</resultMap>

多对多:(举例老师和学生)就是双方都有集合类属性(多对多的实现需要第三张表维持关联关系,不需要显示具体的实体类)

package mlq.bean;
import java.util.List;
/**
* 学生类
*/
public class Student {
private Integer sid;
private String sname;
private Integer age;
private List<Teacher> teachers;
 get、set 省略...
}
package mlq.bean;
import java.util.List;
/**
* 教师类
*/
public class Teacher {
private Integer id;
private String name;
private Integer tid;
private List<Student> students;
get、set 省略...
}

映射文件配置:

  <resultMap id="studentMap" type="Student">
<id property="sid" column="sid"></id>
<result property="sname" column="sname"/>
<result property="age" column="age"/>
<collection property="teachers" ofType="Teacher">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="tid" column="tid"/>
</collection>
</resultMap> <select id="findAllByStudent" resultMap="studentMap">
SELECT s.`sid`,s.`sname`,s.`age`,t.`id`,t.`name`,t.`tid`
FROM `student` AS s,`middle` AS m,`teacher` AS t
WHERE s.`sid`=m.`sid` AND m.`tid`=t.`tid` AND s.sid=#{id}
</select>   <--以上为学生-->
  <resultMap id="teacherMap" type="Teacher">
   <id property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="tid" column="tid"/>
   <collection property="students" ofType="Student">
   <id property="sid" column="sid"></id>
   <result property="sname" column="sname"/>
   <result property="age" column="age"/>
   </collection>
  </resultMap>   <select id="findAllByTeacher" resultMap="teacherMap">
   SELECT s.`sid`,s.`sname`,s.`age`,t.`id`,t.`name`,t.`tid`
   FROM `student` AS s,`middle` AS m,`teacher` AS t
   WHERE s.`sid`=m.`sid` AND m.`tid`=t.`tid` AND t.`tid`=#{id}
  </select>
 

以上为关键代码的展示。

分享知识-快乐自己:论 Mybatis中的关联关系(一对多,多对一,多对多)的更多相关文章

  1. 分享知识-快乐自己:Mybatis 基础动态语句

    目录: User: package mlq.bean; /** * 用户实体类 */ public class User { private Integer uId; private String u ...

  2. 分享知识-快乐自己:Mybatis缓存机制

    论缓存机制: 1):mybatis 提供了缓存机制减轻数据库压力,提高数据库性能. 2):mybatis 的缓存分为两级:一级缓存.二级缓存 3):一级缓存是SqlSession级别的缓存,缓存的数据 ...

  3. 分享知识-快乐自己:Java中的经典算法之冒泡排序(Bubble Sort)

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  4. 分享知识-快乐自己:Java中各种集合特点

    Java中各种集合特点: Collection[单列集合]: List(有序,可重复): ArrayList: 底层数据结构是数组,查询快,增删慢.线程不安全,效率高. Vector: 底层数据结构是 ...

  5. 分享知识-快乐自己:Java 中 的String,StringBuilder,StringBuffer三者的区别

    这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 1):首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer &g ...

  6. 分享知识-快乐自己:Struts2中 获取 Request和Session

    目录结构: POM: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEnco ...

  7. 分享知识-快乐自己:Oracle中定义及使用同义词

    Oracle 同义词概念: Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系. 它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; ...

  8. 分享知识-快乐自己:java 中的访问修饰符

    1):Java中的访问修饰符: Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节. 访问控制 ...

  9. 分享知识-快乐自己:MySQL中的约束,添加约束,删除约束,以及一些其他修饰

    创建数据库: CREATE DATABASES 数据库名: 选择数据库: USE 数据库名: 删除数据库: DROP DATAVBASE 数据库名: 创建表: CREATE TABLE IF NOT ...

随机推荐

  1. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第04章 | 字典

    第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...

  2. 学习已经被淘汰的flash

    一.基本知识介绍 网站动画的分类:二维动画和三维动画   二维动画分类: 1.GIF动画 2.flash动画 flash软件:是矢量软件   选中带有点,并且可以任意变形的对象,叫形状 逐帧动画:在时 ...

  3. innodb之change buffer被动merge

    被动merge情景一.二级索引页空间不足:ibuf0ibuf.cc:: ibuf_insert_low 1.当尝试缓存插入操作时,假设预估二级索引page的空间不足.可能导致索引分裂,则定位到尝试缓存 ...

  4. 多媒体层预览(Media Layer OverView)

    音频模块位于多媒体层里.多媒体层包含了图形.音频.视频三种技术.这三种技术会给你带来声觉.视觉上的良好体验. 来看看ios的结构体系以及媒体层上的内容:                         ...

  5. storm笔记:Storm+Kafka简单应用

    storm笔记:Storm+Kafka简单应用 这几天工作须要使用storm+kafka,基本场景是应用出现错误,发送日志到kafka的某个topic.storm订阅该topic.然后进行兴许处理.场 ...

  6. java jar包运行方法

    http://java-beginner-liyun.iteye.com/blog/736752一.怎么打jar包 第一步:选中要打jar包的工程 第二步:鼠标右击,选择Export... 第三步:选 ...

  7. 命令行运行java

    运行TestLinuxCommand.java     代码 import java.io.BufferedReader; import java.io.BufferedWriter; import ...

  8. RF常用库简介(robotframework)

    标准库 Robot Framework可以直接导入使用的库,包括: Builtin:包含经常需要的关键字.自动导入无需import,因此总是可用的 Dialogs:提供了暂停测试执行和从用户的输入方式 ...

  9. Robot Framework使用Phantomjs进行无界面UI自动化测试

    Robot Framework 是一款关键字驱动的验收自动化测试框架,现在在国内使用的越来越广泛了.一种通用的Web UI自动化测试解决方案是Robot Framework+Selenium2Libr ...

  10. org hibernate querytimeoutexception

    起因 在做Hibernate批量插入时,出现这个错误org.hibernate.QueryTimeoutException: 错误原因是表空间的容量不足,需要加大空间容量:那首先想到的是应该查询其容量 ...