(七)mybatis之多对一关系(复杂)
一、需求分析
- 需求:查询所有消费者信息,关联查询订单及商品信息,订单明细信息中关联查询查商品信息。
- 分析:一个消费者有多条订单,一条订单只有一个消费者但是有多条订单明细,一条订单明细只有一个商品信息。
二、建数据库和实体对象




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&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&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之多对一关系(复杂)的更多相关文章
- MyBatis中多对多关系的映射和查询
先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使 ...
- (六)mybatis之多对一关系(简单)
一.需求分析 需求: 查询所有订单信息及订单下的订单明细信息 分析: 一条订单只能由一个消费者下单,但是一条订单有多条订单明细. 二.创建数据库表和实体对象 Customer.java ...
- mybatis多表查询之多对多关系查询的实现-xml方式
Mybatis对于多对多关系下的查询提供了集合(collection)的概念来解决,collection属性是resultMap高级结果映射的子集,首先,在本例中我们使用的是集合元素来解决多对多的查询 ...
- mybatis整合spring 之 基于接口映射的多对一关系
转载自:http://my.oschina.net/huangcongmin12/blog/83731 mybatis整合spring 之 基于接口映射的多对一关系. 项目用到俩个表,即studen ...
- Java基础-SSM之mybatis一对多和多对一关系映射
Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建customers表: ...
- 0051 MyBatis关联映射--多对多关系
用户与订单时一对多关系,再加上商品信息的话,订单与商品之间就是多对多关系了 DROP DATABASE IF EXISTS testdb; USE testdb; /*用户表,记录用户信息:用户与订单 ...
- MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载
一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...
- Hibernate框架学习(七)——多对多关系
一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 在User.hbm.xml中添加: 在Role.hbm.xml中添加(与上相反): 二.操作关联属性 1.保存员工及角色 pu ...
- ASP.NET Core中使用GraphQL - 第九章 在GraphQL中处理多对多关系
ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...
随机推荐
- pytest 基本用法
1.断言用assert,可以进行==,!=,+,-,*,/,<=,>=,is True.False,is not True.False ,in ,not in 等判断. import py ...
- github免费私有仓库使用
本文链接:https://blog.csdn.net/subfate/article/details/86147645github仓库前不久开放了个人私有仓库(原来要收费),个人使用无数量限制.对于想 ...
- Packetbeat简介
Packetbeat简介 抓包示例 下载packetbeat 抓取elasticsearch的包 ①启动elasticsearch 启动packetbeat 配置es.yml ############ ...
- memcache安装与简单介绍
本文参考自菜鸟教程中的内容. 安装 安装memcache的时候,请切换为root用户 root@centos # wget http://www.memcached.org/files/memcach ...
- @Component默认是单例还是多例?
@Component默认是单例还是多例? 答: @Component注解默认实例化的对象是单例,如果想声明成多例对象可以使用@Scope("prototype") @Repos ...
- 安装mycat
1.下载mycat 为了方便,我已经下载下来.我选择的版本是1.6版本 2.解压,安装在/home/xm6f/dev目录下 cd /home/xm6f/devtar -zxvf Mycat-serve ...
- QML之信号与槽
一.C++的信号和QML的槽 前言: Qt中的信号与槽,通常是一个信号SIGNAL和一个槽SLOT,通过connet连接,而QML中不需要再写槽函数,只需要在合适的地方告诉QML:如果x信号产生则执行 ...
- 123456---com.twoapp.ErTongNongChangPinTu---儿童农场拼图
com.twoapp.ErTongNongChangPinTu---儿童农场拼图
- 小程序下载canvas生成图片
save_share_img:function(img){ var that = this; let { result } = that.data; getData.getData( "sa ...
- Vue项目过程中遇到的小问题
1.给router-link添加点击事件 <router-link to="" @click.native=""></router-link& ...