Commit 02679509 authored by Junling Bu's avatar Junling Bu
Browse files

update[doc]

parent 3499fe15
......@@ -74,21 +74,16 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
* 地址添加
* 我的收藏
* 我的足迹
* 支付页面(待定)
* 优惠券选择(待定)
* 我的优惠券(待定)
* 支付页面
### 1.2.2 管理平台功能
* 会员管理
* 会员管理
* 收货地址管理
* 收货地址
* 会员收藏
* 会员足迹
* 搜索历史
* 购物车
* 会员等级(待定)
* 会员优惠劵(待定)
* 商城管理
* 区域配置
* 品牌制造商
......@@ -98,17 +93,13 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
* 关键词
* 渠道管理(待定)
* 商品管理
* 商品管理
* 商品参数
* 商品规格
* 货品管理
* 商品列表
* 商品上架
* 商品编辑
* 用户评论
* 团购设置(待定)
* 商品满减搭配(待定)
* 推广管理
* 广告列表
* 广告管理
* 专题管理
* 优惠劵管理(待定)
* 系统管理
* 管理员
* 对象存储
......@@ -233,19 +224,12 @@ litemall是一个简单的商场系统,基于现有的开源项目,重新实
按照开发环境前,需要先在本地配置好数据库:
1. 本项目目前采用MySQL,请上网下载安装MySQL 5.7.x
1. 本项目目前采用MySQL
注意:
> 1. MySQL必须安装5.7.x, 如果是5.6或者最新的8.0都会存在错误。
> 目前原因还没有找到(可能是采用JSON引起),希望开发者注意或者有好的解决方案。
> 2. 如果采用IDE工具导入数据,建议采用MySQL Workbench。如果采用navicat可能有时导入失败。
> 这里失败的原因应该是sql文件是MySQL Workbench导出的,因此可能存在不兼容的格式。
注意:建议采用命令行或者MySQL Workbench。如果采用navicat可能导入失败。
2. 数据库文件存放在litemall-db/sql文件夹中,其中litemall_schema.sql创建数据库和用户权限,
而litemall.sql则是具体的表和数据。开发者可以采用命令或者软件导入数据。
注意:
> 不要运行nideshop.sql文件,这只是所参考nideshop项目的原始数据库,仅用于对比。
litemall_table.sql则创建表,litemall_data.sql则是测试数据。
### 1.4.1 Spring Boot开发环境
......@@ -523,7 +507,7 @@ sudo apt-get install mysql-client
* 命令行导入
1. 采用FileZilla把本项目的litemall.sql上传到云主机
1. 采用FileZilla把本项目的数据库文件上传到云主机
2. 使用PuTTY登录云主机
3. 进入MySQL,输入上节所设置的MySQL的root密码
4. 创建数据库、 创建用户并分配访问权限
......@@ -546,7 +530,8 @@ sudo apt-get install mysql-client
cd deploy
mysql -h localhost -u root -p123456
source ./litemall-db/litemall_schema.sql
source ./litemall-db/litemall.sql
source ./litemall-db/litemall_table.sql
source ./litemall-db/litemall_data.sql
```
其中123456是开发者所设置的MySQL的管理员密码。
......@@ -665,7 +650,8 @@ https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#dep
cd deploy
mysql -h localhost -u root -p123456
source ./litemall-db/litemall_schema.sql
source ./litemall-db/litemall.sql
source ./litemall-db/litemall_table.sql
source ./litemall-db/litemall_data.sql
```
注意,123456是开发者所设置的MySQL管理员密码
警告:
......@@ -997,10 +983,18 @@ http://www.example.com
如果部署方案中采用tomcat而8080端口访问后台,而这里配置nginx后,
可以直接采用80端口访问,因此tomcat可以卸载。
#### 1.6.6.2 静态文件托管CDN
#### 1.6.6.2 管理后台前端文件启动优化
litemall-admin编译得到的前端文件在第一次加载时相当耗时,这里需要一些措施来优化启动速度
* 静态文件托管CDN
在上节中,建议采用卸载tomcat,采用nginx托管管理后台的静态文件。
这里可以进一步地,把静态文件托管到CDN,当然这里是需要收费。
* gzip压缩
在上节中,建议采用卸载tomcat,采用nginx托管管理后台的静态文件。
这里可以进一步地,把静态文件托管到CDN,当然这里是需要收费。
* 动态加载
#### 1.6.6.3 后台服务内部访问
......
......@@ -14,7 +14,7 @@ litemall-os-api模块只是为了减少开发中对第三方图片存储服务
建议开发者最终部署时切换到第三方图片存储服务。
litemall-all模块则只是一个包裹模块,几乎没有任何代码。该模块的作用是融合三个spring boot模块
和litemall-adminm模块静态文件到一个单独spring boot应用中,并最终打包成war格式的项目安装包。
和litemall-admin模块静态文件到一个单独spring boot应用中,并最终打包成war格式的项目安装包。
目前存在的问题:
......@@ -22,19 +22,43 @@ litemall-all模块则只是一个包裹模块,几乎没有任何代码。该
* `改善` litemall-db的一些CRUD操作可以基于开源库重构
* `功能`可以参考一些云存储服务的API加强一些功能
## 2.1 litemall.sql
## 2.1 litemall数据库
litemall.sql数据库基于nideshop中的[nideshop.sql](https://github.com/tumobi/nideshop/blob/master/nideshop.sql)数据库,然后在实际开发过程中进行了调整和修改:
litemall数据库基于nideshop中的[nideshop.sql](https://github.com/tumobi/nideshop/blob/master/nideshop.sql)数据库,然后在实际开发过程中进行了调整和修改:
* 删除了一些目前不必要的表;
* 删除了表中一些目前不必要的字段;
* 行政区域数据litemall_region没有采用原nideshop中的数据,而是采用了[Administrative-divisions-of-China](https://github.com/modood/Administrative-divisions-of-China)
* 表中的某些字段采用JSON;
* 表中的某些字段采用JSON存储
* 表中的日期或时间字段采用DATE、DATETIME;
* 字段的数据类型粗粒度化,例如避免MEDIUMINT,而是INT;
* 表的数据做了清理、调整和补充(假数据)。
具体不同可以比较litemall-db模块下sql文件夹中nideshop.sql和litemall.sql。
litemall数据库由三个sql文件组成,在litemall-db文件夹下面的sql文件夹中:
1. litemall_schema.sql
作用是创建空数据库、创建用户、设置访问权限。
开发者开发测试阶段可以使用,但是部署生产阶段一定要注意修改这里的默认用户名和密码。
注意,这里的sql文件不一定需要运行,开发者可以自己手动或命令行或IDE进行对应的操作即可。
2. litemall_table.sql
作用是创建数据库表,但是没有创建任何数据。
因此,开发者可以在部署生产阶段直接使用。
3. litemall_data.sql
作用是创建测试数据。
这里的测试数据来自开源项目[nideshop-mini-program](https://github.com/tumobi/nideshop-mini-program)
开发者开发测试阶段可以使用,但是部署开发阶段应该使用自己的数据。
综上,这里litemall真正必须运行的sql文件是litemall_table.sql,其他两个sql文件开发者自行决定如何是否使用。
以下讨论一些关键性设计
......@@ -43,7 +67,7 @@ litemall.sql数据库基于nideshop中的[nideshop.sql](https://github.com/tumob
### 2.1.1 商品和货品设计
这里商品存在商品,商品属性,商品规格,货品四种表
这里商品存在商品表(litemall_goods),商品属性表(litemall_goods_attribute),商品规格表(litemall_goods_specification),商品货品表(litemall_product)四种表
商品表是一种商品的基本信息,主要包括商品介绍,商品图片,商品所属类目,商品品牌商等;
......@@ -60,9 +84,10 @@ litemall.sql数据库基于nideshop中的[nideshop.sql](https://github.com/tumob
* 多个规格和单一规格值,可以简化成第一种情况,或者采用第四种情况,通常实际情况下不常见;
* 多个规格和多个规格值,通常是两种规格或者三种规格较为常见,而且对应的价格不完全相同。
货品则是最终面向开发者购买的商品标识,存在多个规格值、数量和价格。
商品货品则是最终实现商品库存管理、购买业务的实体对象,存在多个规格值、数量和价格。
例如,同样的衣服品牌,可能因为不能尺寸和颜色而存在最终的货品,这里每个货品的价格可以一样,也可以不一样。
因此这里一个商品表项,存在(至少0个)多个商品属性表项目,存在(至少一个)多个商品规格表项,
总结一下,一个普通商品,实际上在数据库中,存在一个商品表项,存在(至少0个)多个商品属性表项目,存在(至少一个)多个商品规格表项,
存在(至少一个)多个货品表项。
举例如下:
......@@ -71,7 +96,7 @@ litemall.sql数据库基于nideshop中的[nideshop.sql](https://github.com/tumob
* 存在两个商品参数,
* 属性名称“面向人群”,属性值“男士”
* 属性名称“面料”,属性值“100%棉”
* 存在两种规格共八个商品规格项,
* 存在两种规格(分别五个规格值和三个规格值)共八个商品规格项,
* 规格名称“尺寸”,规则值“S”
* 规格名称“尺寸”,规则值“M”
* 规格名称“尺寸”,规则值“L”
......@@ -382,8 +407,7 @@ litemall.sql数据库基于nideshop中的[nideshop.sql](https://github.com/tumob
## 2.2 litemall-db
litemall-db模块是一个普通的Spring Boot应用,基于mybatis技术提供开发者
访问数据库的功能。
litemall-db模块是一个普通的Spring Boot应用,基于mybatis框架实现数据库访问操作,对外提供业务数据访问服务。
此外,litemall-db最终是作为一个类库被其他模块所依赖使用,因此并不对外
直接服务,没有使用Spring MVC技术。
......@@ -401,13 +425,26 @@ litemall-db模块是一个普通的Spring Boot应用,基于mybatis技术提供
这里litemall-db模块可以分成以下几种代码:
* mybatis generator自动化代码
* mybatis数据库访问代码
* generator生成代码
* 非generator手动代码
* 业务代码
* 安全代码
* JSON支持代码
* 配置代码
### 2.2.1 自动化代码
### 2.2.1 mybatis数据库访问代码
mybatis数据库访问代码是指dao接口代码、dao数据库XML文件和domain代码:
* dao接口代码,声明了数据库访问接口
* dao数据库XML文件,实现了数据库访问操作
* domain代码,则是保存数据库返回数据。
此外,这里的数据库访问代码又进一步分成
* generator生成代码,即基于mybatis generator相关插件自动生成上述三种代码或文件;
* 非generator手动代码,则是需要开发者自己编写上述三种代码。
#### 2.2.1.1 generator生成代码
![](./pic2/2-3.png)
......@@ -416,7 +453,7 @@ litemall-db模块是一个普通的Spring Boot应用,基于mybatis技术提供
1. 读取`mybatis-generator`文件夹下的`generatorConfig.xml`文件
2. 根据`jdbcConnection`访问数据库
3. 根据`table`, 自动生成三种代码:
* src文件夹`org.linlinjava.litemall.db.domain` 包内的Java代码
* src文件夹`org.linlinjava.litemall.db.dao` 包内的Java代码
* src文件夹`org.linlinjava.litemall.db.domain` 包内的Java代码
* resources文件夹`org.linlinjava.litemall.db.domain.dao` 内的XML文件
......@@ -469,9 +506,38 @@ litemall-db模块是一个普通的Spring Boot应用,基于mybatis技术提供
关于mybatis generator的用法,可以参考:
https://blog.csdn.net/isea533/article/details/42102297
#### 2.2.1.2 非generator手动代码
虽然generator可以自动生产代码,帮助开发者简化开发工作,但是在涉及到多表操作或特殊数据库操作时,
仍然需要开发者自己手动编写mybatis框架代码。
具体如何基于mybatis框架编写代码,请开发者自己查找资料。
这里,以统计功能举例说明:
1. dao代码
在src文件夹`org.linlinjava.litemall.db.domain` 包内的StatMapper.java代码定义了数据库访问的接口
2. domain代码
如果希望数据库操作返回数据模型,可以在src文件夹`org.linlinjava.litemall.db.domain` 包内创建相应代码。
而这里统计功能是采用简化的`List<Map>`保存数据,没有定义domain代码。
3. XML文件
在resources文件夹`org.linlinjava.litemall.db.domain.dao` 内的StatMapper.xml文件则是实现真正的数据库访问操作。
### 2.2.2 业务代码
基于2.2.1的代码,业务代码处理一些具体业务相关的操作,对其他模块提供具体的服务。
虽然2.2.1节所述代码已经能够提供数据库访问操作,但是这里仍然会抽象出业务访问层代码,即基于2.2.1所述代码和实际业务需求
实现一些具体业务相关的操作,对其他模块提供便捷业务数据服务。
需要指出的是,这里的业务代码往往是单表相关的业务代码,而涉及到多表操作的java代码通常是在其他高层模块中实现。
这里的业务分层并不是绝对的。例如,开发者可以取消这里的业务代码,而在其他模块中直接调用2.2.1所述代码。
通常业务层代码在src文件夹`org.linlinjava.litemall.db.service` 包中。
### 2.2.3 安全代码
......@@ -780,5 +846,4 @@ bcypt代码本质上是spring里面的代码。
注意,这里只是简单的复制。因此开发者需要保证litemall-all打包前,litemall-admin
模块内dist目录下静态文件已经生成。
最终打包以后则是一个war格式的项目包,包含了三个后台服务和静态文件。
最终打包以后则是一个war格式的项目包,包含了三个后台服务和静态文件。
\ No newline at end of file
......@@ -13,11 +13,25 @@
1. 如果只是体验商品购买流程,开发者可以采用账号注册登录方式。
2. 开发者在litemall-wx和litemall-wx-api模块的appid等信息设置成自己申请的信息。
#### 7.1.1.1 appid已经修改,微信登陆仍然失败
现象:
微信开发者工具修改了开发者自己申请的appid,后台也更新了相应信息,但是微信登录仍然报错。
原因:
这里可能是缓存问题,虽然修改了appid,但是微信开发者工具未及时跟新。
解决方案:
微信开发者工具中修改appid以后,请关闭litemall-wx项目或者微信开发者工具,重新启动导入litemall-wx。
### 7.1.2 手机真机测试不正常
现象:
开发者工具打开正常,但是手机真机扫描加载小商场以后,只有页面结构,没有数据和图片。
微信开发者工具打开正常,但是手机真机扫描加载小商场以后,只有页面结构,没有数据和图片。
原因:
......@@ -87,4 +101,26 @@ wx.notify-url=
## 7.2 管理后台
### 7.2.1 Invalid bound statement
现象:
有时(特别是采用mybatis generator重新生成代码)后台服务报错
```
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): org.linlinjava.litemall.db.dao.XXXX
```
原因:
应该是自动生成的新的XML文件没有及时跟新到编译文件夹target中,造成了target中mybatis的Java代码和XML文件不对应。
解决方案:
采用maven命令或者插件先清理项目再重新编译打包,例如
```bash
mvn clean
mvn package
```
## 7.3 基础系统
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment