|
|
@@ -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生成代码
|
|
|
|
|
|

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