Mybatis处理“一对多”的关系时,需要用到associasion元素。处理”多对一“用collection元素来实现(这两个元素在之前mapper文件中提到过)。

本例子中,假设一名User可以有多个Orders,用associasion来实现关联关系

首先数据库表结构

CREATE TABLE `user` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`username` varchar(20) COLLATE utf8_bin NOT NULL,
`usernumber` varchar(20) COLLATE utf8_bin NOT NULL,
`loginname` varchar(20) COLLATE utf8_bin NOT NULL,
`loginpassword` varchar(20) COLLATE utf8_bin NOT NULL,
`sex` varchar(4) COLLATE utf8_bin DEFAULT NULL,
`birthday` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
//orders表中为user_id添加外键,指向user表的id
CREATE TABLE `orders` (
`oid` int(8) NOT NULL AUTO_INCREMENT,
`orderid` varchar(20) COLLATE utf8_bin NOT NULL,
`message` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`user_id` int(8) NOT NULL,
PRIMARY KEY (`oid`),
KEY `1001` (`user_id`),
CONSTRAINT `1001` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Order实体类

        public int oid;
public String orderid;
public String message;
public User user;
//省略get/set方法

Order对象的sql映射文件,order.xml

<mapper namespace="com.mybaits.dao.impl.OrdersImpl">
<resultMap type="com.mybaits.bean.User" id="userResult">
<id property="id" column="id" />
<result property="username" column="username"/>
<result property="usernumber" column="usernumber"/>
<result property="loginname" column="loginname"/>
<result property="loginpassword" column="loginpassword"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday" />
</resultMap> <resultMap type="com.mybaits.bean.Orders" id="orderResult">
<id property="oid" column="oid"/>
<result property="orderid" column="orderid"/>
<result property="message" column="message"/>
        <!--使用resultMap属性引用上面的User实体映射-->
<association property="user" column="user_id" javaType="com.mybaits.bean.User" jdbcType="INTEGER" resultMap="userResult">
</association>
</resultMap> <select id="findAllOrders" resultMap="orderResult">
select * from orders o left join user u on o.user_id=u.id
</select> <insert id="saveOrder" parameterType="Orders">
insert into orders (orderid,message,user_id) values(#{orderid},#{message},#{user.id})
</insert> </mapper>

OrderTest类

@Test
public void Test2(){
List<Orders> l=order.findOrders();
for(int i=0;i<l.size();i++){
System.out.println(l.get(i));
}
}
订单编号:10001 订单信息:订单1 下单用户:BN
订单编号:10002 订单信息:订单2 下单用户:BN
订单编号:10003 订单信息:订单3 下单用户:qwe
订单编号:10004 订单信息:订单4 下单用户:qwe
订单编号:10005 订单信息:订单5 下单用户:JAVA

利用collection在User对象中关联

1.在User中添加 List<Orders> orders 属性

private List<Orders> orders=new ArrayList<Orders>();//get/set方法

2.User的sql映射文件user.xml

     <resultMap type="com.mybaits.bean.User" id="userResult">
<id property="id" column="id" />
<result property="username" column="username"/>
<result property="usernumber" column="usernumber"/>
<result property="loginname" column="loginname"/>
<result property="loginpassword" column="loginpassword"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday" />
//collection元素映射 user对象中order的集合属性,resultMap指向下面的order的resultMap
<collection property="orders" ofType="Orders" resultMap="orderResult"></collection>
</resultMap>
       <resultMap type="com.mybaits.bean.Orders" id="orderResult">
<id property="oid" column="oid"/>
<result property="orderid" column="orderid"/>
<result property="message" column="message"/>
</resultMap>

      <select id="getUOBN" parameterType="string" resultMap="userResult">
             select * from user u left join orders o on o.user_id=u.id where u.usernumber=#{usernumber}    
          </select>


3.测试类

@Test
public void Test11(){
User u=userDao.findUserOrders("01111001");
System.out.println("用户:"+u.getUsername()+"\n订单总数:"+u.getOrders().size());
for(Orders o:u.getOrders()){
System.out.println("订单号:"+o.getOrderid()+"\t订单信息:"+o.getMessage());
} } 用户:BN
订单总数:2
订单号:10001 订单信息:订单1
订单号:10002 订单信息:订单2

MyBatis对象关联关系---- association与collection的更多相关文章

  1. Mybatis关联查询<association> 和 <collection>

    一.背景 1.在系统中一个用户存在多个角色,那么如何在查询用户的信息时同时把他的角色信息查询出来啦? 2.用户pojo: public class SysUser { private Long id; ...

  2. Mybatis中使用association及collection进行自关联示例(含XML版与注解版)

    XML版本: 实体类: @Data @ToString @NoArgsConstructor public class Dept { private Integer id; private Strin ...

  3. Mybatis中使用association及collection进行一对多双向关联示例(含XML版与注解版)

    XML版本: 实体类: package com.sunwii.mybatis.bean; import java.util.ArrayList; import java.util.List; impo ...

  4. MyBatis对象关联关系----多对多的保存与查询

    模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...

  5. MyBatis之ResultMap的association和collection标签(一)

    1.先说resultMap比较容易混淆的点, 2. Map结尾是映射,Type是类型  resultType 和restltMap restulyType: 1.对应的是java对象中的属性,大小写不 ...

  6. MyBatis之ResultMap的association和collection标签详解

    一.前言 MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子. 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样. 如果能有一种数据库映射模式, ...

  7. mybatis中association和collection的column传入多个参数值

    在使用 association和collection 进行关联查询的时候 column 参数可能会有多个,如下: 注意: parameterType 一定要是 java.util.Map

  8. MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载

    一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...

  9. mybatis之关联关系

    前言:在我们之前的hibernate中我们是学过了关联关系的,所以我们在本章给讲一讲mybatis的关联关系. mybatis的关联关系一对多的测试1.通过逆向工程生成Hbook,HbookCateg ...

随机推荐

  1. IDEA常用操作(一)

    1.视图的调整 左下右的侧边栏如何关闭?——右击选择remove from sidebar 面板上(左下右)的导航栏视图如何隐藏——可以在左下角悬停显示,单击隐藏/开启侧边栏 想打开其它视图怎么办?— ...

  2. 使用 MySQL 存储 Hue 元数据

    1.在 MySQL 中增加数据库 hue 2.编辑 hue.ini 文件 [[database]] # Database engine is typically one of: # postgresq ...

  3. Nginx一直报504超时,配置相关参数好了

    相关参数:large_client_header_buffers 4 16k;client_max_body_size 30m;client_body_buffer_size 128k;proxy_c ...

  4. 2 web服务器:固定返回值

    1.老师给的思路 #tcp socket 服务端 socket = socket.socket() socket.bind() socket.listen() client_socket = sock ...

  5. spring、spring-data-redis整合使用

    一.Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 从2010年3月15日起,Redis的开发工作由VMwa ...

  6. java设计模式大全 Design pattern samples in Java(最经典最全的资料)

    java设计模式大全 Design pattern samples in Java(最经典最全的资料) 2015年06月19日 13:10:58 阅读数:11100 Design pattern sa ...

  7. 【数据结构】 List 简单实现

    public class XList<T> : IEnumerable, IEnumerator { #region List 简单实现 /// <summary> /// 存 ...

  8. 重写selenium 的 click()操作,使其变成隐式等待

    selenium 页面常会因为页面加载慢而出现element 不能被点击到的情况,比如加载过程中出现遮罩,导致element 可见不可点.以下方法重写click(),用隐式等待解决这个问题. 基本思路 ...

  9. Spring Cloud 自定义ConfigServer 解决敏感信息存储问题

    公司需要将系统配置信息中的敏感信息独立存放. 现有系统采用Spring Cloud Config提供配置信息,其中敏感信息主要是Db配置,分解本次需求: (1)数据库配置信息分离(主要是Db信息). ...

  10. Java课程设计--学生成绩管理系统

    一.团队名称: 团队成员 林艺薇 201721123032 网络1712 黄毓颖 201721123033 网络1712 唐川 201721123034 网络1712 梁才玉 201721123038 ...