慕课Java电商网站开发_【笔记4-商品模块】从0开始 独立完成企业级Java电商网站开发(服务端)...

分类管理模块

数据表结构设计

分类表

AAffA0nNPuCLAAAAAElFTkSuQmCC

CREATE TABLE、mmall_ category' (

'id' int(11) NOT NULL AUTO_ INCREMENT COMMENT ' 类别Id',

'parent_ id' int(11) DEFAULT NULL COMMENT '父类 别id当id=0时说明是根节点,一级类别' ,

'name' varchar(50) DEFAULT NULL COMMENT ' 类别名称',

'status' tinyint(1) DEFAULT '1' COMMENT ' 类别状态1-正常,2-已废弃',

'sort_order' int(4) DEFAULT NULL COMMENT ' 排序编号,同类展示顺序,数值相等则自然排序' ,

'create_ time' datetime DEFAULT NULL COMMENT '创建时间',

'update_ time' datetime DEFAULT NULL COMMENT ' 更新时间' ,

PRIMARY KEY ( id')

) ENGINE=InnoDB AUTO_ INCREMENT=100032 DEFAULT CHARSET=utf8

1.parent_id是因为分类采用树状分类,递归需要边界条件。

2.父类别id=0时,说明是根节点,一级类别,此时为return条件。

3.status可选为1或2,1表示类别正常,2表示该类别已废弃。

涉及知识点

如何处理复杂对象排重

如何设计及封装无限层级的树状数据结构

通过设置parent_id及id,id=0时,说明是根节点,一级类别

递归算法的设计思想

查询当前节点下面的子节点,以及子节点的子节点

AAffA0nNPuCLAAAAAElFTkSuQmCC

equals() 的作用是 用来判断两个对象是否相等

//没有重写equals()

Person p1 = new Person("eee", 100);

Person p2 = new Person("eee", 100);

System.out.printf("%s\n", p1.equals(p2)); //false

重写了Person的equals()函数:当两个Person对象的 name 和 age 都相等,则返回true。

/**

* @desc Person类。

*/

private static class Person {

int age;

String name;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public String toString() {

return name + " - " +age;

}

/**

* @desc 覆盖equals方法

*/

@Override

public boolean equals(Object obj){

if(obj == null){

return false;

}

//如果是同一个对象返回true,反之返回false

if(this == obj){

return true;

}

//判断是否类型相同

if(this.getClass() != obj.getClass()){

return false;

}

Person person = (Person)obj;

return name.equals(person.name) && age==person.age;

}

}

重写equal 和hashcode方法

使用==操作符检查“参数是否为这个对象的引用”;

使用instanceof操作符检查“参数是否为正确的类型”;

对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;

编写完equals方法后,问自己它是否满足对称性、传递性、一致性;

重写equals时总是要重写hashCode;

不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解。

接口设计

####1.获取品类子节点(平级)

/manage/category/get_category.do

request

categoryId(default=0)

response

success

{

"status": 0,

"data": [

{

"id": 2,

"parentId": 1,

"name": "手机",

"status": true,

"sortOrder": 3,

"createTime": 1479622913000,

"updateTime": 1479622913000

},

{

"id": 4,

"parentId": 1,

"name": "移动座机",

"status": true,

"sortOrder": 5,

"createTime": 1480059936000,

"updateTime": 1480491941000

}

]

}

####2.增加节点

/manage/category/add_category.do

request

parentId(default=0)

categoryName

response

success

{

"status": 0,

"msg": "添加品类成功"

}

####3.修改品类名字

/manage/category/set_category_name.do

request

categoryId

categoryName

response

success

{

"status": 0,

"msg": "更新品类名字成功"

}

####4.获取当前分类id及递归子节点categoryId

/manage/category/get_deep_category.do

request

categoryId

response

success

{

"status": 0,

"data": [

100009,

100010,

100001,

100006,

100007,

100008

]

}

商品模块

数据表结构设计

产品表

AAffA0nNPuCLAAAAAElFTkSuQmCC

create table mmall_product(

id int(11) primary key auto_increment,

category_id int(11),

sub_images text,

price decimal(20,2),

status int(6) DEFAULT 1

)

1.category_id将来在表关系中要采用外链。

2.图片url存放相对地址,若图片服务器迁移或者域名修改,只需要修改前缀即可

3.text格式可以存放的内容比varchar更大,存放图片地址,采用json格式,用于拓展。主图取图片地址中的第一张。

4.price采用decimal(20,2)说明价格整体最多20位(其中有两位是小数)。后面会学习如何解决丢失精度的问题。

5.status为商品状态,1-在售,2-下架,3-删除。

涉及知识点

FTP服务的对接、SpringMVC文件上传

流读取Properties配置文件的PropertiesUtil工具类

AAffA0nNPuCLAAAAAElFTkSuQmCC

joda-time快速入门 静态块

Mybatis-PageHelper高校准确地分页及动态排序

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

Mybatis对List遍历的实现方法

Mybatis对where语句动态拼装的几个版本演变

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

POJO、BO、VO 和 POJO、VO

AAffA0nNPuCLAAAAAElFTkSuQmCC

功能

前台功能

产品搜索

动态排序列表

商品详情

后台功能

商品列表

商品搜素

图片上传

富文本上传

商品详情

商品上下架

增加商品

更新商品

接口设计

【门户】

####1.产品搜索及动态排序List

