淘淘商城4

今天:1.商品描述的保存(就是商品添加里面富文本编辑器里面的内容保存到数据库)  2.商品规格的添加及使用(i、使用多个表实现商品规格 ii、使用模板实现商品规格)

商品描述保存

每次打开maven工程有红X就把工程选中,右键Maven---->Update Project。maven编译的时候会出错,它会涉及到maven中的一些引用不是同时加载这些配置然后就有错误。虚拟机关键halt----终止命令

后台要接收前台页面提交的商品信息,及商品描述。商品信息保存还要保存商品描述。但是这个商品描述并不在商品信息表里面

为什么要把商品表和商品描述分开存储呢?因为商品描述是大文本信息,有时取商品只用展示商品信息,不用展示商品描述,把所有字段都取出来会浪费性能,电商里面强调的就是单表查询,以后分库分表时会把一个表的多个字段拆成多个表来存储就是为了提高查询效率的。

要存首先得接收

dao层

把商品信息保存到tb_item_desc表中。就是一个简单的插入。可以使用逆向生成的代码

service层

接收商品描述调用 dao 把商品描述插入到表中。

参数:String 商品描述

返回值:TaotaoResult(不知道返回值是什么就可以用这个返回值用来显示成功还是失败)

 调用不能在controller,在controller里面调用相当于两个事务了。

Controller层

之前提交表单时把表单内容和富文本编辑器做了同步,所以提交时多加一个富文本编辑器的name=desc即可

启动测试

把sql打印出来也可以,把第二天的log4j.properties这个文件扔到classpath下,再启动时它会自动加载然后打印出来很多信息,做处理也会打印信息。

商品规格的添加及使用

  什么是商品规格?对手机类来说规格是品牌,型号,颜色,上市时间,而对于服装类可能就是尺寸,颜色这些。也就有了同一类商品的规格项是一样的

规律:1、同一类商品的规格项相同(还是有一点不同),规格项和商品关联,规格项分组相同  2、不同商品规格参数的值是不同的

以后展示规格参数在网页上面,首先得把这些数据存进来吧(什么叫规格参数,就是规格项的值,即规格值),我们现在做后台,对后台的修改就会影响将来前台的网页。如何存进来是比较难的,想起来也是乱糟糟的。

实现方案一:使用多个表存储

上面的商品表与商品规格项是多对多的关系,中间表商品规格参数表把两者联系起来。上面的左边两张表已经有了,缺的就是剩下的三张表了。

重新建立一个数据库名字叫做mytest,使用第四天参考资料规格参数第一种解决方案.sql,创建出商品表(Tb_item)、商品分类表(Tb_item_cat)、一类中分组表(Tb_item_param_group)、一组中规格  项 表(Tb_item_param_value)这五张表。现在给出某个商品的id=12345,让查出它所有的规格  项  对于的规格值。

方案一存在的问题

实现方案二:使用模板思路解决

前面知道了商品分类决定了商品的分组情况,所以可以每个商品分类对应一个规格参数模板。生成一个表单

保存规格参数时,还可以生成规格参数的json数据,保存到数据库中。

1、首先用户生成一个模板并保存到数据库,告诉用户创建模板成功
2、维护商品时商品有一个商品分类,刚好商品分类与模板对应。由商品分类cid找到对应的模板,找到对应的json格式数据(表单呈现),然后你维护了规格参数(添加或删除参数后)再把生成的规格信息(json)写到规格信息表
3、将来用户访问商品详情页面时,根据商品信息取规格参数(取出来是json数据),然后把json转换成html展示给用户

这个也比较复杂,存储并不复杂,复杂在代码上面。需要把表单转换成json,把json转成表单再转成html。

数据库设计

现在表和表之间的的关系就很简单了,商品的规格参数只跟商品id有关系,模板只和商品分类有关。

优点:取的时候只需要单表取,不需要多表关联了。如果要求新添加商品规格项发生改变,之前的商品不变可以。

