淘淘商城4

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

商品描述保存

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

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

为何要把商品表和商品描述分开存储呢?由于商品描述是大文本信息,有时取商品只用展现商品信息,不用展现商品描述,把全部字段都取出来会浪费性能,电商里面强调的就是单表查询,之后分库分表时会把一个表的多个字段拆成多个表来存储就是为了提升查询效率的。json

要存首先得接收restful

dao层app

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

service层数据库设计

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

参数:String 商品描述编辑器

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

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

Controller层

以前提交表单时把表单内容和富文本编辑器作了同步,因此提交时多加一个富文本编辑器的name=desc便可

启动测试

把sql打印出来也能够,把次日的log4j.properties这个文件扔到classpath下,再启动时它会自动加载而后打印出来不少信息,作处理也会打印信息。

商品规格的添加及使用

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

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

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

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

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

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

方案一存在的问题

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

前面知道了商品分类决定了商品的分组状况,因此能够每一个商品分类对应一个规格参数模板。生成一个表单

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

一、首先用户生成一个模板并保存到数据库,告诉用户建立模板成功
二、维护商品时商品有一个商品分类,恰好商品分类与模板对应。由商品分类cid找到对应的模板,找到对应的json格式数据(表单呈现),而后你维护了规格参数(添加或删除参数后)再把生成的规格信息(json)写到规格信息表
三、未来用户访问商品详情页面时,根据商品信息取规格参数(取出来是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层

 

相关文章
相关标签/搜索