mybatis一对多关联关系映射

一对多关联关系只需要在多的一方引入少的一方的主键作为外键即可。在实体类中就是反过来,在少的一方添加多的一方,声明一个List<另一方> 属性名 作为少的一方的属性。

用户和订单就是一对多的关系,从用户角度看就是一对多关系,从订单的角度来看就是多对一的关系。

/**
* 订单持久化类
*/
public class Orders {
private Integer id;
private String number;
setter/getter方法
}
/**
*用户持久化类
*/
public class User {
private Integer id;
private String username;
private String address;
private List<Orders> ordersList;//用户关联的订单
setter/getter方法
}

用户mapper接口

/**
* 用户Mapper接口
*/
public interface UserMapper {
//用户和订单为一对多关系,那么此时应该返回一个用户list里面包含了订单信息
List<User> userOrdersinfo(int id);//通过用户id返回它的订单信息
}

用户的mapper映射文件

<?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.UserMapper"> <resultMap id="UserWithOrdersInfo" type="User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
<!--一对多关系映射
ofType表示属性集合中的元素的类型,List<Orders>属性即Orders类
-->
<collection property="ordersList" ofType="Orders">
<id property="id" column="orders_id"/>
<result property="number" column="number"/>
</collection>
</resultMap>
<!--关联查询sql-->
<select id="userOrdersinfo" parameterType="Integer" resultMap="UserWithOrdersInfo">
select u.*,o.id as orders_id,o.number
from tb_user u,tb_orders o
where u.id=o.user_id and u.id=#{id}
</select> </mapper>

用户业务层接口

/**
* 用户业务层接口
*/
public interface UserWithOrdersInfo {
List<User> selectUserOrdersInfo(int id);
}

用户业务层实现类

@Service
public class UserWithOrdersInfoImpl implements UserWithOrdersInfo {
@Autowired
private UserMapper userMapper; @Override
public List<User> selectUserOrdersInfo(int id) {
return userMapper.userOrdersinfo(id);
}
}

控制器类

@Controller
public class UserOrdersController {
@Autowired
private UserWithOrdersInfo userWithOrdersInfo;
@RequestMapping("/userordersinfo/{id}")
public String getUserOrdersInfo(@PathVariable int id, Model model){
model.addAttribute("userordersinfo",userWithOrdersInfo.selectUserOrdersInfo(id));
return "userordersinfo";
}
}

页面

<!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>用户id</th>
<th>姓名</th>
<th>用户地址</th>
<th>订单id</th>
<th>订单号</th>
</tr>
</thead>
<tr th:each="userordersinfo:${userordersinfo}">
<td th:text="${userordersinfo.id}">用户id</td>
<td th:text="${userordersinfo.username}">用户姓名</td>
<td th:text="${userordersinfo.address}">用户地址</td>
<td th:text="${userordersinfo.ordersList.get(0).id}">订单id</td>
<td th:text="${userordersinfo.ordersList.get(0).number}">订单号</td>
<td th:text="${userordersinfo.ordersList.get(1).id}">订单id</td>
<td th:text="${userordersinfo.ordersList.get(1).number}">订单号</td>
</tr>
</table>
</body>
</html>

运行结果

一对多关联关系总结:

一对多关系从不同的角度看,关系是不一样的,但是最终都是一样的,在编写mapper映射文件的时候使用的是<collection>元素。也是使用嵌套查询更加方便,需要解决的问题是如何在页面展示查询出来的一对多关联关系的结果。

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

  1. (转)Hibernate框架基础——一对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础——映射集合属性详细讲解的是值类型的集合(即 ...

  2. mybatis多对多关联关系映射

    mybatis多对多关联关系映射 多对多关系在java类实体中表示为,一个类中包含了集合为另一个类的属性.而这连个实体都需要包含对方的集合类的属性. 例如:订单和商品,一个订单包含多个商品,一个商品又 ...

  3. mybatis一对多双向映射

    连表查询 select   id  resultType  resultMap resultType和resultMap不能同时使用 association 属性  映射到多对一中的“一”方的“复杂类 ...

  4. hibernate 的一对多关联关系映射配置

    hibernate 是操作实体类: 表是一对多的关系,当创建这2个实体的时候 在一的一方定义一个多的一方的集合 在多的一方定义一个一的一方的对象 表是多对多的关系,当创建这2个实体的时候 在互相中都有 ...

  5. Mybatis 一对多 简单映射配置

    只需在一对多的 “一” Model中定义一个list集合: public class SelectQuestion{ // 主键ID private Integer id; private Strin ...

  6. Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结

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

  7. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  8. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  9. Java基础-SSM之mybatis一对多和多对一关系映射

    Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建customers表: ...

随机推荐

  1. 使用Hive-JDBC遇到的一些问题解决

    使用Hive-JDBC遇到的一些问题解决(转) 标签(空格分隔): Hive 1,java.lang.NoClassDefFoundError: org/apache/hive/service/cli ...

  2. Scrum立会报告+燃尽图 02

    本次作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9912 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名 ...

  3. java 中的多态

    多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态. 下面利用代码进行简单概述: 实现多态必须要满足三个条件 1必须有继承 2必须重写 3必须父类引用子类对象 ...

  4. SpringMvc@RequestParam 来映射请求参数

    jsp页面 <a href="springmvc/testRequestParam?username=atguigu&age=11">Test RequestP ...

  5. [SQL语句的常用统计函数]

    1.  upper() 转化为大写       Lower() 转化为小写 SELECT UPPER(列名称) FROM  表名称 SELECT LOWER(列名称) FROM  表名称 2. Sum ...

  6. 使用docker 部署python 项目

    使用python 开发了一个restfu api程序,使用docker镜像部署.主要有如下步骤,简单记录以供以后参考. 1. 创建DockerFile文件 创建一个DockerFile文件,文件名为D ...

  7. Emacs 浏览网页

    Emacs 浏览网页非常方便,还可以忽略掉那些烦人的小广告.特别是在看小说 的时候~ 在之前了解如何通过Emacs浏览网页时,大部分人使用的是w3m,折腾了半天,没能成功.后来无意间发现 ,有EWW ...

  8. 关系代数(Relation Algebra)与SQL语句的对应关系

    SQL语句的执行一般是先翻译为关系代数再被执行的(能有效提高执行速度),所以我们有必要 了解关系代数与SQL语句间的对应关系. 就像高中代数由+-*/和数字组成,关系代数是由union.interse ...

  9. Python中的super()用法

    Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this,比如:C#),用于传递对象本身,而在调用的时候则不 必显式传递,系统会自动传递. 今天我们介绍的主角是su ...

  10. [Nova ERROR] InternalError: Nova requires QEMU version 2.5.0 or greater.

    目录 文章目录 目录 问题 调查 解决 问题 nova-compute service 启动失败 InternalError: Nova requires QEMU version 2.5.0 or ...