一、需求分析

  • 需求:查询所有消费者信息,关联查询订单及商品信息,订单明细信息中关联查询查商品信息。
  • 分析:一个消费者有多条订单,一条订单只有一个消费者但是有多条订单明细,一条订单明细只有一个商品信息。

二、建数据库和实体对象

Customer.java

package com.shyroke.entity;

import java.util.List;

public class Customer {
private int id;
private String name;
private String sex;
private String birthday;

//一个消费者有多条订单
private List<Order> orderList; //隐藏get和set方法
Order.java
package com.shyroke.entity;

import java.util.List;

public class Order {
private int orderId;
private String Number;
private String createTime;
private String note; // 关联消费者信息,是一对一关系
private Customer customer; // 关联订单明细信息,是一对多关系
private List<OrderDesc> orderDescList;
//隐藏get和set方法
}

OrderDesc.java

package com.shyroke.entity;

import java.lang.annotation.Inherited;

public class OrderDesc {
private int id;
private String num;
private String itemsId;
private String ordersId; //关联商品信息,一对一关系
private Items item;
//隐藏get和set方法
}
Items.java
package com.shyroke.entity;

public class Items {
private int id;
private String name;
private String time;
//隐藏get和set方法
}

三、创建 CustomerMapper.java接口和 CustomerMapper.xml文件

CustomerMapper.java

package com.shyroke.mapper;

import java.util.List;

import com.shyroke.entity.Customer;

public interface CustomerMapper {
public List<Customer> selectCustomAllInfo();
}

CustomerMapper.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="com.shyroke.mapper.CustomerMapper">
<resultMap type="com.shyroke.entity.Customer" id="customerMap">
<id column="user_id" property="id" />
<result column="user_name" property="name" />
<result column="user_sex" property="sex" />
<result column="user_birthday" property="birthday" />

<!-- Customer的成员属性orderList,即一个Customer消费者含有多个Order订单 -->
<collection property="orderList" ofType="com.shyroke.entity.Order">
<id column="order_id" property="orderId" />
<result column="order_number" property="Number" />
<result column="order_createTime" property="createTime" />
<result column="order_note" property="note" />

<!-- Order的成员属性orderDescList,即一个Order订单含有多个OrderDesc订单明细 -->
<collection property="orderDescList" ofType="com.shyroke.entity.OrderDesc">
<id column="orders_desc_id" property="id" />
<result column="orders_desc_num" property="num" />
<result column="orders_desc_items_id" property="itemsId" />
<result column="orders_desc_orders_id" property="ordersId" />

<!-- OrderDesc的成员属性item,即一个OrderDesc订单对应一个Items商品 -->
<association property="item" javaType="com.shyroke.entity.Items">
<id column="item_id" property="id" />
<result column="item_name" property="name" />
<result column="item_time" property="time" />
</association>
</collection>
</collection>
</resultMap> <select id="selectCustomAllInfo" resultMap="customerMap">
select
customer.*,item.*,orders.*,ordersDesc.*
from
customer,item,orders,ordersDesc
where
orders.user_id=customer.user_id and ordersDesc.orders_desc_orders_id=orders.order_id
and ordersDesc.orders_desc_items_id=item.item_id
</select> </mapper>

四、添加mapper到总配置文件

mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments> <mappers>
<mapper class="com.shyroke.mapper.CustomerMapper"/>
</mappers> </configuration>

五、测试

package com.shyrolk.firstMybatis;

import java.awt.image.ImageProducer;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import javax.swing.plaf.synth.SynthSeparatorUI; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.shyroke.entity.Customer;
import com.shyroke.entity.Order;
import com.shyroke.mapper.CustomerMapper; /**
* Hello world!
*
*/
public class App {
public static void main(String[] args) throws IOException {
String resource = "resource/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sessionFactory.openSession(); CustomerMapper customerMapper = session.getMapper(CustomerMapper.class);
List<Customer> customersList = customerMapper.selectCustomAllInfo(); System.out.println(customersList); }
}

(七)mybatis之多对一关系(复杂)的更多相关文章

