猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是问题。更多精彩内容,敬请大家关注公主号猿人工厂,点击猿人养成获取!
上一章节,猿人君带你完成了属性库的设计以及实现了属性组的管理功能。
今天,猿人工厂君就继续和你一起来实现属性库剩余的功能——属性和属性值。
属性和属性值以及属性组
在上一章节中,我们说商品的区分是由属性和属性值来构成的:
属性和属性值,看上去很不起眼,数据粒度也很小,但是正式因为数据粒度小,灵活多变,组织得当可以强有力的区分千变万化的商品。
你一定很好奇,既然已经有属性和属性值了,为什么还需要属性组的存在呢。这个道理很简单,属性组相当于对粒度过小的属性提供了组织管理功能。可以将一些共性组合起来,更加便利的去描述商品之间的区别。
功能概览
在上一章节,我们已经实际上已经列出了属性和属性值管理的相关功能图了,但是为了方便你查看文章,我们还是再看一下。
属性和属性组的维护都需要提供,列表以及新增/编辑功能,在属性列表,点击管理按钮,进入到当前属性的属性值列表页面。在属性列表,点击“组管理”则切换到属性组管理页面。在属性组和属性值列表页面,分别提供对应的新增/编辑功能。
数据库设计
为了方便您的阅读,不妨再看一下属性和属性值的数据库设计。
属性和属性组的后端实现
由于之前已经给出了我们自己定义的代码生成器,属性组的实现也相对简单,考虑到篇幅问题,这一部分我们给出Controller层面的功能实现,service、和dao,还是希望你自行实现,在初学时期,多谢代码,对你熟悉掌握代码编写的技巧,是一个必不可少的环节。
/**
* Copyright(c) 2004-2020 pangzi
*com.pz.basic.mall.controller.product.property.MallPropertyController.java
*/
package com.pz.basic.mall.controller.product.property;
import com.pz.basic.mall.domain.base.Result;
import com.pz.basic.mall.domain.product.property.MallProperty;
import com.pz.basic.mall.domain.product.property.query.QueryMallProperty;
import com.pz.basic.mall.service.product.property.MallPropertyService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
*
* @author pangzi
* @date 2020-06-22 20:47:27
*
*
*/
@RestController
@RequestMapping("/property")
public class MallPropertyController {
private MallPropertyService mallPropertyService;
public void setMallPropertyService(MallPropertyService mallPropertyService) {
this.mallPropertyService =mallPropertyService;
}
/**
* 新增属性
* @param mallProperty
* @return
*/
@RequestMapping("/addMallProperty")
public Result<MallProperty> addMallProperty(@RequestBody MallPropertymallProperty){
try{
return mallPropertyService.addMallProperty(mallProperty);
}catch(Exception e){
e.printStackTrace();
return new Result(false);
}
}
/**
* 修改属性
* @param mallProperty
* @return
*/
@RequestMapping("/updateMallProperty")
public Result updateMallProperty(@RequestBody MallProperty mallProperty){
try{
return mallPropertyService.updateMallPropertyById(mallProperty);
}catch(Exception e){
e.printStackTrace();
return new Result(false);
}
}
/**
* 分页返回属性列表
* @param queryMallProperty
* @return
*/
@RequestMapping("/findByPage")
public Result<List<MallProperty>> findByPage(@RequestBodyQueryMallProperty queryMallProperty){
return mallPropertyService.getMallPropertysByPage(queryMallProperty);
}
}
/**
* Copyright(c) 2004-2020 pangzi
*com.pz.basic.mall.controller.sys.MallPropertyValueController.java
*/
package com.pz.basic.mall.controller.product.property;
import com.pz.basic.mall.domain.base.Result;
import com.pz.basic.mall.domain.product.category.MallCategoryProperty;
import com.pz.basic.mall.domain.product.category.MallCategoryPropertyValue;
import com.pz.basic.mall.domain.product.property.MallPropertyValue;
import com.pz.basic.mall.domain.product.property.query.QueryMallPropertyValue;
import com.pz.basic.mall.service.product.property.MallPropertyValueService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
*
* @author pangzi
* @date 2020-06-22 20:47:27
*
*
*/
@RestController
@RequestMapping("/propertyValue")
public class MallPropertyValueController {
private MallPropertyValueServicemallPropertyValueService;
public void setMallPropertyValueService(MallPropertyValueService mallPropertyValueService){
this.mallPropertyValueService =mallPropertyValueService;
}
/**
* 新增属性
*
* @param mallPropertyValue
* @return
*/
@RequestMapping("/addMallPropertyValue")
public Result<MallPropertyValue>addMallPropertyValue(@RequestBody MallPropertyValue mallPropertyValue) {
try {
return mallPropertyValueService.addMallPropertyValue(mallPropertyValue);
} catch (Exception e) {
e.printStackTrace();
return new Result(false);
}
}
/**
* 修改属性
*
* @param mallPropertyValue
* @return
*/
@RequestMapping("/updateMallPropertyValue")
public Result updateMallPropertyValue(@RequestBody MallPropertyValue mallPropertyValue) {
try {
return mallPropertyValueService.updateMallPropertyValueById(mallPropertyValue);
} catch (Exception e) {
e.printStackTrace();
return new Result(false);
}
}
/**
* 分页返回属性列表
*
* @param queryMallPropertyValue
* @return
*/
@RequestMapping("/findByPage")
public Result<List<MallPropertyValue>> findByPage(@RequestBodyQueryMallPropertyValue queryMallPropertyValue) {
return mallPropertyValueService.getMallPropertyValuesByPage(queryMallPropertyValue);
}
/**
* 删除属性
*
* @param mallPropertyValue
* @return
*/
@RequestMapping("/deleteMallPropertyValue")
public Result deleteMallPropertyValue(@RequestBody MallPropertyValue mallPropertyValue) {
try {
return mal