浏览代码

update[doc]

Junling Bu 7 年之前
父节点
当前提交
fca659818c
共有 2 个文件被更改,包括 137 次插入9 次删除
  1. 137 9
      doc/2.md
  2. 二进制
      doc/pic2/2-3.png

+ 137 - 9
doc/2.md

@@ -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代码遍历的形式来访问两个表。
+![](./pic2/2-3.png)
+
+如上图所示,双击`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
 
 对象存储服务目前的目标是支持图片的上传下载。

二进制
doc/pic2/2-3.png