先说一个声明,这个文章可能不完整,也就是说,我只是列举出了项目里面部分疑问难点,然后你们想做,可以去b站查看这个项目的视频。我这里会上传每一部分源代码
svn:
安装好svn服务器之后,我们需要去服务器建立一个仓库,保存我们的代码
服务器里面就会存在这样一个文件
之前在仓库的文件就会下载下来
文件是可以更新到指定的历史版本的
每一处提交都是有版本的
第一个版本
我们改一下,重新提交,也就是重新commit了一下
王五的版本还没有更新
与服务器内容更新
如何恢复到历史提交的指定版本
IDEA怎么配置svn版本控制
下面我们去服务器里面新建一个仓库来保存我们的项目
创建好了,复制一下这个仓库的地址
现在我们可以看到服务器下面没有代码
我们需要在IDEA里面把它提交一下
子父类模块依赖问题
在父工程的pom.xml里面引入了依赖,但是在子模块中没发现,检查一下有没有在子模块中插入如下父引用
web.xml配置问题
加载spring.xml的核心配置文件
各个模块的依赖关系
那么这个service模块的依赖也会被添加到当前模块里面
我们看一下service里面添加的依赖
dao里面添加上相应的注解,配置好sql语句
这个注解是通过spring.xml的文件扫描的
关于项目启动的问题
利用maven来运行项目
在我们运行项目的模块,我们这个项目也就是web里面,我们添加一个tomcat插件,来运行我们的项目
我们还要在IDEA里面配置一下项目的运行
运行之前,把整体的项目工程进行clean一下,然后重新发布到仓库去
Could not find artifact com.pxx.pxx-ssm1:pxx_ssm1_dao:jar:1.0-SNAPSHOT
如果出现这个问题就是没有打成jar包这个项目,我这是由于如下原因造成的
这个位置默认打成一个jar包运行
另外一个会出现的问题就是
然后把web运行模块也clean一下,然后install一下
运行
maven可能会打印控制台乱码问题
因为这里连接的是oracle的数据库,所以属性文件配置如下
重新测试运行
上面的状态与出发时间没有显示出来,但是数据库是有状态的
我们去到Product.java中去修改一下信息
重新清理一下当前模块项目与整个工程的项目(重新发布一下包)
下面我们需要去处理下日期,还是在Product.java里面进行处理
先在utils包里面写一个日期处理工具类
先在我们在进入到domain这个模块里面,处理Product.java代码
重新clean当前工程与整个项目工程打包,运行
前端页面修改的一些细节
这里拿到product-list.jsp来说
这个页面对应的是
头部页面与导航页面我们可以直接引入
上面可以改成我们想要的<th>表头信息
我们还可以添加两个我们需要的th头部
然后下面的th我们只留一个,然后采用jstl表达式进行循环处理
下面做的是访问直接跳转到首页
这个首页也就是一个main.jsp页面
主页需要一个图片
直接访问项目还是会进入如下页面
我们去修改一下index.jsp文件
现在去做产品添加页面
点击新建,它要跳转到某个页面去
这个页面又会去访问控制器里面的方法,控制器调用service,service调用dao里面的方法
现在我们去写控制器页面
上面在我们使用@Insert注解的时候,数据就是从前端传过来,交给了product对象
这里的插入语法如下
其实我想说一个问题
上面这个action的提交${pageContext.request.contextPath}不能省略,因为这个页面不是直接在webapp目录下面存放,也就是说虚拟目录是不能直接访问到的,必须获取到虚拟目录
关于服务器报400的一些问题
一般来说报这个错误的时候,出现的问题,就是前端传给后端的数据不匹配的问题
从某种成面来说,springMVC会给我们自动进行数据封装,也就是把前端数据中相应name与Product中的相应属性进行匹配
但是出现这个错误的时候,服务器又没有给我们报一个错误,这个时候我们先去加载一个日志
另外需要注意的是,我们需要开启事务管理,伊瓦涅毕竟是插入数据
加载完日志之后,就给我们报了一个数据类型不匹配的问题
使用一个局部注解来进行类型转换吧
另外当页面保存之后,我们就要去请求查询的控制器的方法去展示数据
订单详情的整体流程分析
这里注意控制器不再是product产品控制器,而是order控制器
先来说一下页面跳转问题,进入到服务器之后,页面首先会给我们跳转到main.jsp页面,也就是首页
首页左边引入一个导航栏
然后这个控制器会给我们直接跳转到列表展示页面
表结构分析与表创建
上面说错了product与member应该是主表,这里就是说,1个产品对应多个订单,1个会员也是对应多个订单
根据我们要去查询的订单详情信息我们去看一下
下面把建表语句给贴进去
drop table orders;
CREATE TABLE orders(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
orderNum VARCHAR2(20) NOT NULL UNIQUE,
orderTime timestamp,
peopleCount INT,
orderDesc VARCHAR2(500),
payType INT,
orderStatus INT,
productId varchar2(32),
memberId varchar2(32),
FOREIGN KEY (productId) REFERENCES product(id),
FOREIGN KEY (memberId) REFERENCES member(id)
)
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('0E7231DC797C486290E8713CA3C6ECCC', '12345', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '676C5BD1D35E429A8C2E114939C5685A', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('5DC6A48DD4E94592AE904930EA866AFA', '54321', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '676C5BD1D35E429A8C2E114939C5685A', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('2FF351C4AC744E2092DCF08CFD314420', '67890', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '12B7ABF2A4C544568B0A7C69F36BF8B7', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('A0657832D93E4B10AE88A2D4B70B1A28', '98765', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '12B7ABF2A4C544568B0A7C69F36BF8B7', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('E4DD4C45EED84870ABA83574A801083E', '11111', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '12B7ABF2A4C544568B0A7C69F36BF8B7', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('96CC8BD43C734CC2ACBFF09501B4DD5D', '22222', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '12B7ABF2A4C544568B0A7C69F36BF8B7', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('55F9AF582D5A4DB28FB4EC3199385762', '33333', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '9F71F01CB448476DAFB309AA6DF9497F', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('CA005CF1BE3C4EF68F88ABC7DF30E976', '44444', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '9F71F01CB448476DAFB309AA6DF9497F', 'E61D65F673D54F68B0861025C69773DB');
insert into ORDERS (id, ordernum, ordertime, peoplecount, orderdesc, paytype, orderstatus, productid, memberid)
values ('3081770BC3984EF092D9E99760FDABDE', '55555', to_timestamp('02-03-2018 12:00:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 2, '没什么', 0, 1, '9F71F01CB448476DAFB309AA6DF9497F', 'E61D65F673D54F68B0861025C69773DB');
-- 会员
drop table member;
CREATE TABLE member(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
NAME VARCHAR2(20),
nickname VARCHAR2(20),
phoneNum VARCHAR2(20),
email VARCHAR2(20)
);
insert into MEMBER (id, name, nickname, phonenum, email)
values ('E61D65F673D54F68B0861025C69773DB', '张三', '小三', '18888888888', 'zs@163.com');
-- 旅客
drop table traveller;
CREATE TABLE traveller(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
NAME VARCHAR2(20),
sex VARCHAR2(20),
phoneNum VARCHAR2(20),
credentialsType INT,
credentialsNum VARCHAR2(50),
travellerType INT
)
insert into TRAVELLER (id, name, sex, phonenum, credentialstype, credentialsnum, travellertype)
values ('3FE27DF2A4E44A6DBC5D0FE4651D3D3E', '张龙', '男', '13333333333', 0, '123456789009876543', 0);
insert into TRAVELLER (id, name, sex, phonenum, credentialstype, credentialsnum, travellertype)
values ('EE7A71FB6945483FBF91543DBE851960', '张小龙', '男', '15555555555', 0, '987654321123456789', 1);
-- 订单与旅客中间表
drop table order_traveller;
CREATE TABLE order_traveller(
orderId varchar2(32),
travellerId varchar2(32),
PRIMARY KEY (orderId,travellerId),
FOREIGN KEY (orderId) REFERENCES orders(id),
FOREIGN KEY (travellerId) REFERENCES traveller(id)
)
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('0E7231DC797C486290E8713CA3C6ECCC', '3FE27DF2A4E44A6DBC5D0FE4651D3D3E');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('2FF351C4AC744E2092DCF08CFD314420', '3FE27DF2A4E44A6DBC5D0FE4651D3D3E');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('3081770BC3984EF092D9E99760FDABDE', 'EE7A71FB6945483FBF91543DBE851960');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('55F9AF582D5A4DB28FB4EC3199385762', 'EE7A71FB6945483FBF91543DBE851960');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('5DC6A48DD4E94592AE904930EA866AFA', '3FE27DF2A4E44A6DBC5D0FE4651D3D3E');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('96CC8BD43C734CC2ACBFF09501B4DD5D', 'EE7A71FB6945483FBF91543DBE851960');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('A0657832D93E4B10AE88A2D4B70B1A28', '3FE27DF2A4E44A6DBC5D0FE4651D3D3E');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('CA005CF1BE3C4EF68F88ABC7DF30E976', 'EE7A71FB6945483FBF91543DBE851960');
insert into ORDER_TRAVELLER (orderid, travellerid)
values ('E4DD4C45EED84870ABA83574A801083E', 'EE7A71FB6945483FBF91543DBE851960');
说一个问题,我们在用oracle建表的时候,有时候会提示,表或者视图不存在,原因就是你在创建相关联的表的时候,比如这张表要引用另外一张表的主键,另外一张表如果不存在,就会出现这样的问题
下面先来做一个查询所有订单的操作,先把订单查询这条路打通
写一个orders相关的控制器
这里我们需要一个Orders订单相关的类,然后用于我们数据的封装
同时还需要额外的两个类,一个是Traveller类和Member类
Member
下面去完成service里面的findAll()方法,注意这个service不是ProductService里面的方法,而是IOrderService里面的
下面去把dao层给处理一下
在我们进行数据库查询的时候,在类里面不一定包含了完整的字段,我们做一个映射,或者springMVC给我们自动填充数据,有哪些字段,就填充哪些字段就可以了。
现在先去把查询所有订单展示出来
下面就要去IProductDao里面实现findById这个方法
我们去order-list.jsp页面看一下我们需要传递什么属性过去
现在我们要在这个页面去做查询产品详情
我们通过id去查询一个订单,里面还关联产品信息,会员信息,还有一个旅客信息
我们先去写导入一个产品展示的页面
现在去写控制器页面
去把service做了
去完成dao层
简单分析一下表与表之间的关系
现在要去做Member成员的相关操作,去写IMemberDao接口
现在去做ITravellerDao接口的sql处理
说一下订单表与旅客表之间的查询思路
现在去完成控制器页面Controller,之前的request属性还没有添加
去看一下前端页面怎么做的