0
商品订单数据模型
/*
SQLyog v10.2
MySQL - 5.1.72-community : Database - mybatis
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*Table structure for table `items` */
CREATE TABLE `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL COMMENT '商品名称',
`price` float(10,1) NOT NULL COMMENT '商品定价',
`detail` text COMMENT '商品描述',
`pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
`createtime` datetime NOT NULL COMMENT '生产日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*Table structure for table `orderdetail` */
CREATE TABLE `orderdetail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`orders_id` int(11) NOT NULL COMMENT '订单id',
`items_id` int(11) NOT NULL COMMENT '商品id',
`items_num` int(11) DEFAULT NULL COMMENT '商品购买数量',
PRIMARY KEY (`id`),
KEY `FK_orderdetail_1` (`orders_id`),
KEY `FK_orderdetail_2` (`items_id`),
CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
/*Table structure for table `orders` */
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '下单用户id',
`number` varchar(32) NOT NULL COMMENT '订单号',
`createtime` datetime NOT NULL COMMENT '创建订单时间',
`note` varchar(100) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `FK_orders_1` (`user_id`),
CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
/*Table structure for table `user` */
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` date DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
学会在企业中如何去分析陌生表的数据模型:
1
、学习单表记录了什么东西(去学习理解需求)
2
、学习单表重要字段的意义(优先学习不能为空的字段)
3
、学习表与表之间的关系(一对一、一对多、多对多)
通过表的外键分析表之间的关系
注意:分析表与表之间的关系时是要建立在具体
的业务意义基础之上
用户表
user
:
记录了购买商品的用户
订单表
orders
:
记录了用户所创建的订单信息
订单明细表orderdetail
:
记录了用户创建订单的详细信息
商品信息表items
:
记录了商家提供的商品信息
分析表与表之间的关系:
用户
user
和订单
orders
:
user---->orders
:一个用户可以创建多个订单 一对多
orders-->user
:一个订单只能由一个用户创建 一对一
订单
orders
和订单明细
orderdetail
:
orders-->orderdetail
:一个订单可以包括多个订单明细 一对多
orderdetail-->orders
:一个订单明细只属于一个订单 一对一
订单明细
orderdetail
和商品信息
items
:
orderdetail-->items
:一个订单明细对应一个商品信息 一对一
items--> orderdetail
:一个商品对应多个订单明细 一对多
1
一对一查询
1.1
需求
查询订单信息关联查询用户信息
1.2 sql
语句
查询语句:
先确定主查询表:订单信息表
再确定关联查询表:用户信息
通过
orders
关联查询用户使用
user_id
一个外键,只能关联查询出一条用户记录就可以使用内连接
SELECT
orders.*,
user.username,
user.sex
FROM
orders,
USER
WHERE orders.user_id = user.id
1.3
使用
resultType
实现
1.3.1
创建
po
类
基础的单表的
po
类:
1.3.2
一对一查询映射的
pojo
创建
pojo
包括 订单信息和用户信息,
resultType
才可以完成映射。
创建
OrderCustom
作为自定义
pojo
,继承
sql
查询列多的
po
类。
注意:记得提供set/get方法
1.3.3 mapper.xml
定义
mapper.xml
文件,
1.3.4 mapper.java
1.4
使用
resultMap
实现一对一
1.4.1 resultMap
映射思路
resultMap
提供一对一关联查询的映射和一对多关联查询映射,一对一映射思路:将关联查询的信息映射到
pojo
中,如下:
在
Orders
类中创建一个
User
属性,将关联查询的信息映射到
User
属性中。
注意:记得提供set/get方法
1.4.2 mapper.xml
1.4.3 resultMap
定义
1.4.4 mapper.java
1.5
小结
resultType
:要自定义
pojo
保证
sql
查询列和
pojo
的属性对应,这种方法相对较简单,所以应用广泛。
resultMap
:使用
association
完成一对一映射需要配置一个
resultMap
,过程有点复杂,如果要
实现延迟加载就只能用
resultMap
实现
,如果为了方便对关联信息进行解析,也可以用
association
将关联信息映射到
pojo
中方便解析。