分享知识-快乐自己:论 Mybatis中的关联关系(一对多,多对一,多对多)
论:一对多:(举例一个省有多个市)就是实体类中有(市)类型集合属性;多对一:(多个市有一个共同的省)就是类中有(省)类型的属性。下面来介绍:一对一、多对一的使用方式。
一对多方:
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中的关联关系(一对多,多对一,多对多)的更多相关文章
- 分享知识-快乐自己:Mybatis 基础动态语句
目录: User: package mlq.bean; /** * 用户实体类 */ public class User { private Integer uId; private String u ...
- 分享知识-快乐自己:Mybatis缓存机制
论缓存机制: 1):mybatis 提供了缓存机制减轻数据库压力,提高数据库性能. 2):mybatis 的缓存分为两级:一级缓存.二级缓存 3):一级缓存是SqlSession级别的缓存,缓存的数据 ...
- 分享知识-快乐自己:Java中的经典算法之冒泡排序(Bubble Sort)
原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...
- 分享知识-快乐自己:Java中各种集合特点
Java中各种集合特点: Collection[单列集合]: List(有序,可重复): ArrayList: 底层数据结构是数组,查询快,增删慢.线程不安全,效率高. Vector: 底层数据结构是 ...
- 分享知识-快乐自己:Java 中 的String,StringBuilder,StringBuffer三者的区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 1):首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer &g ...
- 分享知识-快乐自己:Struts2中 获取 Request和Session
目录结构: POM: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEnco ...
- 分享知识-快乐自己:Oracle中定义及使用同义词
Oracle 同义词概念: Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系. 它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; ...
- 分享知识-快乐自己:java 中的访问修饰符
1):Java中的访问修饰符: Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节. 访问控制 ...
- 分享知识-快乐自己:MySQL中的约束,添加约束,删除约束,以及一些其他修饰
创建数据库: CREATE DATABASES 数据库名: 选择数据库: USE 数据库名: 删除数据库: DROP DATAVBASE 数据库名: 创建表: CREATE TABLE IF NOT ...
随机推荐
- struts2的BaseAction<T>继承ActionSupport实现ModelDriven<T>
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> { private sta ...
- python爬虫获取百度图片(没有精华,只为娱乐)
python3.7,爬虫技术,获取百度图片资源,msg为查询内容,cnt为查询的页数,大家快点来爬起来.注:现在只能爬取到百度的小图片,以后有大图片的方法,我会陆续发贴. #!/usr/bin/env ...
- Linux kernel manpages
https://www.linuxquestions.org/questions/linux-newbie-8/man-pages-for-kernel-functions-758389/ 在Linu ...
- servletResponse 控制浏览器缓存
//当访问一些资源文件时,我们希望,访问一次后,资源文件能够在缓存在浏览器中,当我们再次访问该资源时 //直接从缓存中去取,这样可以减少服务器的压力 package response; import ...
- 整合Kafka到Spark Streaming——代码示例和挑战
作者Michael G. Noll是瑞士的一位工程师和研究员,效力于Verisign,是Verisign实验室的大规模数据分析基础设施(基础Hadoop)的技术主管.本文,Michael详细的演示了如 ...
- Spark源码分析之四:Stage提交
各位看官,上一篇<Spark源码分析之Stage划分>详细讲述了Spark中Stage的划分,下面,我们进入第三个阶段--Stage提交. Stage提交阶段的主要目的就一个,就是将每个S ...
- 【解决】无法连接 MKS:套接字连接尝试次数太多正在放弃
https://blog.csdn.net/wjunsing/article/details/78496224 我的电脑 -> 右键 -> 管理 -> 服务和应用程序 -> 服 ...
- 解决UICollectionView的Cell复用引起的布局混乱问题
解决UICollectionView的Cell复用引起的布局混乱问题 问题复现.gif 查了一下度娘发现没有好的解决办法,于是发动自己的聪明才智,终于找到如下解决办法(充分证明了自己动手丰衣足食啊
- smarty静态缓存
缓存能让程序访问起来更加快速,调数据库的数量变少,不能实时的跟数据库同步, 一般缓存文件都放在smarty文件下cach文件夹中: 建立缓存的PHP和HTML文件: 先编辑PHP文件来查询显示数据库当 ...
- VC项目文件说明
.dsp 项目参数配置文件,这个文件太重要,重点保护对象.. .dsw 工作区文件,重要性一般,因为它信息不我,容易恢复. 以下文件在项目中是可丢弃的,有些文件删除后,VC会自动生成的. ...