5、 Hibernate实战之JaveEE网购整合
上接Hibernate查询与抓取策略(优化):https://blog.csdn.net/biggerchong/article/details/84402907
目录
5.2 创建Java web项目并映入Hibernate等jar包
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包
环境:MyEclipse10、JDK1.7、tomcat7.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_user、tb_goods与tb_car配置多对多关系;
tb_goods_type与tb_goods配置一对多关系。
在最后博主会提供整合前源码,整合后源码;大家可以常使着整合一下。在整合前的基础上引入Hibernate使数据库端整套流程更加清晰也更加适用。
一般的数据库后台开发都是采用model层和dao层,在model层中编写pojo类,在dao层编写数据库调用逻辑,在本次实战中博主本人采用model、dao、servlet、web来实现的,在model层编写持久化类,dao层利用Hibernate来编写数据库调用逻辑,servlet层来调用对应的逻辑并提供相应的数据给web层(jsp界面)。
本次实战知识做了基本整合,还有很多不足;优化之后还会更新更改整合后源码的。
5.8 问题与总结
虽然说在具有Hibernate的基本功的前提下整合起来难度系数不大,但是Hibernate的细节太多总是容易出错,这里就需要温习之前的内容来加深影响,这个过程中还是遇到一些坑,这里列举出来以便后续者警醒:
- 数据库命名不用大写字母,不用中文;采用小写+下划线命名;主键与对应外键区分命名。
- Lazy延迟加载的适应场合,如果你要从one的一方取得对应many的一方Set集,这时需要适用非延时加载,适用延迟加载会因为session失效导致无法取出Set集。
- Jsp中import类时,只能import在本jsp中使用过的类,否则会报Unable to compile class for JSP错误
- 遇到错误要学会看报错信息
大家有问题可以私聊我哟!
————谢谢阅读! ------知飞翀