mybatis实现一对一关联映射实例代码
前言
在客观世界中,对象很少是孤独存在的,如班级与学生之间的关系,学生与课程之间的关系,它们的实例之间可以互相访问,这就是关联关系。MyBatis 的关联映射可以大大简化持久层数据的访问,关联关系的分类如下:
- 一对一
- 一对多
- 多对多
我们首先绘制一个简化的 E-R 图来表示三种关联关系。
上图表示的三种关系:
- 一对一:一个班主任只属于一个班级,一个班级也只能有一个班主任
- 一对多:一个班级有多个学生,一个学生只属于一个班级
- 多对多:一个学生可以选多门课,一门课可以有多个学生选
引言
而在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系。下面是一个简单的
实例:
1、建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2Pojo类属性所示;
2、建立一个Person对象和一个IDCard对象:
mybatis/pri/xiaoyang/otot/pojo/IDCard.java
public class IDCard implements Serializable { private int id; // 主键 private String cardCode; // 身份证编号 private String carAddress; // 身份证地址 //构造函数及Getter/Setter/toString... }
mybatis/pri/xiaoyang/otot/pojo/Person.java
public class Person implements Serializable { private int id; // 主键 private String name; // 姓名 private String sex; // 性别 private IDCard iDCard; //身份证对象,人和身份证一对一关系 //构造函数及Getter/Setter/toString... }
3、接下来是XML映射文件:
mybatis/pri/xiaoyang/otot/mapper/IDCardMapper.xml
<mapper namespace="pri.xiaoyang.otot.mapper.IDCardMapper"> <!-- 根据主键查询IDCard信息,封装为IDCard对象并返回 --> <select id="selectIDCardById" pamaeterType="int" resultType="pri.xiaoyang.otot.pojo.IDCard"> select * from idcard where id = #{id} </select> </mapper>
mybatis/pri/xiaoyang/otot/mapper/PersonMapper.xml
<mapper namespace="pri.xiaoyang.otot.mapper.PersonMapper"> <!-- 根据person主键查询Person信息,封装为Person对象并返回 --> <select id="selectPersonById" pamaeterType="int" resultMap="PersonMapper"> select * from person where id = #{id} </select> <!-- 映射Person对象的resultMap --> <resultMap type="pri.xiaoyang.otot.pojo.Person" id="PersonMapper"> <id property="id" column="id" /> <result property="name" column="name" /> <result property="sex" column="sex" /> <!-- 一对一关联映射:association --> <association property="iDCard" column="card_id" select="pri.xiaoyang.otot.mapper.IDCardMapper.selectIDCardById" javaType="pri.xiaoyang.otot.pojo.IDCard"/> </resultMap > </mapper>
注: 在PersonMapper.xml中定义了一个<select/>标签,该标签的sql语句是根据Person表的主键字段来查询出唯一的Person信息,由于该Person表和IDCard表关联,因此返回一个resultMap值为personMap的映射对象。personMap使用了<association/>标签映射了一对一的关联关系,其标签内的属性select表示会以column的属性值"card_id"来作为参数执行IDCardMapper中定义的selectIDCardById查询对应的IDCard数据,查询出的数据会被封装到property属性值的“card”对象中。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
- js的回调函数详解
- 用Python实现微信接口(一)
- MYSQL常见错误及其解决方式
- 用Python实现微信接口(二)
- (63) 实用序列化: JSON/XML/MessagePack / 计算机程序的思维逻辑
- Quartz作业调度框架
- Oracle系统表整理+常用SQL语句收集
- Webpack 实用技巧高效实战
- oracle表空间不足相关问题解决办法
- 手工打造分布式爬虫
- (64) 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件 / 计算机程序的思维逻辑
- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter与org.apache.struts2.dispatcher.
- Python协程演进过程
- Android TV开发简介
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Elasticsearch: 运用 Pinned query 来提高文档的排名 (7.5发行版新功能)
- leetcode树之从翻转二叉树
- DiskDB,一个不用网的数据库
- 何时用多线程?多线程需要加锁吗?线程数多少最合理?
- Spring Cloud @RefreshScope 刷新机制必知道
- “非主流”的纯前端性能优化
- CICD(二) Ansible
- JS Sequence Diagrams
- kubernetes(二十一) 微服务链路监控& 自动发布
- kubernetes(八) kubernetes的使用
- kubernetes(九) kubernetes控制器
- kubernetes(十) kubernetes service,ingress&cm,secret
- kubernetes(十一) 存储& statefulset控制器
- kubernetes(十二) 准入控制和helm v3包管理
- JS Flowchart Diagrams