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. 计算机网络&http学习笔记持续整理

    http不常见状态码: 204: 请求处理成功,但是没有资源可返回. 206: 只返回请求资源的某一部分(客户端只想请求某一部分),响应报文中包含由Content-Range指定范围的实体内容. 30 ...

  2. shiro的web.xml的配置

    <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class&g ...

  3. 关于MySQL中查询结果的count和from后的条件与where后的条件对比

    啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦 ...

  4. 第八周总结&实验报告六

    总结:这周主要是学习异常的使用,已经怎么解决异常,总的来说学习的还是有点难度的,因为前面的知识还需要时间去弥补,这门课程还是要加油的学习! 这周主要所学: 一.异常 1.异常是导致程序中断运行的一种指 ...

  5. ASP.NET图片防盗链(使用一般处理程序)

    <img src="你的一般处理程序的地址"/> context.Response.ContentType = "image/jpeg"; Uri ...

  6. 后盾网lavarel视频项目---Laravel 安装代码智能提示扩展「laravel-ide-helper」

    后盾网lavarel视频项目---Laravel 安装代码智能提示扩展「laravel-ide-helper」 一.总结 一句话总结: laravel-ide-helper作用是:代码提示 larav ...

  7. 请描述一下 BroadcastReceiver?

    BroadCastReceiver 是 Android 四大组件之一,主要用于接收系统或者 app 发送的广播事件. 广播分两种:有序广播和无序广播. 内部通信实现机制:通过 Android 系统的 ...

  8. "Developer tools access" 需控制另一个进程才能继续调试 解决方案

    解决方案: 打开终端输入下边命令: DevToolsSecurity --status 查看状态 DevToolsSecurity --enable 输入密码,修改为enable,即可用 DevToo ...

  9. http协议详解1

    一.http协议url组成部分详解:1.协议类型2.ip(服务器地址)3.port(或域名)4.path(请求资源所在地址)5.?(资源地址与参数的分割符合)6.参数(请求参数)7.&(多个参 ...

  10. Linux监控命令之==>netstat

    一.命令说明 netstat 命令用于显示本机网络连接.运行端口.路由表等信息 二.参数说明 -a (all):显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连 ...