###### 有关联关系的【多表对应实体类的编写步骤】+ssh注解。实例:crm实体编写过程

===【根据表结构写实体】。===表结构设计暂不考虑,一般都是项目经理设计好,给咱用。

步骤:先写出最基础的JavaBean。不考虑注解。

1.客户表、字典表。

===字典表

加注解前:

/**
 * 数据字典
 * @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;
 */
public class BaseDict {
 
	private String dictId;
	 
	private String dictName;
	 
	private String dictTypeCode;
	
	//===暂时没用字段 
	private Integer dictSort; 
	private Character dictEnable; 
	private String dictMemo;

	//==###=问题:
	//客户和联系人是一对多,加 List<Customer>属性
	//===字典和客户表 也是一对多啊。为什么 这里不需要添加 List<Customer>属性。?
	//==###=答案:
	//===【没有通过字典 操作 客户的需求】然而有通过客户操作联系人(级联删除)的需求。---如果有,比如级联删除,就必须加上。
	//==############=收获:【添加对象间依赖。必须要有操作这个对象属性的(crud)的需求】。
	//==######===【没有需求:操作字典表,并且根据字典表 操作客户。】所以这里不需要添加属性依赖。
	//==######===【有需求:操作客户表,并且根据客户表操作联系人(级联删除)。】所以这里不需要添加属性依赖。 
	//private Set<Customer> customers;
	
	//==############=收获:【需要选择的数据,都要单独建一张表,从表里查出来。】
	//===只是这里每张表只有一个有效字段,需要三张表,数据库设计 表太多。为了优化表结构,把三张表集成到一张表里(数据字典表))【不是为了增强了数据 复用性】
		
	


加注解后:

 
@Entity
@Table(name="base_dict")
public class BaseDict {

	@Override
	public String toString() {//===页面显示处理方式2.===方式1:多级属性调用(推荐)。
		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;
 
	//@OneToMany
	//private Set<Customer> customers;
	 
	

===客户表:

加注解前:

/**
 * 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
 *
 */
public class Customer {
	
	private Long custId;
	 
	private String custName;
	
	/* 
	private String custSource;
	 
	private String custIndustry;
	 
	private String custLevel;	*/
	
	//===提取到 字典表。===【下拉框选择内容(非自定义数据)都来自表】

	 
	private BaseDict custSource;
	 
	private BaseDict custIndustry;
	 
	private BaseDict custLevel;//===多的一方。

	private String custAddress; 
	private String custPhone;


加注解后:


@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;
	
	/*
	@Column(name="cust_source")
	private String custSource;
	
	@Column(name="cust_industry")
	private String custIndustry;
	
	@Column(name="cust_level")
	private String custLevel;	*/
	
	//===提取到 字典表。
	@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;

2.客户和联系人

===客户:

加注解前:

加注解后://===同上。


===联系人:

加注解前:

/**
 * 
 * @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;
 */
 
public class LinkMan {
	  
	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(外键)',
 
	private String lkmName;
	 
	private String lkmGender;
	 
	private String lkmPhone;
	 
	private String lkmMobile;
	 
	private String lkmEmail;
	 
	private String lkmPostion;
	 
	private String lkmMemo;
	 
	private Customer customer;


加注解后:


@Entity
@Table(name="cst_linkman")
public class LinkMan {
	@Id
	@Column(name="lkm_id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long lkmId;
	 
	@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属性==【不需要 targetEntity,这里封装过,通过属性类型也能获取到映射的类型】
	@JoinColumn(name="lkm_cust_id")//===外键。
	private Customer customer;


========================================

熟练自己根据表 编写实体类。应该是最基础的基本功了。也是项目的编码的第一件事。

===######=【最大的注意就是:实体属性除了表的字段。还在【实体间有关联操作的需求】时(例如根据客户  级联删除  联系人):添加关联对象的属性===set+get。

本质:通过对象名引用(地址)访问另一个对象数据。 】

===######=深刻理解:

这里没有 通过字典操作 客户的需求。所以,虽然字典和客户 是一对多。

但是字典类里就没有(不需要)客户类型的属性。






加注解前:

加注解后:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值