Browse Source

update[doc]

Junling Bu 7 years ago
parent
commit
026795092d
3 changed files with 144 additions and 49 deletions
  1. 25 31
      doc/1.md
  2. 82 17
      doc/2.md
  3. 37 1
      doc/7.md

+ 25 - 31
doc/1.md

@@ -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 后台服务内部访问
 

+ 82 - 17
doc/2.md

@@ -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格式的项目包,包含了三个后台服务和静态文件。

+ 37 - 1
doc/7.md

@@ -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 基础系统