  1. MyBatis中多对多关系的映射和查询

    先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使 ...

  2. (六)mybatis之多对一关系(简单)

    一.需求分析 需求:   查询所有订单信息及订单下的订单明细信息 分析:      一条订单只能由一个消费者下单,但是一条订单有多条订单明细. 二.创建数据库表和实体对象 Customer.java ...

  3. mybatis多表查询之多对多关系查询的实现-xml方式

    Mybatis对于多对多关系下的查询提供了集合(collection)的概念来解决,collection属性是resultMap高级结果映射的子集,首先,在本例中我们使用的是集合元素来解决多对多的查询 ...

  4. mybatis整合spring 之 基于接口映射的多对一关系

    转载自:http://my.oschina.net/huangcongmin12/blog/83731 mybatis整合spring 之  基于接口映射的多对一关系. 项目用到俩个表,即studen ...

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

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

  6. 0051 MyBatis关联映射--多对多关系

    用户与订单时一对多关系,再加上商品信息的话,订单与商品之间就是多对多关系了 DROP DATABASE IF EXISTS testdb; USE testdb; /*用户表,记录用户信息:用户与订单 ...

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

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

  8. Hibernate框架学习(七)——多对多关系

    一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 在User.hbm.xml中添加: 在Role.hbm.xml中添加(与上相反): 二.操作关联属性 1.保存员工及角色 pu ...

  9. ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系

    ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...

随机推荐

  1. 解决跨操作系统平台JSON中文乱码问题

    解决跨操作系统平台JSON中文乱码问题 LINUX统一使用utf-8编码,WINDOWS却不是. LINUX中间件,传输JSON给WINDOWS程序,会乱码. 解决办法: 对JSON字段是字符串类型的 ...

  2. BAT文件运行时不显示命令窗口的方法

    可以编一个VBS文件调用BAT文件,使运行BAT文件时不显示命令窗口. 新建一个记事本文件,保存为abc.vbs,在文件中加入如下代码: Set shell = Wscript.createobjec ...

  3. Bitmap添加水印效果

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  4. 005-多线程-集合-Map-ConcurrentSkipListMap

    一.概述 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景. ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表.但是,第一,它 ...

  5. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_16-课程预览功能开发-接口测试

    cms和课程的微服务重启 从数据库内找一条数据 进入到了断点 拼装课程信息 ,然后进行远程调用 抛出异常 可能是开了两个cms服务的事,负载均衡 到了另外一个服务里面 ,关掉一个 把02关掉,重启cm ...

  6. 算法习题---4-3黑白棋(UVa220)

    一:题目 系统提示当前旗手W/B(白/黑)下子,例如W下子,那么W下的位置必须是夹住黑色棋子的位置才可以. 夹住方式:横向.竖向.斜向 注意落子后将夹住的黑棋吞噬变为白棋 (一)题目详解 .棋盘以数组 ...

  7. Python基于正则表达式实现文件内容替换的方法

    Python基于正则表达式实现文件内容替换的方法 本文实例讲述了Python基于正则表达式实现文件内容替换的方法.分享给大家供大家参考,具体如下: 最近因为有一个项目需要从普通的服务器移植到SAE,而 ...

  8. LeetCode_171. Excel Sheet Column Number

    171. Excel Sheet Column Number Easy Given a column title as appear in an Excel sheet, return its cor ...

  9. react Link标签 火狐失效怎么解决

    这个问题其实找了好多资料都没有具体的解决方法: 今天突然想到可能是层级嵌套出问题了,刚好有个bug也是关于这个的,已经亲测解决了 代码如下:火狐和谷歌都能正常的跳转 <Link to=" ...

  10. wordpress可以自定义获取相关文章的代码

    将下面的代码插入functions.php中 获取相关文章的策略: 手动指定 > 标签 >分类 > 随机 //相关文章 function add_related_posts($con ...