/product/list.do

request

categoryId

keyword

pageNum(default=1)

pageSize(default=10)

orderBy(default=""):排序参数:例如price_desc,price_asc

response

success

{

"status": 0,

"data": {

"pageNum": 1,

"pageSize": 10,

"size": 2,

"orderBy": null,

"startRow": 1,

"endRow": 2,

"total": 2,

"pages": 1,

"list": [

{

"id": 1,

"categoryId": 3,

"name": "iphone7",

"subtitle": "双十一促销",

"mainImage": "mainimage.jpg",

"status":1,

"price": 7199.22

},

{

"id": 2,

"categoryId": 2,

"name": "oppo R8",

"subtitle": "oppo促销进行中",

"mainImage": "mainimage.jpg",

"status":1,

"price": 2999.11

}

],

"firstPage": 1,

"prePage": 0,

"nextPage": 0,

"lastPage": 1,

"isFirstPage": true,

"isLastPage": true,

"hasPreviousPage": false,

"hasNextPage": false,

"navigatePages": 8,

"navigatepageNums": [

1

]

}

}

####2.产品detail

/product/detail.do

request

productId

response

success

{

"status": 0,

"data": {

"id": 2,

"categoryId": 2,

"name": "oppo R8",

"subtitle": "oppo促销进行中",

"mainImage": "mainimage.jpg",

"subImages": "[\"mmall/aa.jpg\",\"mmall/bb.jpg\",\"mmall/cc.jpg\",\"mmall/dd.jpg\",\"mmall/ee.jpg\"]",

"detail": "richtext",

"price": 2999.11,

"stock": 71,

"status": 1,

"createTime": "2016-11-20 14:21:53",

"updateTime": "2016-11-20 14:21:53"

}

}

【后台】

####1.产品list

/manage/product/list.do

request

pageNum(default=1)

pageSize(default=10)

response

success

{

"status": 0,

"data": {

"pageNum": 1,

"pageSize": 10,

"size": 2,

"orderBy": null,

"startRow": 1,

"endRow": 2,

"total": 2,

"pages": 1,

"list": [

{

"id": 1,

"categoryId": 3,

"name": "iphone7",

"subtitle": "双十一促销",

"mainImage": "mainimage.jpg",

"status":1,

"price": 7199.22

},

{

"id": 2,

"categoryId": 2,

"name": "oppo R8",

"subtitle": "oppo促销进行中",

"mainImage": "mainimage.jpg",

"status":1,

"price": 2999.11

}

],

"firstPage": 1,

"prePage": 0,

"nextPage": 0,

"lastPage": 1,

"isFirstPage": true,

"isLastPage": true,

"hasPreviousPage": false,

"hasNextPage": false,

"navigatePages": 8,

"navigatepageNums": [

1

]

}

}

####2.产品搜索

/manage/product/search.do

request

productName

productId

pageNum(default=1)

pageSize(default=10)

response

success

{

"status": 0,

"data": {

"pageNum": 1,

"pageSize": 10,

"size": 1,

"orderBy": null,

"startRow": 1,

"endRow": 1,

"total": 1,

"pages": 1,

"list": [

{

"id": 1,

"categoryId": 3,

"name": "iphone7",

"subtitle": "双十一促销",

"mainImage": "mainimage.jpg",

"price": 7199.22

}

],

"firstPage": 1,

"prePage": 0,

"nextPage": 0,

"lastPage": 1,

"isFirstPage": true,

"isLastPage": true,

"hasPreviousPage": false,

"hasNextPage": false,

"navigatePages": 8,

"navigatepageNums": [

1

]

}

}

####3.图片上传

/manage/product/upload.do

request

response

success

{

"status": 0,

"data": {

"uri": "e6604558-c0ff-41b9-b6e1-30787a1e3412.jpg",

"url": "http://img.happymmall.com/e6604558-c0ff-41b9-b6e1-30787a1e3412.jpg"

}

}

####4.产品详情

/manage/product/detail.do

request

productId

response

success

{

"status": 0,

"data": {

"id": 2,

"categoryId": 2,

"parentCategoryId":1,

"name": "oppo R8",

"subtitle": "oppo促销进行中",

"imageHost": "http://img.happymmall.com/",

"mainImage": "mainimage.jpg",

"subImages": "[\"mmall/aa.jpg\",\"mmall/bb.jpg\",\"mmall/cc.jpg\",\"mmall/dd.jpg\",\"mmall/ee.jpg\"]",

"detail": "richtext",

"price": 2999.11,

"stock": 71,

"status": 1,

"createTime": "2016-11-20 14:21:53",

"updateTime": "2016-11-20 14:21:53"

}

}

####5.产品上下架

/manage/product/set_sale_status.do

request

productId

status

response

success

{

"status": 0,

"data": "修改产品状态成功"

}

####6.新增OR更新产品

新增

/manage/product/save.do

request

categoryId=1&name=三星洗衣机&subtitle=三星大促销&mainImage=sss.jpg&subImages=test.jpg&detail=detailtext&price=1000&stock=100&status=1&id=3

response

success

{

"status": 0,

"data": "更新产品成功"

}

####7.富文本上传图片

/manage/product/richtext_img_upload.do

request

response

success

{

"file_path": "http://img.happymmall.com/5fb239f2-0007-40c1-b8e6-0dc11b22779c.jpg",

"msg": "上传成功",

"success": true

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值