######纯注解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
原创粉丝点击