######纯注解ssh环境:crm系统实体类设计 ①客户信息的【数据字典】表的产生原因+②设计理解:【字典类没有添加客户属性的原因】=深刻理解类间关联,建立在有需求的基础上。
来源:互联网 发布:java工程师转行 编辑:程序博客网 时间:2024/06/05 23:05
纯注解ssh环境:crm系统
①客户信息的【数据字典】表的产生原因
===简化表设计。减少表个数
②设计理解:【字典类没有添加客户属性的原因】
===深刻理解类间关联,建立在有需求的基础上。
字典表的类:【仔细看类里的问题和解答】======【加深对实体类设计原则的理解】
package cn.itcast.crm.domain;import java.util.List;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;/** * 数据字典 * @author syl *创建数据字典表CREATE TABLE `base_dict` ( `dict_id` varchar(32) NOT NULL COMMENT '数据字典id(主键)', `dict_name` varchar(64) NOT NULL COMMENT '数据字典项目名称',//===三个有用字段 `dict_type_code` varchar(10) NOT NULL COMMENT '数据字典类别代码', `dict_type_name` varchar(64) NOT NULL COMMENT '数据字典类别名称', `dict_sort` int(10) DEFAULT NULL COMMENT '排序字段',//===暂时没用 `dict_enable` char(1) NOT NULL COMMENT '1:使用 0:停用',//===暂时没用 `dict_memo` varchar(64) DEFAULT NULL COMMENT '备注',//===暂时没用 PRIMARY KEY (`dict_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; */@Entity@Table(name="base_dict")public class BaseDict {@Overridepublic String toString() {return dictName;}@Id@Column(name="dict_id")//===String :只能手动设置。//===这里只涉及查询(字典),没有保存操作。所以这个主键是String需要手动设置才能保存 的问题还没出现。private String dictId;@Column(name="dict_name")private String dictName;@Column(name="dict_type_code")private String dictTypeCode;@Column(name="dict_sort")private Integer dictSort;@Column(name="dict_enable")private Character dictEnable;@Column(name="dict_memo")private String dictMemo;//==###=问题://客户和联系人是一对多,加 List<Customer>属性//===字典和客户表 也是一对多啊。为什么 这里不需要添加 List<Customer>属性。?//==###=答案://===【没有通过字典 操作 客户的需求】然而有通过客户操作联系人(级联删除)的需求。---如果有,比如级联删除,就必须加上。//==############=收获:【添加对象间依赖。必须要有操作这个对象属性的(crud)的需求】。//==######===【没有需求:操作字典表,并且根据字典表 操作客户。】所以这里不需要添加属性依赖。//==######===【有需求:操作客户表,并且根据客户表操作联系人(级联删除)。】所以这里不需要添加属性依赖。//@OneToMany//private Set<Customer> customers;//==############=收获:【需要选择的数据,都要单独建一张表,从表里查出来。】//===只是这里每张表只有一个有效字段,需要三张表,数据库设计 表太多。为了优化表结构,把三张表集成到一张表里(数据字典表))【不是为了增强了数据 复用性】public String getDictId() {return dictId;}public void setDictId(String dictId) {this.dictId = dictId;}public String getDictName() {return dictName;}public void setDictName(String dictName) {this.dictName = dictName;}public String getDictTypeCode() {return dictTypeCode;}public void setDictTypeCode(String dictTypeCode) {this.dictTypeCode = dictTypeCode;}public Integer getDictSort() {return dictSort;}public void setDictSort(Integer dictSort) {this.dictSort = dictSort;}public Character getDictEnable() {return dictEnable;}public void setDictEnable(Character dictEnable) {this.dictEnable = dictEnable;}public String getDictMemo() {return dictMemo;}public void setDictMemo(String dictMemo) {this.dictMemo = dictMemo;}}
==============================crm系统 就三个实体类。===涉及到表间关联。练习ssh整合后环境的使用。
客户类:package cn.itcast.crm.domain;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;/** * CREATE TABLE `cst_customer` ( `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)', `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源', `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业', `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别', `cust_address` varchar(128) DEFAULT NULL COMMENT '客户联系地址', `cust_phone` varchar(64) DEFAULT NULL COMMENT '客户联系电话', PRIMARY KEY (`cust_id`)) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8; * @author syl * */@Entity@Table(name="cst_customer")public class Customer {@Column(name="cust_id")@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Long custId;@Column(name="cust_name")private String custName;//===和字典 多对一@ManyToOne@JoinColumn(name="cust_source")private BaseDict custSource;@ManyToOne@JoinColumn(name="cust_industry")private BaseDict custIndustry;@ManyToOne@JoinColumn(name="cust_level")private BaseDict custLevel;@Column(name="cust_address")private String custAddress;@Column(name="cust_phone")private String custPhone;//===客户和联系人 一对多@OneToMany(mappedBy="customer")//==######=mappedBy属性只有一的一方有(代码提示可见)。总是一的一方放弃【外键关联维护】。(防止双向维护,残生多余的SQL)@Cascade({org.hibernate.annotations.CascadeType.DELETE})//==###=一的一方加上级联。就可以【通过一的一方操作多的一方】。//===【外键关联维护】mappedby属性,【级联(必须加另一方的属性)】@Cascade注解。----【二者没有关系】。private Set<LinkMan> linkMans;public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String getCustName() {return custName;}public void setCustName(String custName) {this.custName = custName;}public BaseDict getCustSource() {return custSource;}public void setCustSource(BaseDict custSource) {this.custSource = custSource;}public BaseDict getCustIndustry() {return custIndustry;}public void setCustIndustry(BaseDict custIndustry) {this.custIndustry = custIndustry;}public BaseDict getCustLevel() {return custLevel;}public void setCustLevel(BaseDict custLevel) {this.custLevel = custLevel;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}public String getCustPhone() {return custPhone;}public void setCustPhone(String custPhone) {this.custPhone = custPhone;}}
联系人类:
package cn.itcast.crm.domain;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;/** * * @author syl *CREATE TABLE `cst_linkman` ( `lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '联系人编号(主键)', `lkm_name` varchar(16) DEFAULT NULL COMMENT '联系人姓名', `lkm_gender` char(1) DEFAULT NULL COMMENT '联系人性别', `lkm_phone` varchar(16) DEFAULT NULL COMMENT '联系人办公电话', `lkm_mobile` varchar(16) DEFAULT NULL COMMENT '联系人手机', `lkm_email` varchar(64) DEFAULT NULL COMMENT '联系人邮箱', `lkm_position` varchar(16) DEFAULT NULL COMMENT '联系人职位', `lkm_memo` varchar(512) DEFAULT NULL COMMENT '联系人备注', `lkm_cust_id` bigint(32) NOT NULL COMMENT '客户id(外键)', PRIMARY KEY (`lkm_id`), KEY `FK_cst_linkman_lkm_cust_id` (`lkm_cust_id`), CONSTRAINT `FK_cst_linkman_lkm_cust_id` FOREIGN KEY (`lkm_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; */@Entity@Table(name="cst_linkman")public class LinkMan {@Id@Column(name="lkm_id")@GeneratedValue(strategy=GenerationType.IDENTITY)private Long lkmId;//`lkm_name` varchar(16) DEFAULT NULL COMMENT '联系人姓名',// `lkm_gender` char(1) DEFAULT NULL COMMENT '联系人性别',// `lkm_phone` varchar(16) DEFAULT NULL COMMENT '联系人办公电话',// `lkm_mobile` varchar(16) DEFAULT NULL COMMENT '联系人手机',// `lkm_email` varchar(64) DEFAULT NULL COMMENT '联系人邮箱',// `lkm_position` varchar(16) DEFAULT NULL COMMENT '联系人职位',// `lkm_memo` varchar(512) DEFAULT NULL COMMENT '联系人备注',// `lkm_cust_id` bigint(32) NOT NULL COMMENT '客户id(外键)',@Column(name="lkm_name")private String lkmName;@Column(name="lkm_gender")private String lkmGender;@Column(name="lkm_phone")private String lkmPhone;@Column(name="lkm_mobile")private String lkmMobile;@Column(name="lkm_email")private String lkmEmail;@Column(name="lkm_position")private String lkmPostion;@Column(name="lkm_memo")private String lkmMemo;@ManyToOne()//==没有mappedBy属性@JoinColumn(name="lkm_cust_id")private Customer customer;public Long getLkmId() {return lkmId;}public void setLkmId(Long lkmId) {this.lkmId = lkmId;}public String getLkmName() {return lkmName;}public void setLkmName(String lkmName) {this.lkmName = lkmName;}public String getLkmGender() {return lkmGender;}public void setLkmGender(String lkmGender) {this.lkmGender = lkmGender;}public String getLkmPhone() {return lkmPhone;}public void setLkmPhone(String lkmPhone) {this.lkmPhone = lkmPhone;}public String getLkmMobile() {return lkmMobile;}public void setLkmMobile(String lkmMobile) {this.lkmMobile = lkmMobile;}public String getLkmEmail() {return lkmEmail;}public void setLkmEmail(String lkmEmail) {this.lkmEmail = lkmEmail;}public String getLkmPostion() {return lkmPostion;}public void setLkmPostion(String lkmPostion) {this.lkmPostion = lkmPostion;}public String getLkmMemo() {return lkmMemo;}public void setLkmMemo(String lkmMemo) {this.lkmMemo = lkmMemo;}public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}}
阅读全文
0 0
- ######纯注解ssh环境:crm系统实体类设计 ①客户信息的【数据字典】表的产生原因+②设计理解:【字典类没有添加客户属性的原因】=深刻理解类间关联,建立在有需求的基础上。
- ###### 有关联关系的【多表对应实体类的编写步骤】+ssh注解。实例:crm实体编写过程
- CRM的客户增删改查的实体设计
- 数据字典的设计
- 数据字典的设计
- 数据字典的设计
- 客户需求与设计的差距
- 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因
- CRM笔记(4):对客户细分的理解
- hibernate 实体类生成表 表没有生成的原因
- ERP实施顾问--理解客户的解决方案与实际需求
- Python 字典的理解
- 客户对开发语言的选择原因
- 客户对物流企业不满意的原因
- 客户的真正需求
- 寻找客户的需求
- 设计和开发如何获取真实的客户产品需求
- 深入理解JavaScript没有重载的原因:
- android 让一个控件按钮居于底部的几种方法
- Okhttp框架搭建及拦截器
- 1009. 说反话 (20)
- 整洁代码之道——重构
- AngularJs的过滤器:filter、orderBy、date、currency、uppercase
- ######纯注解ssh环境:crm系统实体类设计 ①客户信息的【数据字典】表的产生原因+②设计理解:【字典类没有添加客户属性的原因】=深刻理解类间关联,建立在有需求的基础上。
- 第七周 项目 1
- 【makefile】一起写makefile(二)--总述
- 如何为公众号添加私教瑜伽课程微信预约系统
- springSecurity第一个入门Demo
- 333
- python内置函数
- 20171015算法学习总结
- 重构代码的7个阶段