Hibernate实战之JavaEE网购整合

版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/84475898

5、 Hibernate实战之JaveEE网购整合


上接Hibernate查询与抓取策略(优化):https://blog.csdn.net/biggerchong/article/details/84402907 

目录

5、 Hibernate实战之JaveEE网购整合

5.1 在db_shopping数据库下创建数据表

tb_user表(用户基本信息表):

tb_goods表(商品基本信息表)

tb_goods_type表(商品分类信息表)

tb_car(购物车信息表)

架构设计图:(存在一个一对多关联关系、一个多对多关联关系)

5.2 创建Java web项目并映入Hibernate等jar包

5.3 创建实体类(POJO)

UserInfo类

GoodsInfo类

GoodsType类

GoodsCar类(后期可能会用到,这里没用上)

5.4 创建Hibernate Session 工具类

5.5 创建映射文件

UserInfo.hbm.xml文件

GoodsType.hbm.xml文件

GoodsInfo.hbm.xml文件

5.6 创建Hibernate的核心映射文件

5.7 开始整合

5.8 问题与总结


5.1 在db_shopping数据库下创建数据表

tb_user表(用户基本信息表):

CREATE TABLE `tb_user` (

  `user_id` INT(11) NOT NULL AUTO_INCREMENT,

  `user_name` VARCHAR(20) NOT NULL,

  `user_pwd` VARCHAR(20) NOT NULL,

  `user_gender` CHAR(4) NOT NULL DEFAULT '男',

  `user_tel` CHAR(11)DEFAULT NULL,

  `user_address` VARCHAR(100) DEFAULT NULL,

  `user_type` INT(1) NOT NULL DEFAULT '0',

  PRIMARY KEY (`user_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

  

 录入少许数据便于之后测试

tb_goods表(商品基本信息表)

CREATE TABLE `tb_goods` (

  `goods_id` INT(2) NOT NULL,

  `goods_type_id` INT(2) NOT NULL,

  `goods_name` VARCHAR(12) NOT NULL,

  `goods_price` DECIMAL(8,2) NOT NULL,

  PRIMARY KEY (`goods_id`),

  FOREIGN KEY (`goods_type_id`) REFERENCES `tb_goods_type` (`type_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

 

tb_goods_type表(商品分类信息表)

CREATE TABLE `tb_goods_type` (

  `type_id` INT(2) NOT NULL,

  `type_name` VARCHAR(20) NOT NULL ,

  `type_icon` VARCHAR(20) DEFAULT NULL ,

  PRIMARY KEY (`type_id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

 

tb_car(购物车信息表)

CREATE TABLE `tb_car` (

  `car_id` INT(2) NOT NULL AUTO_INCREMENT,

  `car_user_id` INT(11) NOT NULL,

  `car_goods_id` INT(2) NOT NULL,

  PRIMARY KEY (`car_id`),

  FOREIGN KEY (`car_user_id`) REFERENCES `tb_user` (`user_id`),

 FOREIGN KEY (`car_goods_id`) REFERENCES `tb_goods` (`goods_id`)

) ENGINE=INNODB  DEFAULT CHARSET=utf8;

 

架构设计图:(存在一个一对多关联关系、一个多对多关联关系)

 

说明:在设计数据库时,避免适用大写字母、中文;尽量使用下划线来区分单词;外键与对应主键区分命名。(本人最开始使用大写命名,外键与对应主键命名一样;产生异常根本无从找起,Hibernate调用途中可能产生诡异事件,花了一下午最后还是乖乖按规范来命名,切记!)


5.2 创建Java web项目并映入Hibernate等jar包

环境:MyEclipse10JDK1.7tomcat7.x

 


5.3 创建实体类(POJO)

UserInfo类

GoodsInfo类

GoodsType类

 

GoodsCar类(后期可能会用到,这里没用上)

 

说明:以上都省略get/set方法,构造器(构造方法)


5.4 创建Hibernate Session 工具类


5.5 创建映射文件

UserInfo.hbm.xml文件

GoodsType.hbm.xml文件

GoodsInfo.hbm.xml文件

 


5.6 创建Hibernate的核心映射文件

                  节选关键部分


5.7 开始整合

整合过程采用

                   tb_usertb_goodstb_car配置多对多关系;

                   tb_goods_typetb_goods配置一对多关系。

 

         在最后博主会提供整合前源码,整合后源码;大家可以常使着整合一下。在整合前的基础上引入Hibernate使数据库端整套流程更加清晰也更加适用。

         一般的数据库后台开发都是采用model层和dao层,在model层中编写pojo类,在dao层编写数据库调用逻辑,在本次实战中博主本人采用model、dao、servlet、web来实现的,在model层编写持久化类,dao层利用Hibernate来编写数据库调用逻辑,servlet层来调用对应的逻辑并提供相应的数据给web层(jsp界面)。

        本次实战知识做了基本整合,还有很多不足;优化之后还会更新更改整合后源码的。


5.8 问题与总结

虽然说在具有Hibernate的基本功的前提下整合起来难度系数不大,但是Hibernate的细节太多总是容易出错,这里就需要温习之前的内容来加深影响,这个过程中还是遇到一些坑,这里列举出来以便后续者警醒:

  1. 数据库命名不用大写字母,不用中文;采用小写+下划线命名;主键与对应外键区分命名。
  2. Lazy延迟加载的适应场合,如果你要从one的一方取得对应many的一方Set集,这时需要适用非延时加载,适用延迟加载会因为session失效导致无法取出Set集。
  3. Jsp中import类时,只能import在本jsp中使用过的类,否则会报Unable to compile class for JSP错误
  4. 遇到错误要学会看报错信息

  大家有问题可以私聊我哟!


整合前源码上传至github:https://github.com/SCAsMessi/JavaStudy/tree/master/CSDN/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%8A%E6%A1%86%E6%9E%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/myWeb%20(Hibernate%E6%95%B4%E5%90%88%E5%89%8D)

整合后源码上传至github:https://github.com/SCAsMessi/JavaStudy/tree/master/CSDN/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%8A%E6%A1%86%E6%9E%B6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/myWeb%EF%BC%88Hibernate%E6%95%B4%E5%90%88%E5%90%8E%EF%BC%89

                                                                                   ————谢谢阅读!             ------知飞翀

猜你喜欢

转载自blog.csdn.net/biggerchong/article/details/84475898