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

一对多方:

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. 利用 LeakCanary 来检查 Android 内存泄漏

    前言 你被概率性的 OOM 困扰么?有时候,OOM 像幽灵一样,挥之不去,可真想把它揪出来时,又捉之不着.或许,是时候用 LeakCanary 来诊断一下了.它是一个用来检查 Android 下内存泄 ...

  2. ext tree展开时的一些技巧

    加入子节点的时候.我们须要展开父节点.并选中刚加入好的节点. 这时候会有一个问题. 我用的ext-js-4.2起码有一种问题. 节点内部会混乱.要么多加一个. 要么层级会发生故障. 随后我发现一个窍门 ...

  3. 【DB2】DB2使用IMPORT命令导入含有自增长列的表报错处理

    1.启动数据库:db2start 2.创建数据库:create db TestDB using codeset gbk territory CN  collate using identity 3.连 ...

  4. widget 常用UI控件介绍

        一.单选框 单选框实例程序: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  5. 搭建局域网maven仓库

    第一步: 下载Nexus http://nexus.sonatype.org/downloads/下载最新版本 解压缩到任意目录,我的直接解压到了E盘---------->E:\nexus-2. ...

  6. 在MyEclipse上部署Tomcatserver

    我在前面的博客中介绍了在Windows下安装Tomcatserver.这篇博客将介绍在MyEclipse上部署Tomcatserver 第一步:启动MyEclipse 第二步:选项Window-> ...

  7. wampserver 安装多个php版本号报错之关键问题

    近期喜欢上用wampserver来搭建php本地执行环境 主要是一键安装 特easy 之前一直用的是 appserv 也挺好用的 用了wamp后 才发现wamp更好用 duang duang 默认下载 ...

  8. Oracle:复合触发器

    ----- CF_DEPTUCORGANIZATION  INSERT UPDATE DELETE 触发器CREATE  OR REPLACE TRIGGER tr_del_CF_DEPTUCORGA ...

  9. Two stage U-Boot design

    In AM335x the ROM code serves as the bootstrap loader, sometimes referred to as the Initial Program ...

  10. Android错误之Location of the Android SDK has not been setup in the preferences

    解决的方法:打开Help-Install new software,更新文件就可以,这时国内的朋友就须要FQ了,详细有代理,能够网上自行搜索.