JavaBean实体类处理外键过程解析
更新时间:2020年7月30日 09:51 点击:2279
数据库中的表在映射为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语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
- 以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
- 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03