[刘阳Java]_MyBatis_实体关系映射_第8讲
MyBatis既然是一个ORM框架,则它也有像Hibernate那样的一对多,多对多,多对一的实体关系映射功能。下面我们就来介绍一下如何使用MyBatis的实体关系映射
1.MyBatis实体关系映射,对于我个人来讲常用的有下面两种
- 多对一:在子表的映射文件中添加association
- 一对多:在父表的映射文件中添加collection
2.MyBatis中多对一的案例
- 先创建两张表
CREATE TABLE `student` (
`sid` int(11) default NULL,
`sname` varchar(10) default NULL,
`t_id` int(11) default NULL
) ; CREATE TABLE `teacher` (
`t_id` int(11) NOT NULL,
`t_name` varchar(20) default NULL,
PRIMARY KEY (`t_id`)
) ;
- 创建实体类
package com.gxa.pojo;
public class Teacher {
private intt_id;
private String t_name;
public intgetT_id() {
return t_id;
}
public void setT_id(intt_id) {
this.t_id = t_id;
}
public String getT_name() {
return t_name;
}
public void setT_name(String t_name) {
this.t_name = t_name;
}
}
package com.gxa.pojo;
public class Student {
private intsid;
private String sname;
private Teacher teacher;
public intgetSid() {
return sid;
}
public void setSid(intsid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
}
- 创建StudentMapper.xml文件,在此XML文件中配置多对一的关系
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gxa.mapper.StudentMapper">
<resultMap type="com.gxa.pojo.Student" id="Student">
<id property="sid" column="sid"/>
<result property="sname" column="sname"/>
<association property="teacher" javaType="com.gxa.pojo.Teacher">
<id property="t_id" column="t_id"/>
<result property="t_name" column="t_name"/>
</association>
</resultMap> <select id="getStudent" resultMap="Student">
select * from student a, teacher b where a.t_id = b.t_id and sid = 123
</select>
</mapper>
- 完成多对一关系的代码测试
package com.gxa.test; import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import com.gxa.pojo.Student; public class Test03 {
private static SqlSessionFactorysqlSessionFactory;
private static Reader reader; static {
try {
reader = Resources.getResourceAsReader("config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void m01() {
SqlSessionsqlSession = sqlSessionFactory.openSession();
String sql = "com.gxa.mapper.StudentMapper.getStudent";
Student student = sqlSession.selectOne(sql);
System.out.println(student.getSname() + " === " + student.getTeacher().getT_name());
sqlSession.close();
}
}
3.MyBatis一对多的案例
- 修改Student和Teacher这两个实体类
package com.gxa.pojo;
public class Student {
private intsid;
private String sname;
private Teacher teacher;
public intgetSid() {
return sid;
}
public void setSid(intsid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
}
package com.gxa.pojo;
import java.util.List;
public class Teacher {
private intt_id;
private String t_name;
private List<Student> student;
public List<Student>getStudent() {
return student;
}
public void setStudent(List<Student> student) {
this.student = student;
}
public intgetT_id() {
return t_id;
}
public void setT_id(intt_id) {
this.t_id = t_id;
}
public String getT_name() {
return t_name;
}
public void setT_name(String t_name) {
this.t_name = t_name;
}
}
- 创建TeacherMapper的映射文件,在此文件的<resultMap>标签中加入<collection>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gxa.mapper.TeacherMapper">
<resultMap type="com.gxa.pojo.Teacher" id="Teacher">
<id property="t_id" column="t_id"/>
<result property="t_name" column="t_name"/>
<collection property="student" ofType="com.gxa.pojo.Student">
<id property="sid" column="sid"/>
<result property="sname" column="sname"/>
</collection>
</resultMap> <select id="getTeacher" resultMap="Teacher">
select * from teacher a,student b where a.t_id = b.t_id and a.t_id = 1
</select>
</mapper>
- 测试
package com.gxa.test; import java.io.IOException;
import java.io.Reader;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import com.gxa.pojo.Student;
import com.gxa.pojo.Teacher; public class Test03 {
private static SqlSessionFactorysqlSessionFactory;
private static Reader reader; static {
try {
reader = Resources.getResourceAsReader("config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void m01() {
SqlSessionsqlSession = sqlSessionFactory.openSession();
String sql = "com.gxa.mapper.StudentMapper.getStudent";
Student student = sqlSession.selectOne(sql);
System.out.println(student.getSname() + " === " + student.getTeacher().getT_name());
sqlSession.close();
} @Test
public void m02() {
SqlSessionsqlSession = sqlSessionFactory.openSession();
String sql = "com.gxa.mapper.TeacherMapper.getTeacher";
Teacher teacher = sqlSession.selectOne(sql);
List<Student> student = teacher.getStudent();
for (Student s : student) {
System.out.println(teacher.getT_name() + "====" + s.getSname());
}
sqlSession.close();
}
}
[刘阳Java]_MyBatis_实体关系映射_第8讲的更多相关文章
- [刘阳Java]_MyBatis_注解基本用法_第10讲
MyBatis注解提出,可以说是非常好简化了MyBatis配置文件的使用.下面我们简单地来告诉大家如何使用MyBatis的注解 定义接口 package com.gxa.dao; import jav ...
- [刘阳Java]_Spring常用注解介绍_第6讲
Spring的注解是在Spring2.5的版本中引入的,目的简化XML配置.在企业开发过程中使用注解的频率非常高,但是学习注解的前提是大家一定要对Spring基于XML配置要熟悉,这是我个人建议,因为 ...
- [刘阳Java]_SpringMVC访问静态资源_第9讲
有些时候我们在使用SpringMVC的时候造成无法访问静态资源文件(如:html,js,css,image等等).其主要的原因出在web.xml文件我们设置SpringMVC前端控制器的映射路径 &l ...
- [刘阳Java]_Spring相关配置介绍_第5讲
这一节我们介绍一下Spring框架的相关常用配置 Spring依赖注入的两种方式(构造方法注入和setter方式注入) p-namespace方式配置 properties属性文件配置方式 集合对象配 ...
- [刘阳Java]_BeanNameViewResolver视图解析器_第8讲
BeanNameViewResolver:这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象.它要求视图bean对象都定义在Spring ...
- [刘阳Java]_ResourceBundleViewResolver视图解析器_第7讲
ResourceBundleViewResolver是根据proterties文件来找对应的视图来解析"逻辑视图".该properties文件默认是放在classpath路径下的v ...
- [刘阳Java]_InternalResourceViewResolver视图解析器_第6讲
SpringMVC在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器 InternalResourceViewResolver是SpringMVC中比较常用视图解析器. 网 ...
- [刘阳Java]_MyBatis_映射文件的resultMap标签入门_第4讲
<resultMap>:用于解决实体类中属性和表字段名不相同的问题 id:表示当前<resultMap>标签的唯一标识 result:定义表字段和实体类属性的对应关系 prop ...
- [刘阳Java]_MyBatis_映射文件的常用标签总结_第5讲
MyBatis中常用标签的总结,简单给出自己的总结 MyBatis映射文件中的标签使用介绍1.<select>:用于编写查询语句用的标签 id:表示当前<select>标签的唯 ...
随机推荐
- CVD-ALD前驱体材料
CVD-ALD前驱体材料 ALD前驱体源瓶特点是什么 ALD前驱体源瓶(起泡器)用于固态.液态及气态超纯物料类的封装,涉及微正压.常压.中低压的危险化学品,对源瓶的安全性和洁净度提出严苛的要求. ...
- Paddle Inference原生推理库
Paddle Inference原生推理库 深度学习一般分为训练和推理两个部分,训练是神经网络"学习"的过程,主要关注如何搜索和求解模型参数,发现训练数据中的规律,生成模型.有了训 ...
- DeepLabV3+语义分割实战
DeepLabV3+语义分割实战 语义分割是计算机视觉的一项重要任务,本文使用Jittor框架实现了DeepLabV3+语义分割模型. DeepLabV3+论文:https://arxiv.org/p ...
- 在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库
在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库 根据调查,普通人产生的1.2万亿张图像可以通过电话或数码相机捕获.这样的图像的存储,尤其是以高分辨率的原始格式, ...
- MEMS传感器作为变革的驱动力
MEMS sensors as drivers for change 物联网(IoT)正在改变与周围世界互动的方式.每个人,每件事,都是相互联系的,很快就会相互联系.微机电系统(MEMS)设备和传感器 ...
- centos 7 显示系统执行的进程
命令:ps -aux ps -aux | more USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 1911 ...
- 【题解】Luogu P2327 [SCOI2005]扫雷
Luogu P2327 [SCOI2005]扫雷 Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余" ...
- SQL server中自定义排序
select * from OrderPolicyDetail order by ( case Project when 'C' then 1, when 'A' then 2, when 'D' t ...
- 1、JVM体系结构
1.JVM跨语言的平台 随着java7的正式发布,java虚拟机的设计者们通过JSR-292规范基本实现在java虚拟机平台上运行非java语言编写的程序. java虚拟机根本不关心运行在其内部的程序 ...
- 探索颜色渐变绘制算法(基于Processing语言) 第一部分
突然间意识到连续变化的颜色在程序中是如何实现的这一问题.没错,就想有事找事,我会分好几部分慢慢探寻,其实笔者也不会,咱一起研究.ok,我们开始! 第一部分 初始部分就从官方案例来入手学习.官方给了三个 ...