Mybatis系列之实战篇(上)

Mybatis系列之实战篇(上)引言

经过前面的学习(本文最后有前面文章的链接,小伙伴们可以根据需要自行阅读),我们需要一个实际的项目来练练手,对掌握的知识做进一步的巩固和沉淀。

术语介绍

本文以一个实际电商项目上中的客户管理模块作为讲解案例。在正文开始前,先约定一些术语,这些术语在后面的讲解中会频繁出现,所以希望小伙伴发用两分钟的时间看一下,这对后面的阅读会有很大帮助。

Party

我们将一个集团客户的主要信息抽象提取出来,称之为Party。每个Party下允许有多个Code。

Code

客户代码,每个集团客户允许有一个或多个Code。客户在系统中制作采购订单时,是以Code为实际操作者,也就是说每个采购订单必须有且仅有一个Code。每个Code对应着我们一个生产工厂。

Plant

生产工厂,每个生产工厂提供的产品不同,客户要购买某个工厂的商品,必须有一个与之对应的Code。

Location

客户地点,由Address和Purpose组合而成。每个Code下允许有多个用途不同的地点,限制如下:

Address

地址。实际的物理地址,有省、市、区、街道等信息组成。一个Address可以有搭配不同的用途(Purpose)组成不同的客房地点Location。

Purpose

地址用途。这是一个附加的信息,用于标识出地点的用途,比如注册地、收货地、发票寄送地等。

数据库实体关系图

数据库DDLCREATE TABLE `addr_province` ( `province_id` int(4) NOT NULL AUTO_INCREMENT, `province_name` varchar(64) NOT NULL, `is_valid` tinyint(4) NOT NULL DEFAULT ‘1’, `created_time` datetime NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`province_id`), KEY `province_name` (`province_name`)) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COMMENT=’省份表’;CREATE TABLE `addr_city` ( `city_id` int(4) NOT NULL AUTO_INCREMENT, `city_name` varchar(64) NOT NULL, `province_id` int(4) NOT NULL, `is_valid` tinyint(4) NOT NULL DEFAULT ‘1’, `created_time` datetime NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`city_id`), KEY `province_id` (`province_id`), KEY `city_name` (`city_name`), CONSTRAINT `sys_city_ibfk_1` FOREIGN KEY (`province_id`) REFERENCES `addr_province` (`province_id`)) ENGINE=InnoDB AUTO_INCREMENT=387 DEFAULT CHARSET=utf8 COMMENT=’城市表’;CREATE TABLE `addr_area` ( `area_id` int(4) NOT NULL AUTO_INCREMENT, `area_name` varchar(64) NOT NULL, `city_id` int(4) NOT NULL, `is_valid` tinyint(4) NOT NULL DEFAULT ‘1’, `created_time` datetime NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`area_id`), KEY `city_id` (`city_id`), KEY `area_name` (`area_name`), CONSTRAINT `sys_area_ibfk_1` FOREIGN KEY (`city_id`) REFERENCES `addr_city` (`city_id`)) ENGINE=InnoDB AUTO_INCREMENT=3124 DEFAULT CHARSET=utf8 COMMENT=’地区表’;CREATE TABLE `address` ( `address_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `province_id` int(10) unsigned NOT NULL, `city_id` int(10) unsigned NOT NULL, `area_id` int(10) unsigned NOT NULL, `street` varchar(128) NOT NULL, `zip_code` varchar(16) DEFAULT NULL, `contact_person` varchar(32) DEFAULT NULL, `tel` varchar(32) DEFAULT NULL, `fax` varchar(32) DEFAULT NULL, `cell_phone` varchar(32) DEFAULT NULL, `email` varchar(128) DEFAULT NULL, `is_valid` tinyint(4) NOT NULL DEFAULT ‘1’, `created_time` datetime NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`address_id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT=’地址表’;CREATE TABLE `addr_purpose` ( `purpose_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `purpose_name` varchar(255) NOT NULL, `is_valid` tinyint(4) NOT NULL DEFAULT ‘1’, `created_time` datetime NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`purpose_id`), UNIQUE KEY `purpose_name` (`purpose_name`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT=’地址用途表’;CREATE TABLE `customer_party` ( `party_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `party_name` varchar(128) DEFAULT NULL, `country` varchar(32) DEFAULT NULL, `area` varchar(32) DEFAULT NULL, `is_valid` tinyint(4) DEFAULT ‘1’, `created_time` datetime DEFAULT NULL, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`party_id`), UNIQUE KEY `party_name` (`party_name`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT=’客户Party主表’;CREATE TABLE `customer_code` ( `code_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `customer_code` varchar(8) DEFAULT NULL COMMENT ‘客户代码’, `plant_id` int(10) unsigned NOT NULL, `party_id` int(10) unsigned DEFAULT NULL, `is_valid` tinyint(4) DEFAULT ‘1’, `created_time` datetime DEFAULT NULL, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`code_id`), KEY `plant_id` (`plant_id`), KEY `party_id` (`party_id`), CONSTRAINT `customer_code_ibfk_1` FOREIGN KEY (`plant_id`) REFERENCES `plant` (`plant_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `customer_code_ibfk_2` FOREIGN KEY (`party_id`) REFERENCES `customer_party` (`party_id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT=’客户代码表’;CREATE TABLE `customer_location` ( `location_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `code_id` int(10) unsigned DEFAULT NULL, `address_id` int(10) unsigned DEFAULT NULL, `purpose_id` int(10) unsigned DEFAULT NULL, `is_valid` tinyint(4) DEFAULT ‘1’, `created_time` datetime DEFAULT NULL, `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`location_id`), UNIQUE KEY `code_id` (`code_id`,`address_id`,`purpose_id`), KEY `address_id` (`address_id`), KEY `code_id_2` (`code_id`), KEY `purpose_id` (`purpose_id`), CONSTRAINT `customer_location_ibfk_1` FOREIGN KEY (`code_id`) REFERENCES `customer_code` (`code_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `customer_location_ibfk_2` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `customer_location_ibfk_3` FOREIGN KEY (`purpose_id`) REFERENCES `addr_purpose` (`purpose_id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT=’客户地址表’;

鉴于这是一个实际的项目,有些设计字段不方便公开,所以这里仅仅使用最基础的字段。

项目目录结构我没有值得分享的感伤爱情故事,

Mybatis系列之实战篇(上)

相关文章:

你感兴趣的文章:

标签云: