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

一对多方:

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. jsp中jquery用法一步刷新 验证用户名是否存在

    <script type="text/javascript"> /* $(document).ready(function(){ var id="ha&quo ...

  2. Linux ps 命令查看进程启动及运行时间

    引言 同事问我怎样看一个进程的启动时间和运行时间,我第一反应当然是说用 ps 命令啦.ps aux或ps -ef不就可以看时间吗? ps aux选项及输出说明 我们来重新复习下ps aux的选项,这是 ...

  3. Nook 2 Root

        最后我还是忍不住root了它,用了差一点够一个月 1.备份2.root 3.装软件=====================================================1. ...

  4. Linux内存段的分析

        Linux 应用程序的内存分配中,是用 segment(段)进行区别的,使用 size 命令进行查看: size a.out text data bss dec hex filename a. ...

  5. RF--- selenium

  6. Linux远程无密码登陆并远程执行脚本

    假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机: 要达到的目的: A机器ssh登录B机器无需输入密码: 加密方式选 rsa|dsa均可以,默认dsa ss ...

  7. Getting Started with the G1 Garbage Collector(译)

    原文链接:Getting Started with the G1 Garbage Collector 概述 目的 这篇教程包含了G1垃圾收集器使用和它如何与HotSpot JVM配合使用的基本知识.你 ...

  8. 度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。

    // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  9. PowerBuilder -- 日期

    #PB自带日期相关函数 Date(...), DateTime(...), RelativeDate(...), Year(...), Month(...), Day(...), DaysAfter( ...

  10. 将到来的战略转变:移动 Web 还是移动 Apps?

    目前来看,移动应用比移动网站的易用性更高,但变化即将发生,移动网站最终将优于Apps,成为更好的策略选择. 一家公司制定移动策略时,最重要的问题是:是否需要考虑为移动设备特别做点什么.一些公司永远都不 ...