第三个选项卡涉及到了我们的手机属性,因此,还是需要用到我们其他的数据库表:EB_FEATURE
继续做逆向工程:
查询出普通属性和特殊属性:
/***继承SqlSessionDaoSupport能够得到sessionFactory的引用,非常方便!*/@RepositorypublicclassEbFeatureDaoImplextendsSqlSessionDaoSupportimplementsEbFeatureDao{StringnameSpace="com.rl.ecps.sqlMap.EbFeatureMapper.";publicList
@ServicepublicclassEbFeatureServiceImplimplementsEbFeatureService{@AutowiredprivateEbFeatureDaofeatureDao;publicList
/***跳转到添加商品页面**@return*/@RequestMapping("/toAddItem.do")publicStringtoAddItem(Modelmodel){List
想要把我们在页面上选定的基本属性进行保存的话,我们是使用另一张表来进行保存的。Featrue表仅仅保存了相对应的属性,是不做保存功能的!
因此,我们需要对EB_PARA_VALUE做逆向工程!
我们参数表的主键是不需要被其他的表用的,因此我们直接使用序列来管理进行的。并不需要主键返回
我们将JSP页面的name属性都设置为我们的featureId
由于我们该页面上的数据都是从数据库中查询出来的,数据库中的记录有多少,在页面上显示的就有多少
因此,我们可以这么干:
代码:
来到我们的最小库存单元选项卡,我们是需要把我们的特殊属性查询出来的,供用户选择。
查询出特殊属性:
当我们想点击增加规格的时候,就应该多那么一个div在页面上显示!那为什么我们需要多个规格呢??如下所示:
对该按钮添加单击事件
//实现页面规格的自动增加和删除$("#button2").click(function(){//得到想要控件div所有的内容,不包含自己的标签varhtmlDiv=$("#sp_0").html();//把自己的标签包含进去htmlDiv="
原因就是出在:
那么我们使用一个变量值,让每次的name属性都不一样即可!
functionclickRemove(id){vara=$(".sp_0").length;if(a==1){alert("默认规格不可删除");return;}}最小库存单元属性存放我们的最小库存单元涉及到了两张数据库表:
首先我们来做逆向工程:
设置SKU有一个集合来保存所有的特殊属性值:
privateList
到目前为止,我们4个选项卡的数据都可以拿到了。因此,我们可以把Item所需要的对象存入数据库了..
dao层编写
publicvoidsaveItem(EbItemebItem){this.getSqlSession().insert(nameSpace+"insert",ebItem);}service层编写:
publicvoidsaveItem(EbItemebItem,EbItemClobclob,List
SELECT*fromEB_ITEMWHEREITEM_ID=3073SELECT*fromEB_SKUwhereITEM_ID=3073SELECT*fromEB_PARA_VALUEWHEREITEM_ID=3073SELECT*fromEB_SPEC_VALUEWHERESKU_ID=3060商品审核接下来我们做的是商品审核的功能:
我们到修改url的地址,并且给出对应controller的方法
@RequestMapping("/listAudit.do")publicStringlistAudit(QueryConditionqueryCondition,Modelmodel){//查询出所有的品牌List
查询条件以及回显:
根据审核条件的不同,在显示商品的url中也应该是不同的。
处理审核:使用JavaScript方法来进行控制,把item的Id传递进去和审核对应的值。
functionisPass(itemId,auditStatus){//修改浮动层的标题$("#addItemNoteH2").html("商品审核");//清空内容$("#itemNote").val("");tipShow("#addItemNote");//给表单赋值$("#itemId").val(itemId);$("#myAuditStatus").val(auditStatus);}使用表单来处理我们的操作。其中notes是我们弹出框的数据。
$("#addItemNoteConfirm").click(function(){varnotes=$("#itemNote").val();//给表单赋值$("#notes").val(notes);//提交表单$("#auditForm").submit();});我们是使用EB_CONSOLE_LOG这张数据表来保存我们后台操作的日志记录的。
表的字段如下:
既然我们要操作到表,我们就得逆向工厂...
设置主键为自动增长
对于上下价和审核的逻辑基本是相同的...
根据不同的状态给出不同的超链接:
functionisShow(itemId,showStatus){tipShow("#confirm");//给表单赋值$("#itemId").val(itemId);$("#myShowStatus").val(showStatus);}在弹出框中绑定提交事件,提交表单
web.xml
由于下面使用了iframe,于是就出现了404错误了。src是不能直接获取WEB-INF的JSP的。
我们要做的就是,通过前台给出的参数,我们后台筛选出数据在前台展示。
从参数上我们可以分为几类:
首先,我们把所有品牌先查询和对应的参数先查询出来吧。
@RequestMapping("toIndex.do")publicStringtoIndex(Modelmodel){List
/***接收条件,查询出符合条件的商品*@parambrandId品牌id*@paramprice价钱*@paramparam被选中的参数*@return*/@RequestMapping("listItem.do")publicStringlistItem(LongbrandId,Stringprice,Stringparam){return"phoneClassification";}参数我们已经知道了,那我们怎么写这个SQL语句呢??
我的分析是这样子的:
/**根据价钱,品牌,被选中属性查询符合条件的商品涉及到的表:1.商品2.商品3.参数值4.价钱*/SELECT*FROMEB_BRANDbrand,EB_ITEMitem,EB_PARA_VALUEpara,EB_SKUskuWHEREbrand.BRAND_ID=item.BRAND_IDANDpara.ITEM_ID=item.ITEM_IDANDsku.ITEM_ID=item.ITEM_IDANDbrand.BRAND_ID=1002ANDsku.SKU_PRICEBETWEEN1AND800000ANDpara.PARA_VALUE='Android4.0';在价钱中是一个范围,因此我们用betweenand语法,而我们的参数传递过来可能是与很多的,因此只要我们使用动态SQL循环就行了。
因此,我们的mapper中的SQL是这样子的。
privateBigDecimalskuPrice;publicBigDecimalgetSkuPrice(){returnskuPrice;}publicvoidsetSkuPrice(BigDecimalskuPrice){this.skuPrice=skuPrice;}编写Dao和Servicedao实现
publicList
基于这么一个需求,当我们点击一个条件的时候,我们要把当前所有获取的条件都获取出来。然后提交给服务器端就行了!
在点击选中事件上,我们获取数据
修改iframe的请求路径,把我们的参数带过去
variframePath="${path}/item/listItem.doprice="+price+"&brandId="+brandId+"¶Str="+paraStr;$("#itemListIframe").attr("src",iframePath);controller/***接收条件,查询出符合条件的商品**@parambrandId品牌id*@paramprice价钱*@paramparaStr被选中的参数*@return*/@RequestMapping("/listItem.do")publicStringlistItem(LongbrandId,Stringprice,StringparaStr,Modelmodel){//TODO基本效果出来了,但条件查询还有问题。List
想要展示最低价那款,还是要去修改SQL语句。需要用到分组函数了。
首先我有这么一个商品
它有两个最小销售单元,一般我们在页面上显示最便宜的那个就行了。
我们的SQL语句可以写成这样:
SELECTmin(sku.SKU_PRICE)SKU_PRICE,item.*FROMEB_ITEMitem,EB_PARA_VALUEpara,EB_SKUskuWHEREpara.ITEM_ID=item.ITEM_IDANDsku.ITEM_ID=item.ITEM_IDANDitem.BRAND_ID=3069ANDsku.SKU_PRICEBETWEEN1AND1000000ANDpara.PARA_VALUE='Android'ANDitem.ITEM_ID=3080GROUPBYitem.ITEM_ID,item.ITEM_NAME,item.ITEM_NO,item.BRAND_ID,item.CAT_ID,item.TAG_IMG_ID,item.TAG_IMG,item.IS_NEW,item.IS_GOOD,item.IS_HOT,item.PROMOTION,item.AUDIT_STATUS,item.SHOW_STATUS,item.IMGS,item.KEYWORDS,item.PAGE_DESC,item.ITEM_RECYCLE,item.ON_SALE_TIME,item.CHECK_TIME,item.UPDATE_TIME,item.UPDATE_USER_ID,item.CREATE_TIME,item.CHECKER_USER_ID,item.FULL_PATH_DEPLOY,item.FULL_PATH_DEPLOY_OFFER,item.ORIGINAL_ITEM_ID,item.LAST_STATUS,item.MERCHANT_ID,item.ITEM_SORT,item.SALES,item.CREATE_USER_ID,item.SIM_LEVEL,item.GIFT_DESC,item.GIFT_IMG,item.GIFT_SHOW_TYPE,item.IMG_SIZE1orderbyitem.item_iddesc修改一下Mapper中的SQL语句:
标准答案的SQL是使用exists关键字来进行查询的:在单表查询的情况下,看有没有符合条件的数据,如果符合,那么exists为ture