JavaBean实体类处理外键过程解析

 更新时间:2020年07月30日 08:30:48   作者:-超级菜鸟-  
这篇文章主要介绍了JavaBean实体类处理外键过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

数据库中的表在映射为JavaBean的实体类时,实体类的字段名应与数据库表中的字段名一致。那么外键要怎么处理?

1. JavaBean中实体类中不应该出现外键字段,弊端如下 :

如果出现外键对应的字段,那么将会出现一个对象与另一个对象的属性相对应,这将不是面向对象中的对象与对象对应。

单个外键只能存储一个字符串,用处不大

2.外键处理方式 :数据库表中的外键字段应当转换成外键对应的表的对象,也就是JavaBean的实体类不声明外键的字段,而是声明外键对应数据表类的类型。举个例子,如下 :

数据库建表如下 :

-- 1.1 创建用户表
CREATE TABLE `user` (
 `uid` varchar(32) NOT NULL, #用户编号
 `username` varchar(20) DEFAULT NULL,   #用户名
 `password` varchar(20) DEFAULT NULL,   #密码
 `name` varchar(20) DEFAULT NULL,     #昵称
 `email` varchar(30) DEFAULT NULL,     #电子邮箱
 `telephone` varchar(20) DEFAULT NULL,   #电话
 `birthday` date DEFAULT NULL,       #生日
 `sex` varchar(10) DEFAULT NULL,      #性别
 `state` int(11) DEFAULT 0,        #状态:0=未激活,1=已激活
 `code` varchar(64) DEFAULT NULL,     #激活码
 PRIMARY KEY (`uid`)
) ENGINE=InnoDB ;
 
-- 2.1 创建分类表
CREATE TABLE `category` (
 `cid` varchar(32) NOT NULL,
 `cname` varchar(20) DEFAULT NULL, #分类名称
 PRIMARY KEY (`cid`)
) ENGINE=InnoDB ;
 
-- 3.1 创建商品表
CREATE TABLE `product` (
 `pid` varchar(32) NOT NULL,
 `pname` varchar(50) DEFAULT NULL,   #商品名称
 `market_price` double DEFAULT NULL,  #市场价
 `shop_price` double DEFAULT NULL,   #商城价
 `pimage` varchar(200) DEFAULT NULL,  #商品图片路径
 `pdate` date DEFAULT NULL,      #上架时间
 `is_hot` int(11) DEFAULT NULL,    #是否热门:0=不热门,1=热门
 `pdesc` varchar(255) DEFAULT NULL,  #商品描述
 `pflag` int(11) DEFAULT 0,      #商品标记:0=未下架(默认值),1=已经下架
 `cid` varchar(32) DEFAULT NULL,    #分类id
 PRIMARY KEY (`pid`),
 KEY `product_fk_0001` (`cid`),
 CONSTRAINT `product_fk_0001` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`)
) ENGINE=InnoDB ;
 
-- 4 创建订单表
CREATE TABLE `order` (
 `oid` varchar(32) NOT NULL,
 `ordertime` datetime DEFAULT NULL,    #下单时间
 `total` double DEFAULT NULL,       #总价
 `state` int(11) DEFAULT NULL,       #订单状态:1=未付款;2=已付款,未发货;3=已发货,没收货;4=收货,订单结束
 `address` varchar(30) DEFAULT NULL,    #收获地址
 `name` varchar(20) DEFAULT NULL,     #收获人
 `telephone` varchar(20) DEFAULT NULL,   #收货人电话
 `uid` varchar(32) DEFAULT NULL,
 PRIMARY KEY (`oid`),
 KEY `order_fk_0001` (`uid`),
 CONSTRAINT `order_fk_0001` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`)
) ENGINE=InnoDB ;
 
