|
|
@@ -227,15 +227,62 @@ litemall.sql数据库基于nideshop中的[nideshop.sql](https://github.com/tumob
|
|
|
|
|
|
### 2.2.1 自动化代码
|
|
|
|
|
|
-通过mybatis generator插件可以自动生成三种代码:
|
|
|
-
|
|
|
-* src文件夹`domain` Java代码
|
|
|
-* src文件夹`dao` Java代码
|
|
|
-* resources文件夹`dao` Mapper代码
|
|
|
-
|
|
|
-这里的代码封装了对数据库的操作,因此用户不需要直接操作sql代码,而是直接操作Java代码即可完成对数据库的访问处理。
|
|
|
-
|
|
|
-当然,为了达到数据库访问效率,用户也可以自定义mapper文件和对应的Java代码,但是至少目前这里不采用。例如,当需要访问两个表的数据时,这里是在业务层通过Java代码遍历的形式来访问两个表。
|
|
|
+
|
|
|
+
|
|
|
+如上图所示,双击`mybatis-generator:generate`,则mybatis generator插件会:
|
|
|
+
|
|
|
+1. 读取`mybatis-generator`文件夹下的`generatorConfig.xml`文件
|
|
|
+2. 根据`jdbcConnection`访问数据库
|
|
|
+3. 根据`table`, 自动生成三种代码:
|
|
|
+ * src文件夹`org.linlinjava.litemall.db.domain` 包内的Java代码
|
|
|
+ * src文件夹`org.linlinjava.litemall.db.domain` 包内的Java代码
|
|
|
+ * resources文件夹`org.linlinjava.litemall.db.domain.dao` 内的XML文件
|
|
|
+
|
|
|
+以上三种代码即可封装对数据库的操作,用户无需直接操作sql代码,
|
|
|
+而是直接操作Java代码来完成对数据库的访问处理。
|
|
|
+
|
|
|
+关于如何基于mybatis的Example代码来访问数据库,请查阅相关资料,
|
|
|
+或者参考本模块`org.linlinjava.litemall.db.dservice` 包内的Java代码。
|
|
|
+
|
|
|
+当然,为了达到数据库访问效率,用户也可以手动自定义mapper文件和对应的Java代码,但目前这里不采用或者不建议采用。
|
|
|
+例如,当需要访问两个表的数据时,这里是在业务层通过Java代码遍历的形式来访问两个表。
|
|
|
+
|
|
|
+这里,以`litemall_brand`表举例说明:
|
|
|
+
|
|
|
+1. mybatis generator插件会根据数据库`table`标签
|
|
|
+
|
|
|
+ ```
|
|
|
+ <generatorConfiguration>
|
|
|
+ <table tableName="litemall_brand">
|
|
|
+ <generatedKey column="id" sqlStatement="MySql" identity="true" />
|
|
|
+ <columnOverride javaType="java.time.LocalDateTime" column="add_time"/>
|
|
|
+ </table>
|
|
|
+ </generatorConfiguration>
|
|
|
+ ```
|
|
|
+
|
|
|
+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<LitemallBrand> query(int offset, int limit) {
|
|
|
+ LitemallBrandExample example = new LitemallBrandExample();
|
|
|
+ example.or().andDeletedEqualTo(false);
|
|
|
+ PageHelper.startPage(offset, limit);
|
|
|
+ return brandMapper.selectByExample(example);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+
|
|
|
+如果基于一个新表创建新访问组件,请阅读下面章节2.2.6
|
|
|
|
|
|
### 2.2.2 业务代码
|
|
|
|
|
|
@@ -249,6 +296,87 @@ litemall.sql数据库基于nideshop中的[nideshop.sql](https://github.com/tumob
|
|
|
|
|
|
采用Java注解的方式来完成一些特定的配置操作。
|
|
|
|
|
|
+### 2.2.6 新服务组件
|
|
|
+
|
|
|
+本节介绍如果基于一个表创建新的服务组件。
|
|
|
+
|
|
|
+1. 在数据库里面创建一个表,例如`litemall_demo`:
|
|
|
+
|
|
|
+ ```sql
|
|
|
+ CREATE TABLE `litemall`.`litemall_demo` (
|
|
|
+ `id` INT NOT NULL AUTO_INCREMENT,
|
|
|
+ `name` VARCHAR(45) NULL,
|
|
|
+ `address` VARCHAR(45) NULL,
|
|
|
+ PRIMARY KEY (`id`));
|
|
|
+
|
|
|
+ INSERT INTO `litemall`.`litemall_demo` (`id`, `name`, `address`)
|
|
|
+ VALUES ('1', 'hello', 'world');
|
|
|
+ ```
|
|
|
+
|
|
|
+2. 在generatorConfig.xml中增加一个新的table标签
|
|
|
+
|
|
|
+ ```
|
|
|
+ <generatorConfiguration>
|
|
|
+ <table tableName="litemall_demo">
|
|
|
+ <generatedKey column="id" sqlStatement="MySql" identity="true" />
|
|
|
+ </table>
|
|
|
+ </generatorConfiguration>
|
|
|
+ ```
|
|
|
+3. 双击mybatis generator插件,检查LitemallDemo.java类、LitemallDemoExample.java类、
|
|
|
+ LitemallDemoMapper.java接口和LitemallDemoMapper.xml是否生产。
|
|
|
+
|
|
|
+4. 在service里面新建LitemallDemoService.java类,
|
|
|
+
|
|
|
+ ```java
|
|
|
+ @Service
|
|
|
+ public class LitemallDemoService {
|
|
|
+ @Resource
|
|
|
+ private LitemallDemoMapper demoMapper;
|
|
|
+
|
|
|
+ public List<LitemallDemo> list() {
|
|
|
+ LitemallDemoExample example = new LitemallDemoExample();
|
|
|
+ return demoMapper.selectByExample(example);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+5. 可以在`src/test/java/org.linlinjava.litemall.db`包里面创建LitemallDemoTest.java类,
|
|
|
+ 使用Junit进行测试。
|
|
|
+
|
|
|
+ ```java
|
|
|
+ @WebAppConfiguration
|
|
|
+ @RunWith(SpringJUnit4ClassRunner.class)
|
|
|
+ @SpringBootTest
|
|
|
+ public class LitemallDemoTest {
|
|
|
+ @Autowired
|
|
|
+ private LitemallDemoService demoService;
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void test() {
|
|
|
+ List<LitemallDemo> litemallDemoList = demoService.list();
|
|
|
+ Assert.assertTrue(litemallDemoList.size() != 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+6. 同样地,可以在Controller中使用LitemallDemoService来对外提供服务。
|
|
|
+
|
|
|
+ ```java
|
|
|
+ @RestController
|
|
|
+ @RequestMapping("/demo")
|
|
|
+ public class DemoController {
|
|
|
+ @Autowired
|
|
|
+ private LitemallDemoService demoService;
|
|
|
+
|
|
|
+ @RequestMapping("/list")
|
|
|
+ public Object list(){
|
|
|
+ List<LitemallDemo> demoList = demoService.list();
|
|
|
+ return demoList;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
## 2.3 litemall-os-api
|
|
|
|
|
|
对象存储服务目前的目标是支持图片的上传下载。
|