# 2 litemall基础系统
目前litemall基础系统由以下部分组成:
* litemall-core模块
* litemall-db模块
* litemall-all模块
* litemall-all-war模块
litemall-db模块提供数据库访问服务。
litemall-core模块提供通用服务。
litemall-all模块则只是一个包裹模块,几乎没有任何代码。该模块的作用是融合两个spring boot模块
和litemall-admin模块静态文件到一个单独Spring Boot可执行jar包中。
litemall-all-war模块和litemall-all模块是一样的作用,只是采用war打包方式。
## 2.2 litemall-db
litemall-db模块是一个普通的Spring Boot应用,基于mybatis框架实现数据库访问操作,对外提供业务数据访问服务。
此外,litemall-db最终是作为一个类库被其他模块所依赖使用,因此并不对外
直接服务,没有使用Spring MVC技术。
技术:
* Spring Boot 2.x
* MySQL
* Druid
* Mybatis
* PageHelper
* Mybatis Generator
* Mybatis Generator非官方插件mybatis-generator-plugin

这里litemall-db模块可以分成以下几种代码:
* mybatis数据库访问代码
* generator生成代码
* 非generator手动代码
* 业务代码
* mybatis generator支持代码
### 2.2.1 mybatis数据库访问代码
mybatis数据库访问代码是指dao接口代码、dao数据库XML文件和domain代码:
* dao接口代码,声明了数据库访问接口
* dao数据库XML文件,实现了数据库访问操作
* domain代码,则是保存数据库返回数据。
此外,这里的数据库访问代码又进一步分成
* mybatis generator自动生成代码,即基于mybatis generator相关插件自动生成上述三种代码或文件;
* 非mybatis generator手动代码,则是需要开发者自己编写上述三种代码。
#### 2.2.1.1 自动生成代码

如上图所示,双击`mybatis-generator:generate`,则mybatis generator插件会:
1. 读取`mybatis-generator`文件夹下的`generatorConfig.xml`文件
2. 根据`jdbcConnection`访问数据库
3. 根据`table`, 自动生成三种代码:
* src文件夹`org.linlinjava.litemall.db.dao` 包内的Java代码
* src文件夹`org.linlinjava.litemall.db.domain` 包内的Java代码
* resources文件夹`org.linlinjava.litemall.db.domain.dao` 内的XML文件
以上三种代码即可封装对数据库的操作,开发者无需直接操作sql代码,
而是直接操作Java代码来完成对数据库的访问处理。
关于如何基于mybatis的Example代码来访问数据库,请查阅相关资料,
或者参考本模块`org.linlinjava.litemall.db.service` 包内的Java代码。
当然,为了达到数据库访问效率,开发者也可以手动自定义mapper文件和对应的Java代码。
例如,当需要访问两个表的数据时,这里是在业务层通过Java代码遍历的形式来访问两个表,
也可以通过自定义的mapper文件来实现。
接下来,以`litemall_brand`表举例说明如何自动生成代码:
1. mybatis generator插件会读取`table`标签
```
```
2. 自动生产src文件夹下domain包内的LitemallBrand.java类、LitemallBrandExample.java类、
dao包内的LitemallBrandMapper.java接口和resources文件夹下dao包内的LitemallBrandMapper.xml文件。
3. 手动在service包内创建LitemallBrandService.java来对外提供具体的服务。
例如,为了得到Brand列表,那么创建list方法,基于前面创建的三个Java来来实现。
```java
@Service
public class LitemallBrandService {
@Resource
private LitemallBrandMapper brandMapper;
public List query(int offset, int limit) {
LitemallBrandExample example = new LitemallBrandExample();
example.or().andDeletedEqualTo(false);
PageHelper.startPage(offset, limit);
return brandMapper.selectByExample(example);
}
}
```
关于mybatis generator的用法,可以自行查阅官网或文档。
#### 2.2.1.2 手动代码
虽然mybatis generator可以自动生产代码,帮助开发者简化开发工作,但是在涉及到多表操作或特殊数据库操作时,
仍然需要开发者自己手动编写基于mybatis框架的相关代码。
具体如何基于mybatis框架编写代码,请开发者自己查找资料。
这里,以统计功能举例说明:
1. dao代码
在src文件夹`org.linlinjava.litemall.db.domain` 包内的StatMapper.java代码定义了数据库访问的接口
2. domain代码
如果希望数据库操作返回数据模型,可以在src文件夹`org.linlinjava.litemall.db.domain` 包内创建相应代码。
而这里统计功能是采用简化的`List