-- 5 创建订单项表
CREATE TABLE `orderitem` (
 `itemid` varchar(32) NOT NULL,
 `quantity` int(11) DEFAULT NULL,     #购买数量
 `total` double DEFAULT NULL,     #小计
 `pid` varchar(32) DEFAULT NULL,    #购买商品的id
 `oid` varchar(32) DEFAULT NULL,    #订单项所在订单id
 PRIMARY KEY (`itemid`),
 KEY `order_item_fk_0001` (`pid`),
 KEY `order_item_fk_0002` (`oid`),
 CONSTRAINT `order_item_fk_0001` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`),
 CONSTRAINT `order_item_fk_0002` FOREIGN KEY (`oid`) REFERENCES `order` (`oid`)
) ENGINE=InnoDB ;

其中订单与订单项的JavaBean的实体类如下 :

/**
 * 订单项
 */
public class OrderItem {
 
  private String itemid ;   // 订单项编号
  private Integer quantity;    // 购买数量
  private Double total;  // 小计
 
  private Product product ;  // 商品对象
  private Order order ;    // 订单项所在订单对象
  ......
}
 
/**
 * 订单实体类
 */
public class Order {
   
  private String oid ;    // 订单编号
  private Date ordertime; // 下单时间
  private Double total ;   // 总价
  private Integer state ;   // 订单状态 : 1 : 未付款 2 : 已付款,未发货  3 :已发货,未收货  4: 已收货,订单结束
  private String address ;  // 收货地址
  private String name ;    // 收件人姓名 : 收件人不一定是购买人
  private String telephone ; // 收件人电话
 
  private User user ;     // 订单所属的用户
   
  private List<OrderItem> list = new ArrayList<>() ; // 订单项集合
  ......
}

这样做的优点如下 :

  • 程序对象和对象产生关系,而不是对象(Order的对象)和对象的属性(User对象的uid)产生关系
  • 设计Order的目的 : 让order携带订单上的数据向service层,dao层传递,user对象是可以携带更多的数据的
  • 程序中体现订单对象和订单项对象之间的关系,项目中的部分功能中有类似的需求 : 查询订单的同时,还要获取订单下所有的订单项

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java如何实现Unicode和中文相互转换

    Java如何实现Unicode和中文相互转换

    这篇文章主要介绍了Java如何实现Unicode和中文相互转换问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解SpringBoot中的参数校验(项目实战)

    详解SpringBoot中的参数校验(项目实战)

    这篇文章主要介绍了SpringBoot中的参数校验,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java利用布隆过滤器实现快速检查元素是否存在

    Java利用布隆过滤器实现快速检查元素是否存在

    布隆过滤器是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。本文就来详细说说实现的方法,需要的可以参考一下
    2022-10-10
  • Spring Boot开箱即用可插拔实现过程演练与原理解析

    Spring Boot开箱即用可插拔实现过程演练与原理解析

    本文通过深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟了Spring Boot的启动过程和自动配置功能,为开发者提供了一个全面的理解,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Spring Boot超详细讲解请求处理流程机制

    Spring Boot超详细讲解请求处理流程机制

    SpringBoot是一种整合Spring技术栈的方式(或者说是框架),同时也是简化Spring的一种快速开发的脚手架,本篇让我们一起分析请求处理流程机制
    2022-07-07
  • java Quartz定时器任务与Spring task定时的几种实现方法

    java Quartz定时器任务与Spring task定时的几种实现方法

    本篇文章主要介绍了java Quartz定时器任务与Spring task定时的几种实现方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • Jmeter工作原理及常见错误解析

    Jmeter工作原理及常见错误解析

    这篇文章主要介绍了Jmeter工作原理及常见错误解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • JavaWeb学习笔记分享(必看篇)

    JavaWeb学习笔记分享(必看篇)

    下面小编就为大家带来一篇JavaWeb学习笔记分享(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 解读Jvm的内存结构与GC及jvm参数调优

    解读Jvm的内存结构与GC及jvm参数调优

    这篇文章主要介绍了解读Jvm的内存结构与GC及jvm参数调优方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • DTD验证xml格式的三种方式详解

    DTD验证xml格式的三种方式详解

    这篇文章主要介绍了DTD验证xml格式的三种方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论