mybatis一对一关联关系映射

在关联关系中,有一对一,一对多,多对多三种关联关系。

一对一关系:在操作上,任意一方引入对方的主键作为外键。

一对多关系:在“多”的一方添加“一”的一方的主键作为外键。

多对多关系:产生中间表引入两张表的主键作为外键,将两个主键作为联合主键或者引入新的字段作为这个中间表的主键。

一对一关联关系

例如person和IDcard,一个人只有一个身份证号,而一个身份证号只对应一个人。

以上是person表和IDcard表。

public class Person {
private Integer id; private String name; private Integer age; private String sex; private IdCard card;//一对一关系映射
setter/getter方法
}
//身份证持久化类
public class IdCard {
private Integer id; private String code;
}

PersonMapper接口

public interface PersonMapper {
Person selectPersonById(int id);
}

PersonMapper.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="cn.jason.bootmybatis.mapper.PersonMapper">
<resultMap id="BaseResultMap" type="cn.jason.bootmybatis.model.Person">
<id column="id" property="id" jdbcType="INTEGER"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="INTEGER"/>
<result column="sex" property="sex" jdbcType="VARCHAR"/>
<!--这是嵌套查询,这样不方便,开发效率比较低,需要写两处sql和mapper接口和mapper文件,比较多余,
现在我想只写一处sql就把需求搞定,也就是写多表查询。把多表查询语句写在一个mapper文件中就可以了。-->
<!-- <association property="card" column="card_id" javaType="IdCard"
select="cn.jason.bootmybatis.mapper.IdCardMapper.selectById">
</association>-->
<!--嵌套结果查询 一对一关系映射-->
<association property="card" javaType="IdCard">
<!--这里面的属性都是关联的那个实体的属性,都是可以在前台获取到的-->
<id property="id" column="card_id"/><!--id为主键列,也就是在tb_idcard表中的id对应tb_person表中的card_id-->
<result property="code" column="code"/><!--表示需要查询出来的结果字段,为tb_idcard中的字段-->
</association>
</resultMap> <sql id="Base_Column_List">
id, name, age, sex, card_id
</sql> <select id="selectPersonById" parameterType="Integer" resultMap="BaseResultMap">
select p.*,idcard.code
from tb_person p ,tb_idcard idcard
where p.card_id=idcard.id and p.id=#{id}
</select> </mapper>

Person业务层接口

//service业务层接口
public interface FindPersonWithIdCard {
Person findByIdWithIdcard(int id);
}

业务层实现类

@Service
public class FindPersonWithIdCardImpl implements FindPersonWithIdCard {
@Autowired
private PersonMapper personMapper; @Override
public Person findByIdWithIdcard(int id) {
return personMapper.selectPersonById(id);
}
}

控制器类

@Controller
public class OneToOne {
@Autowired
private FindPersonWithIdCard findPersonWithIdCard; @RequestMapping("/findpersonid/{id}")//restful架构风格
public String find(@PathVariable int id, Model model) {
model.addAttribute("personinfo", findPersonWithIdCard.findByIdWithIdcard(id));
return "personinfo";
} }

页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"
xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>person信息页面</title>
</head>
<body>
<table>
<thead>
<tr>
<th>personID</th>
<th>姓名</th>
<th>年龄</th>
<th>身份证号</th>
<th>idcardID</th>
</tr>
</thead>
<tr>
<td th:text="${personinfo.id}">personid</td>
<td th:text="${personinfo.name}">姓名</td>
<td th:text="${personinfo.age}">年龄</td>
<td th:text="${personinfo.card.code}">身份证号</td>
<td th:text="${personinfo.card.id}">idcardID</td>
</tr>
</table>
</body>
</html>

一对一运行结果截图

一对一关系总结:

一对一关系是比较简单的,通过在实体类中声明另一个实体类的对象属性,这样就可以把他们关联起来,在写mapper文件时,关联关系都应该采用嵌套结果查询的方式进行关联查询,因为这样比较方便而且快速,不用去建另一个的实体类的mapper接口和mapper映射文件。一对一关系映射使用<association>元素。

mybatis一对一关联关系映射的更多相关文章

  1. mybatis 一对一关联映射实例

    在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系.下面是一个简单的实例: 1.建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2 ...

  2. Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...

  3. mybatis之关联关系映射

    Mybatis关联关系映射 1.一对多 首先先用逆向生成工具生成t_hibernate_order.t_hibernate_order_item 这两张表对应的model与mapper OrderVo ...

  4. Hibernate关联关系映射之一对一关联关系

    人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...

  5. 【mybatis xml】数据层框架应用--Mybatis(三)关系映射之一对一关系映射

    实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系. 针对多表之间的操作,MyBatis提供了关联映射,通过关联映射就可以很好的处理对象与对象之间的关联关 ...

  6. Hibernate映射一对一关联关系

    映射一对一关联 Hibernate提供了两种映射一对一关联关系的方式,分别是按照外键映射和按照主键映射. 下面是员工表和档案信息表(员工和档案表之间的关系是一对一的关系)  档案表(dept) pub ...

  7. mybatis一对一映射配置详解

    听说mybatis一对一有三种写法,今天我试了一下. 数据库表准备 为了偷懒,我直接就拿用户权限菜单里的菜单表和菜单与权限的中间表做实现,他们原来是多对多的关系,这边我假设这两张表是一对一. 表  g ...

  8. Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

    1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信 ...

  9. Mybatis一对一映射

    一.Mybatis一对一映射 本例讲述使用mybatis开发过程中常见的一对一映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见&l ...

随机推荐

  1. 使用 SpringBoot+Dubbo 搭建一个简单分布式服务

    实战之前,先来看几个重要的概念 开始实战之前,我们先来简单的了解一下这样几个概念:Dubbo.RPC.分布式.由于本文的目的是带大家使用SpringBoot+Dubbo 搭建一个简单的分布式服务,所以 ...

  2. Java常考面试题整理(五)

    81.RMI中的远程接口(Remote Interface)扮演了什么样的角色? 参考答案: 远程接口用来标识哪些方法是可以被非本地虚拟机调用的接口.远程对象必须要直接或者是间接实现远程接口.实现了远 ...

  3. Java密码处理

  4. 设置Google浏览器不缓存JS

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  5. LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)

    题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...

  6. PHP CI 框架简单使用(二)

    我们简单认识一下CI框架的MVC.示例代码如下 //CI控制器文件Home.php <?php defined('BASEPATH') OR exit('No direct script acc ...

  7. 编写个shell脚本将/home/test 目录下大于10K的文件转移到/tmp目录下

    #!/bin/sh cd /home/test for i in `ls -l |awk '{if($5>10240) {print $9}}'` do mv $i /tmp done

  8. RF Setup和Teardown的使用

    执行顺序 setup执行顺序是:project级别setup>suite级别setup>case级别setup 无返回值 Run Keywords | [KW1 | arg1 | arg2 ...

  9. 【C++】C++类的static 关键字理解

    转载自:ZJE_ANDY static修饰类中成员,表示类的共享数据 1.static类成员 C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象 ...

  10. 【剑指offer37】二叉树的序列化

    序列化过程很简单,如果是采用先序序列,那么对先序遍历做出改变即可: 层序遍历建立二叉树,如: 1 2        3 4   #     5   6 输入第一行:将要输入的节点的个数N,如上面的为7 ...