缺点:复杂的表单和json之间的转换。对js的编写要求很高。

下面对上面的时序图实现

创建规格参数模板(¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥)

上面只需把商品ID,商品类目,规格,创建日期,更新日期取出来展示出来就可以。我们只做  新增  功能。

规格参数和商品分类是对应的,一个商品分类对应一个规格参数模板。

代码过多,js跳转过多,各种跳转见笔记

这是一个restful风格的url

功能分析

请求url:/item/param/query/{itemcatid}  参数:itemCatId,从url中获得  返回值:TaotaoResult

Dao层

根据商品分类id查模板,就差模板表tb_item_param,查到了告诉你不用添加,没查到就添加。单表操作,可以使用逆向工程的代码

Service层

功能:接收商品分类id,调用mapper查询tb_item_param表,返回结果TaotaoResult。

Controller层

接收cid参数,调用Service查询规格参数模板。返回TaotaoResult。返回json数据(下面@Controller()@RequestMapper("/item/param"))做修改

jsp

测试

提交规格参数模板(¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥)

提交前,首先把页面中所有文本框中的内容转换成 json 数据。把 json 字符串提交给后台。保存到规格参数表中。看源码
上图,提交表单所以是post请求,后面跟参数,JSON.stringify的作用是把json格式的数据转换成字符串,它是js内置的方法(js对象一般都是json格式的数据)

Dao层

保存规格参数模板,向tb_item_param表添加一条记录。可以使用逆向工程生成的代码

Service层

功能:接收TbItemParam对象。把对象调用mapper插入到tb_item_param表中。返回TaotaoResult。

Controller层

功能:接收oid、规格参数模板。创建一TbItemParam对象。调用Service返回TaotaoResult。返回json

规格参数添加到数据库虽然完了但是也只是完成了   上面  时序图的第一个部分,后面还有三个(图框的有问题)。

根据规格参数模板生成表单

上面只是创建了一个模板,有了模板就要用模板。当我们添加商品时要把这个模板读出来,然后生成一个表单,供使用者添加规格参数,添加规格信息后保存成json到数据库。    可以理解一个商品对应一个模板,但是不是商品分类对应一个模板吗?商品是不是有分类,分类对应模板,所以商品对应模板

很显然这个功能应该在   商品添加    里面做,商品添加昨天已经做了,但也只是简单的把商品添加进去了,该商品的规格参数信息并没有在模板中

分析

上面的方法:item/param/query/itemcatid/ 已经写过了,只不过它只展示了选择类目,现在要增加一个商品规格参数只需要在原来方法上做修改(多再数据库中查询一次即可)

service层

虽然后台图片很难看,后台给自己人用的

生成表单后填写规格参数保存数据库

在提交表单之前要把这些规格参数生成一个json数据,然后跟商品的基本信息、商品描述同时提交给后台。保存至数据库。下面源码分析,以后遇到相似功能,可以参考(抄)这些代码

Dao层

需要向tb_item_param_item表中添加数据

service层

接收规格参数的内容和商品id。 拼装成pojo调用mapper的方法tb_item_param_item表中添加数据返回TaotaoResult。下面service中也要注入一个TbItemParamItem

表现层Controller

接收规格参数信息,调用Service层保存商品信息及商品描述及商品规格参数。返回TaotaoResult

测试成功

展示商品规格参数

 

展示商品详情页面的时候,把这些规格参数取出来,然后显示到商品页面上,当然这是前台功能,前台现在还没有实现,我们现在写一个jsp模拟一下。

当显示商品详情页面时,需要把商品的规格参数根据商品的id取出来,生成html展示到页面。

Dao层:根据商品id查询商品规格参数,单表查询,使用逆向工程生成的代码就可以了

Service层

接收商品id查询规格参数表。根据返回的规格参数生成html返回html。代码均略

controller层

 

posted @ 2019-10-14 15:49  键盘小侠  阅读(144)  评论(0编辑  收藏  举报