更新diboot-core相关文档
This commit is contained in:
parent
bb85d4fc06
commit
45620a7a18
|
@ -23,10 +23,7 @@ module.exports = {
|
|||
['/guide/diboot-core/Mapper及自定义', 'Mapper及自定义'],
|
||||
['/guide/diboot-core/接口的艺术Controller', '接口的艺术Controller'],
|
||||
['/guide/diboot-core/查询条件DTO', '查询条件DTO'],
|
||||
['/guide/diboot-core/单表关联', '单表关联'],
|
||||
['/guide/diboot-core/多表关联', '多表关联'],
|
||||
['/guide/diboot-core/数据字典关联', '数据字典关联'],
|
||||
['/guide/diboot-core/异常处理', '异常处理'],
|
||||
['/guide/diboot-core/无SQL关联', '无SQL关联'],
|
||||
['/guide/diboot-core/常用工具类', '常用工具类']
|
||||
]
|
||||
}
|
||||
|
@ -50,8 +47,8 @@ module.exports = {
|
|||
collapsable: true,
|
||||
sidebarDepth: 2,
|
||||
children: [
|
||||
['/guide/diboot-devtools/安装', '安装'],
|
||||
['/guide/diboot-devtools/启动', '启动'],
|
||||
['/guide/diboot-devtools/介绍', '介绍'],
|
||||
['/guide/diboot-devtools/开始使用', '开始使用'],
|
||||
['/guide/diboot-devtools/数据表管理', '数据表管理'],
|
||||
['/guide/diboot-devtools/代码生成与更新', '代码生成与更新']
|
||||
]
|
||||
|
@ -61,17 +58,11 @@ module.exports = {
|
|||
nav: [{
|
||||
text: '首页', link: '/'
|
||||
}, {
|
||||
text: '学习',
|
||||
items: [
|
||||
{text: 'diboot-core指南', link: '/guide/diboot-core/安装'},
|
||||
{text: 'diboot-shiro指南', link: '/guide/diboot-shiro/安装'},
|
||||
{text: 'diboot-devtools指南', link: '/guide/diboot-devtools/安装'}
|
||||
]
|
||||
text: 'core指南',
|
||||
link: '/guide/diboot-core/安装'
|
||||
}, {
|
||||
text: 'API',
|
||||
items: [
|
||||
{text: 'diboot-core', link: '/api/diboot-core/'}
|
||||
]
|
||||
text: 'devtools指南',
|
||||
link: '/guide/diboot-devtools/介绍'
|
||||
},{
|
||||
text: '1.x', link: 'https://www.diboot.com'
|
||||
}, {
|
||||
|
|
|
@ -1 +1,94 @@
|
|||
# Mapper及自定义
|
||||
# Mapper及自定义
|
||||
|
||||
## Gradle设置
|
||||
> 如果您使用了gradle,并且您的Mapper.xml文件实在java代码目录下,那么除了MapperScan的注解之外,还需要对gradle进行相关设置,使其能够找到相对应的Mapper.xml文件,如:
|
||||
```groovy
|
||||
sourceSets {
|
||||
main {
|
||||
resources {
|
||||
srcDirs "src/main/java"
|
||||
include '**/*.xml'
|
||||
include '**/*.dtd'
|
||||
include '**/*.class'
|
||||
}
|
||||
resources {
|
||||
srcDirs "src/main/resources"
|
||||
include '**'
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Maven设置
|
||||
> 如果您使用Maven作为您的构建工具,并且您的Mapper.xml文件是在java代码目录下,那么除了MapperScan的注解之外,还需要再项目中的pom.xml文件中的添加如下配置,使其能够找到您的Mapper.xml文件,如:
|
||||
```xml
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.dtd</include>
|
||||
</includes>
|
||||
<filtering>false</filtering>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
```
|
||||
|
||||
## Mapper类
|
||||
> Mapper类需要继承diboot-core中的BaseCrudMapper基础类,并传入相对应的实体类,如:
|
||||
```java
|
||||
package com.example.demo.mapper;
|
||||
|
||||
import com.diboot.core.mapper.BaseCrudMapper;
|
||||
import com.example.demo.entity.Demo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface DemoMapper extends BaseCrudMapper<Demo> {
|
||||
|
||||
}
|
||||
```
|
||||
* BaseCrudMapper类继承了mybatis-plus提供的BaseMapper类,对于BaseCrudMapper中已有的相关接口可以参考[mybatis-plus关于Mapper类的文档](https://mybatis.plus/guide/crud-interface.html#mapper-crud-%E6%8E%A5%E5%8F%A3)
|
||||
|
||||
## Mapper.xml文件
|
||||
> 默认的Mapper.xml文件如下所示:
|
||||
```java
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "./mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.example.demo.mapper.DemoMapper">
|
||||
|
||||
</mapper>
|
||||
```
|
||||
|
||||
## 自定义Mapper接口
|
||||
|
||||
> 自定义Mapper接口可以使用mybatis增加mapper接口的处理方案,如:
|
||||
```java
|
||||
package com.example.demo.mapper;
|
||||
|
||||
import com.diboot.core.mapper.BaseCrudMapper;
|
||||
import com.example.demo.entity.Demo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
public interface DemoMapper extends BaseCrudMapper<Demo> {
|
||||
|
||||
int forceDeleteEntities(@Param("name") String name);
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "./mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.example.demo.mapper.DemoMapper">
|
||||
|
||||
<update id="forceDeleteEntities" parameterType="String">
|
||||
DELETE FROM demo WHERE name=#{name}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
```
|
|
@ -1 +1,206 @@
|
|||
# Service与实现
|
||||
# Service与实现
|
||||
|
||||
## Service类
|
||||
|
||||
> 对于一个自定义的entity,您可以像以往的习惯一样开发service相关代码,如果需要使用diboot-core中封装好的一些接口,需要继承diboot-core中的BaSeService类,并传入对应的实体类。
|
||||
|
||||
```java
|
||||
package com.example.demo.service;
|
||||
|
||||
import com.diboot.core.service.BaseService;
|
||||
import com.example.demo.entity.Demo;
|
||||
|
||||
public interface DemoService extends BaseService<Demo> {
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
> 提示:BaseService类并没有继承mybatis-plus中的IService接口,如果需要使用mybatis-plus中的IService接口,需要单独继承IService类.
|
||||
|
||||
## 相关接口
|
||||
|
||||
### getEntity
|
||||
```java
|
||||
T getEntity(Serializable id);
|
||||
```
|
||||
> getEntity接口可以通过一个主键参数得到数据库中的一个实体,如:
|
||||
```java
|
||||
Demo demo = demoService.getEntity(id);
|
||||
```
|
||||
|
||||
### createEntity
|
||||
```java
|
||||
boolean createEntity(T entity);
|
||||
```
|
||||
> createEntity接口将一个entity添加到数据库中,返回成功与失败。通过该接口创建记录成功后,会将新建记录的主键自动设置到该entity中,如:
|
||||
|
||||
```java
|
||||
boolean success = demoService.createEntity(demo);
|
||||
System.out.println(demo.getId());
|
||||
// 输出结果
|
||||
===> 1001
|
||||
```
|
||||
|
||||
### updateEntity
|
||||
```java
|
||||
boolean updateEntity(T entity);
|
||||
boolean updateEntity(T entity, Wrapper updateCriteria);
|
||||
boolean updateEntity(Wrapper updateWrapper);
|
||||
```
|
||||
* updateEntity接口可以根据该实体的主键值来更新整个entity的所有字段内容到数据库,返回成功与失败,如:
|
||||
```java
|
||||
boolean success = demoService.updateEntity(demo);
|
||||
```
|
||||
|
||||
* 该接口也可以通过条件更新对应的字段(可以通过条件设置需要更新的字段,以及需要更新记录的条件限制),返回成功与失败,如:
|
||||
```java
|
||||
/*** 将demo中所有可用的记录的name都更新为“张三” */
|
||||
Demo demo = new Demo();
|
||||
demo.setName("张三");
|
||||
// 设置更新条件
|
||||
LambdaQueryWrapper<Demo> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Demo::isDeleted, false);
|
||||
// 执行更新操作
|
||||
boolean success = demoService.updateEntity(demo, wrapper);
|
||||
System.out.println(success);
|
||||
|
||||
// 输出
|
||||
===> true
|
||||
```
|
||||
|
||||
* 该接口也可以通过更新条件来执行更新,返回成功与失败,对于更新条件可以参考[mybatis-plus的UpdateWrapper文档](https://mybatis.plus/guide/wrapper.html#updatewrapper)。
|
||||
|
||||
### createOrUpdateEntity
|
||||
```java
|
||||
boolean createOrUpdateEntity(T entity);
|
||||
```
|
||||
> 该接口新建或更新一个实体到数据库,如果该实体主键有值,则更新到数据库,若主键无值,则新建一条记录到数据库,如果主键有值,但数据库中未找到,则报错,如:
|
||||
```java
|
||||
boolean success = demoService.createOrUpdateEntity(demo);
|
||||
System.out.println(success);
|
||||
|
||||
// 输出
|
||||
===> true
|
||||
```
|
||||
|
||||
### createOrUpdateEntities
|
||||
```java
|
||||
boolean createOrUpdateEntities(Collection entityList);
|
||||
```
|
||||
> 该接口将对一个Collection类型的列表中的每一个实体进行新建或更新到数据库,如:
|
||||
```java
|
||||
boolean success = demoService.createOrUpdateEntities(demoList);
|
||||
System.out.println(success);
|
||||
|
||||
// 输出
|
||||
===> true
|
||||
```
|
||||
|
||||
### deleteEntity
|
||||
```java
|
||||
boolean deleteEntity(Serializable id);
|
||||
```
|
||||
> 该接口通过主键字段对实体进行删除操作,如:
|
||||
```java
|
||||
boolean success = demoService.deleteEntity(demo.getId());
|
||||
System.out.println(success);
|
||||
|
||||
// 输出
|
||||
===> true
|
||||
```
|
||||
|
||||
### deletedEntities
|
||||
```java
|
||||
boolean deleteEntities(Wrapper queryWrapper);
|
||||
```
|
||||
> 该接口通过查询条件对符合该查询条件的所有记录进行删除操作,如:
|
||||
```java
|
||||
/*** 删除所有名称为“张三”的记录 **/
|
||||
// 设置查询条件
|
||||
LambdaQueryWrapper<Demo> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Demo::getName, "张三");
|
||||
// 执行删除操作
|
||||
boolean success = demoService.deleteEntities(wrapper);
|
||||
System.out.println(success);
|
||||
|
||||
// 输出
|
||||
===> true
|
||||
```
|
||||
|
||||
### getEntityListCount
|
||||
```java
|
||||
int getEntityListCount(Wrapper queryWrapper);
|
||||
```
|
||||
> 该方法将查询到符合条件的所有记录总条数,返回int类型的结果,如:
|
||||
```java
|
||||
/*** 查询名称为“张三”的记录总条数 **/
|
||||
LambdaQueryWrapper<Demo> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Demo::getName, "张三");
|
||||
// 获取总条数
|
||||
int count = demoService.getEntityListCount(wrapper);
|
||||
System.out.println(count);
|
||||
|
||||
// 输出
|
||||
===> true
|
||||
```
|
||||
|
||||
### getEntityList(Wrapper queryWrapper)
|
||||
* 该方法查询符合条件的所有实体列表,返回查询出的实体列表。
|
||||
```java
|
||||
List<T> getEntityList(Wrapper queryWrapper);
|
||||
```
|
||||
|
||||
* 该方法通过查询条件和分页参数查询出当前页的记录列表,返回查询出的实体列表。
|
||||
```java
|
||||
List<T> getEntityList(Wrapper queryWrapper, Pagination pagination);
|
||||
```
|
||||
|
||||
### getEntityListLimit
|
||||
> 该方法查询符合条件的指定数量的实体列表,返回查询出的实体列表。
|
||||
```java
|
||||
List<T> getEntityListLimit(Wrapper queryWrapper, int limitCount);
|
||||
```
|
||||
|
||||
### getEntityListByIds
|
||||
> 该方法通过主键列表,查询出该主键列表的所有实体列表,返回查询出的实体列表。
|
||||
```java
|
||||
List<T> getEntityListByIds(List ids);
|
||||
```
|
||||
|
||||
### getMapList
|
||||
> 该方法通过查询条件查询和分页参数出符合条件的Map列表,其中分页参数是可选参数,返回查询出的Map列表。
|
||||
```java
|
||||
List<Map<String, Object>> getMapList(Wrapper queryWrapper);
|
||||
List<Map<String, Object>> getMapList(Wrapper queryWrapper, Pagination pagination);
|
||||
```
|
||||
|
||||
### getKeyValueList
|
||||
> 该方法通过查询条件查询出查询出符合条件的 KeyValue 列表,该KeyValue是一个键值对,所以再查询条件中需要指定需要查询的字段。
|
||||
```java
|
||||
List<KeyValue> getKeyValueList(Wrapper queryWrapper);
|
||||
```
|
||||
|
||||
### getViewObject
|
||||
> 该方法通过主键,查询出该主键VO实例,返回一个VO实例。
|
||||
提示:如果该VO通过相应注解绑定了数据字典关联或者数据表关联,那么该方法也将查询出相对应的数据字典信息或者关联数据信息等。
|
||||
```java
|
||||
<VO> VO getViewObject(Serializable id, Class<VO> voClass);
|
||||
```
|
||||
|
||||
### getViewObjectList
|
||||
> 该方法通过查询条件,分页条件,查询出符合该查询条件的当页数据列表,返回一个VO实例列表。
|
||||
提示:如果该VO通过相应注解绑定了数据字典关联或数据表关联,那么该方法查询出的VO列表中,每一个VO元素也将有对应的数据字典信息或关联表信息等。
|
||||
```java
|
||||
<VO> List<VO> getViewObjectList(Wrapper queryWrapper, Pagination pagination, Class<VO> voClass);
|
||||
```
|
||||
### bindingFieldTo
|
||||
|
||||
```java
|
||||
FieldBinder<T> bindingFieldTo(List voList);
|
||||
EntityBinder<T> bindingEntityTo(List voList);
|
||||
```
|
||||
|
||||
### bindingEntityListTo
|
||||
```java
|
||||
EntityListBinder<T> bindingEntityListTo(List voList);
|
||||
```
|
|
@ -0,0 +1,102 @@
|
|||
# 无SQL关联
|
||||
|
||||
> diboot-core支持通过注解实现数据字典关联、单数据表关联、多数据表关联等功能。
|
||||
|
||||
## 如何开始
|
||||
> 您可以创建完一个表相对应的实体类、service接口、mapper等代码后,创建一个VO类来尝试该功能,如:
|
||||
```java
|
||||
package com.example.demo.vo;
|
||||
|
||||
import com.diboot.core.binding.annotation.BindDict;
|
||||
import com.diboot.core.binding.annotation.BindEntity;
|
||||
import com.diboot.core.binding.annotation.BindEntityList;
|
||||
import com.diboot.core.binding.annotation.BindField;
|
||||
import com.example.demo.entity.Demo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DemoVO extends Demo {
|
||||
private static final long serialVersionUID = 5476618743424368148L;
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
:::warning
|
||||
注:@BindDict注解需要依赖dictionary表,可配置参数 diboot.core.init-sql=true 初次启动时starter会自动安装 init-{db}.sql。 如不支持自动安装的数据库,需手动执行 diboot-core-*.jar/META-INF/sql/init-{db}.sql 。
|
||||
:::
|
||||
|
||||
## 处理方式
|
||||
1. 通过在VO类中添加相关字段,以及对应的关联绑定注解,来定义我们的绑定类型和需要得到的结果以及额外的条件等信息;
|
||||
2. 绑定完成后,我们需要调用**RelationsBinder**类中的相关方法类执行这个绑定关系,我们目前提供了两种方式可供处理:
|
||||
### 自动绑定关联
|
||||
> 该关联会自动将相关信息查询并设置到voList中,适用于对已有的voList做处理,如:
|
||||
```java
|
||||
//List<MyUserVO> voList = ...;
|
||||
RelationsBinder.bind(voList);
|
||||
```
|
||||
### 自动转型并绑定关联
|
||||
> 该关联会自动将vo所继承的父类的实体列表进行绑定并自动转型为voList,适用于对于非voList的实体列表等做处理,如:
|
||||
```java
|
||||
// 查询单表获取Entity集合
|
||||
// List<User> entityList = userService.list(queryWrapper);
|
||||
List<MyUserVO> voList = RelationsBinder.convertAndBind(userList, MyUserVO.class);
|
||||
```
|
||||
|
||||
## 数据字典关联
|
||||
* 如果您的实体类中要关联一种数据字典类型的相关数据,只需要使用BindDict注解即可实现数据字典的关联。
|
||||
* 比如您需要关联字典类型为USER_STATUS的数据,需要添加到VO类的字段如下所示:
|
||||
```java
|
||||
@BindDict(type="USER_STATUS", field = "status")
|
||||
private String statusLabel;
|
||||
```
|
||||
|
||||
## 数据表关联
|
||||
* 数据表关联按照关联表的方式上可分为**单数据表直接关联**与**中间表关联**这两种,中间表关联是一种通过中间表进行多对多的关联处理方案。
|
||||
* 按照得到结果的形式可分为**绑定关联表中对应字段**和**绑定关联表实体**这两种关联方式,前者得到关联表中的目标字段,后者得到关联表的整个实体。
|
||||
* **绑定关联表实体**即支持绑定单个实体,也支持绑定实体列表。
|
||||
* 支持对关联查询添加附加条件。
|
||||
> 直接关联与中间表关联只是传入的参数不同,而绑定表字段与绑定表实体是使用的不同注解。
|
||||
|
||||
### 绑定字段关联
|
||||
> 绑定字段使用**@BindField**注解进行处理,将得到关联表的目标字段的值
|
||||
* **单数据表直接关联**获取目标字段值,注解及参数示例如下:
|
||||
```java
|
||||
@BindField(entity=Department.class, field="name", condition="department_id=id AND parent_id>=0")
|
||||
private String deptName;
|
||||
```
|
||||
* **通过中间表进行多表关联的级联关联**绑定字段
|
||||
```java
|
||||
@BindField(entity = Organization.class, field="name", condition="this.department_id=department.id AND department.org_id=id")
|
||||
private String orgName;
|
||||
```
|
||||
|
||||
### 绑定单个关联实体
|
||||
> 绑定单个实体使用**@BindEntity**注解进行处理,将得到关联表对应的单个实体。
|
||||
* **单数据表直接关联**获取目标单个实体,注解及参数示例如下:
|
||||
```java
|
||||
@BindEntity(entity = Department.class, condition="department_id=id")
|
||||
private Department department;
|
||||
```
|
||||
* **通过中间表进行多表关联的级联关联**绑定对应单个实体,示例如下:
|
||||
```java
|
||||
@BindEntity(entity = Organization.class, condition = "this.department_id=department.id AND department.org_id=id AND department.deleted=0")
|
||||
private Organization organization;
|
||||
```
|
||||
|
||||
### 绑定实体列表
|
||||
> 绑定实体列表使用**@BindEntityList**注解进行处理,将得到关联表对应的实体列表。
|
||||
* **单数据表直接关联**获取目标的实体列表,注解及参数示例如下:
|
||||
```java
|
||||
// 关联其他表
|
||||
@BindEntity(entity = Department.class, condition="department_id=id")
|
||||
private List<Department> departmentList;
|
||||
|
||||
// 关联自身,实现无限极分类等
|
||||
@BindEntityList(entity = Department.class, condition = "id=parent_id")
|
||||
private List<Department> children;
|
||||
```
|
||||
* **通过中间表进行多表关联的级联关联**绑定对应的实体列表,示例如下:
|
||||
```java
|
||||
@BindEntityList(entity = Role.class, condition="this.id=user_role.user_id AND user_role.role_id=id")
|
||||
private List<Role> roleList;
|
||||
```
|
|
@ -1 +1,33 @@
|
|||
# 查询条件DTO
|
||||
# 查询条件DTO
|
||||
|
||||
> 用户可自定义相关实体的DTO类,将其在Controller类的相关方法中,自动转换为QueryWrapper进行条件查询时使用:
|
||||
|
||||
## 创建DTO
|
||||
```java
|
||||
public class UserDTO{
|
||||
// 无@BindQuery注解默认会映射为=条件
|
||||
private Long gender;
|
||||
|
||||
// 有注解,映射为注解指定条件
|
||||
@BindQuery(comparison = Comparison.LIKE)
|
||||
private String realname;
|
||||
|
||||
//... getter, setter方法等
|
||||
}
|
||||
```
|
||||
|
||||
## 自动转换
|
||||
> Controller类中对相关路由的查询条件可进行如下绑定:
|
||||
```java
|
||||
/**
|
||||
* url参数示例: /list?gender=M&realname=张
|
||||
* 将映射为 queryWrapper.eq("gender", "M").like("realname", "张")
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public JsonResult getVOList(UserDto userDto) throws Exception{
|
||||
//调用super.buildQueryWrapper(entityOrDto) 或者直接调用 QueryBuilder.toQueryWrapper(entityOrDto) 进行转换
|
||||
QueryWrapper<User> queryWrapper = super.buildQueryWrapper(userDto);
|
||||
//... 查询list
|
||||
return new JsonResult(Status.OK, list);
|
||||
}
|
||||
```
|
|
@ -0,0 +1,30 @@
|
|||
# 介绍
|
||||
|
||||
## diboot-devtools是什么?
|
||||
|
||||
> diboot-devtools是一个面向广大程序开发人员的开发助理,有了她,你可以摆脱重复性的Coding,更专注于业务分析,提高开发效率和代码质量。
|
||||
|
||||
## 我们的优势
|
||||
* 支持常用的五大数据库(MySQL,MariaDB,ORACLE,SQLServer, PostgreSQL)。
|
||||
* 安装简单,只需在项目中引入devtools依赖,添加相关配置信息后,即可启动运行。
|
||||
* 使用灵活,可按需启用更多功能。例如:是否开启引入 `Lombok`、`Swagger`等。
|
||||
* 基于主流框架,并依赖全新优化内核[diboot-core](https://github.com/dibo-software/diboot-v2/tree/master/diboot-core),保证生成的代码更简洁,质量更高。
|
||||
* 功能强大,更方便维护数据库表结构及关联关系,一键生成/更新代码。并以SQL方式保存更新内容,便于维护项目、或者发布到多个不同数据库使用。
|
||||
* 为SpringBoot量身打造,微服务、单体应用等一网打尽。
|
||||
* ORM框架使用Mybatis及更加方便的Mybatis-Plus,应用广泛且强大。
|
||||
|
||||
## 我们能帮您
|
||||
|
||||
### 解决软件工程的一些问题
|
||||
1. 将人们从繁琐的较为机械的工作中解放出来,将精力集中到更多需要人的创造性的工作上,促使人们更多地关注需求,做对的事。
|
||||
2. 可以让人们不接触代码地创建出一些通过界面设计出的业务功能,让人们可以验证某些想法,更为快捷且低成本的试错。
|
||||
3. 让开发人员免除基础的繁琐工作,提高开发效率,加快迭代速度,快人一步当然胜人一筹。
|
||||
### 解决数据结构设计的一些问题
|
||||
1. 传统的数据结构设计一般会借助一些软件来进行数据库设计,这样可以确保数据库结构与需求关联更加紧密,并且可视化,但这也造成了一些问题,比如数据库与代码是脱钩的,只能依靠程序员通过编码去将数据库与代码给串起来,但通过人力的形式在这之间操作效率是很低的。比如一个需求,需要改一个数据库字段,也需要开发人员在代码层面做对应的更改,这其实也是一个容易出错的过程。但我们的diboot轻代码平台,提供了基础的表的管理与设计功能,不但可以通过该功能设计表结构以及表与表之间、表与数据字典之间的关联关系,而且我们也内置了展示关联关系的E-R图模型展示,让您对数据模型也一目了然。在这整个过程中,这些数据结构也并不是独立存在的,表结构字段、关联关系都已经在devtools中与系统做了映射,更改数据结构后,也能重新生成相对应的代码,如果您已经更改了之前生成的代码也没关系,也可以选择更新代码,那么对数据结构的更改,就直接反馈到代码中了,而这一切,只需要您点下提交按钮即可。
|
||||
2. 由此可见,我们diboot对于数据结构设计带来的改变是颠覆性的,我们在devtools中提供了数据结构设计功能,并且让数据模型可视化,方便了数据结构的设计,数据结构与代码结构是自动对应起来的,中间少了人力的工作,提高了效率,减少了成本,并且可靠性也极大地提升了,这在系统上线之后的维护阶段,也是意义巨大的。
|
||||
### 解决软件开发效率的问题
|
||||
1. 我们的core项目内置了一些常用工具,以及一些底层模块,基于这些工具和底层模块,可以更快地开始开发工作,对于简化一些业务流程的开发是很有帮助的。
|
||||
2. 我们提供了一些常用的业务模块,开箱即用。
|
||||
3. devtools提供了数据结构设计,并生成基础代码以及接口代码,在数据结构更改后,也能智能地更改相关代码来适配这种数据结构更改。
|
||||
### 解决后期维护过程的一些麻烦
|
||||
1. 我们支持从已经更改过的代码来自动地更改字段等功能,也具有更加简洁的底层框架diboot-core,以及为spring boot打造的diboot-core-starter。
|
|
@ -3,14 +3,32 @@
|
|||
## diboot-devtools是什么?
|
||||
|
||||
> diboot-devtools是一个面向广大程序开发人员的开发助理,有了她,你可以摆脱重复性的Coding,更专注于业务分析,提高开发效率和代码质量。
|
||||
|
||||
## 我们的优势
|
||||
* 支持常用的五大数据库(MySQL,MariaDB,ORACLE,SQLServer, PostgreSQL)
|
||||
* 安装简单,只需在项目中引入devtools依赖,添加相关配置信息后,即可启动运行。
|
||||
* 使用灵活,可按需启用更多功能。例如:是否开启引入 `Lombok`、`Swagger`等。
|
||||
* 基于主流框架,并依赖全新优化内核[diboot-core](https://github.com/dibo-software/diboot-v2/tree/master/diboot-core),保证生成的代码更简洁,质量更高。
|
||||
* 功能强大,更方便维护数据库表结构及关联关系,一键生成/更新代码。并以SQL方式保存更新内容。
|
||||
* 基于Vue开发的前端页面性能更加高效、轻量化。
|
||||
* 功能强大,更方便维护数据库表结构及关联关系,一键生成/更新代码。并以SQL方式保存更新内容,便于维护项目、或者发布到多个不同数据库使用。
|
||||
|
||||
## 我们能帮您
|
||||
|
||||
## 引入依赖
|
||||
### 解决软件工程的一些问题:
|
||||
1. 将人们从繁琐的较为机械的工作中解放出来,将精力集中到更多需要人的创造性的工作上,促使人们更多地关注需求,做对的事。
|
||||
2. 可以让人们不接触代码地创建出一些通过界面设计出的业务功能,让人们可以验证某些想法,更为快捷且低成本的试错。
|
||||
3. 让开发人员免除基础的繁琐工作,提高开发效率,加快迭代速度,快人一步当然胜人一筹。
|
||||
### 解决数据结构设计的一些问题
|
||||
1. 传统的数据结构设计一般会借助一些软件来进行数据库设计,这样可以确保数据库结构与需求关联更加紧密,并且可视化,但这也造成了一些问题,比如数据库与代码是脱钩的,只能依靠程序员通过编码去将数据库与代码给串起来,但通过人力的形式在这之间操作效率是很低的,比如一个需求,需要改一个数据库字段,也需要开发人员在代码层面做对应的更改,这其实也是一个容易出错的过程。但我们的diboot轻代码平台,提供了基础的表的管理与设计功能,不但可以通过该功能设计表结构以及表与表之间、表与数据字典之间的关联关系,而且我们也内置了展示关联关系的E-R图模型展示,让您对数据模型也一目了然。在这整个过程中,这些数据结构也并不是独立存在的,表结构字段、关联关系都已经在devtools中与系统做了映射,更改数据结构后,也能重新生成相对应的代码,如果您已经更改了之前生成的代码也没关系,也可以选择更新代码,那么对数据结构的更改,就直接反馈到代码中了,而这一切,只需要您点下提交按钮即可。
|
||||
2. 由此可见,我们diboot对于数据结构设计带来的改变是颠覆性的,我们在devtools中提供了数据结构设计功能,并且让数据模型可视化,方便了数据结构的设计,数据结构与代码结构是自动对应起来的,中间少了人力的工作,提高了效率,减少了成本,并且可靠性也极大地提升了,这在系统上线之后的维护阶段,也是意义巨大的。
|
||||
### 解决软件开发效率的问题
|
||||
1. 我们的core项目内置了一些常用工具,以及一些底层模块,基于这些工具和底层模块,可以更快地开始开发工作,对于简化一些业务流程的开发是很有帮助的。
|
||||
2. 我们提供了一些常用的业务模块,开箱即用。
|
||||
3. devtools提供了数据结构设计,并生成基础代码以及接口代码,在数据结构更改后,也能智能地更改相关代码来适配这种数据结构更改。
|
||||
### 解决后期维护过程的一些麻烦。
|
||||
1. 我们支持从已经更改过的代码来自动地更改字段等功能,也具有更加简洁的底层框架diboot-core,以及为spring boot打造的diboot-core-starter。
|
||||
|
||||
## 开始使用
|
||||
### 引入依赖
|
||||
* Gradle项目
|
||||
1. 添加仓库地址
|
||||
在`build.gradle`的`repositories`配置项中添加仓库地址
|
||||
|
@ -44,7 +62,7 @@ compile ("com.diboot:diboot-devtools-spring-boot-starter:2.0.3")
|
|||
</dependency>
|
||||
```
|
||||
|
||||
## 添加配置信息
|
||||
### 添加配置信息
|
||||
* 配置信息示例
|
||||
```
|
||||
# Spring 相关配置
|
||||
|
@ -78,10 +96,5 @@ diboot.devtools.enable-diboot-shiro=false
|
|||
* diboot.devtools.enable-lombok:是否引入`Lombok`注解,若设置true,请注意添加Lombok依赖。
|
||||
* diboot.devtools.enable-diboot-shiro:是否引入`diboot-shiro`注解,若设置true,请注意添加diboot-shiro依赖。
|
||||
|
||||
## 初始化数据库
|
||||
diboot-devtools在初次运行中,会自动安装所需数据库表,如果已经存在,则不做操作。
|
||||
* diboot_cloumn_ext:diboot列定义扩展表
|
||||
|
||||
::: warning
|
||||
注:目前支持MySQL数据库。
|
||||
:::
|
||||
### 初始化数据库
|
||||
diboot-devtools在初次运行中,会自动安装所需数据库表,如果已经存在,则不做操作。
|
|
@ -0,0 +1,90 @@
|
|||
# 开始使用
|
||||
## 引入依赖
|
||||
* Gradle项目
|
||||
1. 添加仓库地址
|
||||
在`build.gradle`的`repositories`配置项中添加仓库地址
|
||||
```
|
||||
repositories {
|
||||
maven{ url 'http://maven.diboot.com/repository/devtools/'}
|
||||
}
|
||||
```
|
||||
2. 引入依赖
|
||||
```
|
||||
compile ("com.diboot:diboot-devtools-spring-boot-starter:2.0.3")
|
||||
```
|
||||
|
||||
* Maven项目
|
||||
1. 添加仓库地址
|
||||
在`pom.xml`的`repositories`标签中添加仓库地址
|
||||
```
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>diboot-devtools</id>
|
||||
<url>http://maven.diboot.com/repository/devtools/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
```
|
||||
2. 引入依赖
|
||||
```
|
||||
<dependency>
|
||||
<groupId>com.diboot</groupId>
|
||||
<artifactId>diboot-devtools-spring-boot-starter</artifactId>
|
||||
<version>2.0.3</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## 添加配置信息
|
||||
* 配置信息示例
|
||||
```
|
||||
# Spring 相关配置
|
||||
spring.main.allow-bean-definition-overriding=true
|
||||
|
||||
# diboot-devtools 相关配置
|
||||
diboot.devtools.codes-version=2.0.3
|
||||
diboot.devtools.codes-copyright=dibo.ltd
|
||||
diboot.devtools.codes-author=diboot
|
||||
diboot.devtools.output-path-entity=diboot-example/src/main/java/com/diboot/example/entity/
|
||||
diboot.devtools.output-path-vo=diboot-example/src/main/java/com/diboot/example/vo/
|
||||
diboot.devtools.output-path-service=diboot-example/src/main/java/com/diboot/example/service/
|
||||
diboot.devtools.output-path-mapper=diboot-example/src/main/java/com/diboot/example/mapper/
|
||||
diboot.devtools.output-path-controller=diboot-example/src/main/java/com/diboot/example/controller/
|
||||
diboot.devtools.output-path-sql=diboot-example/src/main/resources/
|
||||
diboot.devtools.enable-swagger=false
|
||||
diboot.devtools.enable-lombok=true
|
||||
diboot.devtools.enable-diboot-shiro=false
|
||||
```
|
||||
|
||||
* 配置信息说明
|
||||
|
||||
* spring.main.allow-bean-definition-overriding=true:遇到同样名字的Bean时,允许覆盖。
|
||||
|
||||
**以下diboot-devtools 相关配置均可根据实际情况填写**
|
||||
* diboot.devtools.codes-version:当前使用diboot-devtools的版本号。
|
||||
* diboot.devtools.codes-copyright:生成代码的版权归属,显示在每个类或接口的注释中。
|
||||
* diboot.devtools.codes-author:生成代码的作者,显示在每个类或接口的注释中。
|
||||
* diboot.devtools.output-path-*:分别指向当前项目中`Entity`、`VO`、`Service及其实现类`、`Mapper及映射文件`、`Controller`、`SQL文件所在的路径`。
|
||||
* diboot.devtools.enable-swagger:是否引入`Swagger`注解,若设置true,请注意添加Swagger依赖。
|
||||
* diboot.devtools.enable-lombok:是否引入`Lombok`注解,若设置true,请注意添加Lombok依赖。
|
||||
* diboot.devtools.enable-diboot-shiro:是否引入`diboot-shiro`注解,若设置true,请注意添加diboot-shiro依赖。
|
||||
|
||||
## 初始化数据库
|
||||
diboot-devtools在初次运行中,会自动安装所需数据库表,如果已经存在,则不做操作。
|
||||
|
||||
## 启动项目
|
||||
以SpringBoot项目在IntelliJ IDEA中的一种启动方式为例:
|
||||
|
||||
在项目入口文件 `Application` 上点击右键,在弹出的菜单上点击 `RUN 'Application'`。
|
||||
当出现类似下面提示时,表示启动成功:
|
||||
```
|
||||
: Started Application in 14.223 seconds (JVM running for 16.693)
|
||||
```
|
||||
|
||||
## 打开管理页面
|
||||
在控制台(Console)上的启动日志中,找到如下日志:
|
||||
```
|
||||
: Diboot devtools v2.0.3 开始初始化 ...
|
||||
: JDBC Connection [HikariProxyConnection@707108719 wrapping com.mysql.cj.jdbc.ConnectionImpl@7ccf6114] will not be managed by Spring
|
||||
: devtools UI初始化完成,URL: http://localhost:8080/example/diboot.html
|
||||
: Diboot devtools 初始化完成。
|
||||
```
|
||||
其中的`URL`即是管理页面的链接,点击打开即可。
|
Loading…
Reference in New Issue