(七)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 ...
随机推荐
- python笔记7 logging模块 hashlib模块 异常处理 datetime模块 shutil模块 xml模块(了解)
logging模块 日志就是记录一些信息,方便查询或者辅助开发 记录文件,显示屏幕 低配日志, 只能写入文件或者屏幕输出 屏幕输出 import logging logging.debug('调试模式 ...
- Android绘图通用第三方控件
https://github.com/ddanny/achartengine CodePull requests 2SecurityInsights Charting library fo ...
- 浅析angular,react,vue.js jQuery-1
作者:尚春链接:https://www.zhihu.com/question/38989845/answer/79201080来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- websphere 英文版部署(更新)项目【我】
websphere 部署(更新)项目 首先在控制台页面依次点左侧,打开应用配置页面: 然后在右侧勾选我们要重新部署的项目,首先点上面的 停止 按钮,等项目停止后,再勾选项目,点上面的 更新 按钮(如 ...
- MySQL高性能优化指导思路
MySQL架构图: 连接池组件.管理服务和工具组件.SQL接口组件.查询分析器组件.优化器组件.缓冲组件.插件式存储引擎.物理文件: 1.连接层:主要完成一些类似于连接处理,授权认证及相关的方案: 2 ...
- 上交所跨市场ETF申购赎回实时回报
申购赎回实时回报:1.二级市场过户记录(二级市场代码)2.沪市成分股过户记录(全部成分股)3.非沪市资金记录4.沪市资金记录5.ETF一级市场过户记录(一级市场代码)
- iOS技术面试05:UI控件
怎么解决缓存池满的问题 1> 优先移除使用次数比较少的对象 2> 优先移除缓存时间最长的对象(让年轻的活下来) 3> 优先移除占用内存比较大的对象 CAAnimation的层级结构 ...
- iOS-NSBundle、NSArray、NSDictionay
NSBundle.NSArray.NSDictionay 读取plist文件 NSDictionary *dict= [NSDictionary dictionaryWithContentsOfFi ...
- swift 屏幕的翻转 + 状态栏(statusBar)的隐藏
1.状态栏的隐藏 这个问题是基于 UIApplication.shared.isStatusBarHidden = true; 调用居然是无效的…… 现在写下自己的代码,用来备忘吧…… 1.首先需要复 ...
- conda换源
装完Anaconda后,建议更新所有的包,因为以后使用很可能会报错. 而更新的时候conda的官方源在美国,不换源就非常蓝瘦,有生之年够呛了. 换源: conda config --add chann ...