diff --git a/diboot-docs/.vuepress/config.js b/diboot-docs/.vuepress/config.js index a84fb7e..d2262e1 100644 --- a/diboot-docs/.vuepress/config.js +++ b/diboot-docs/.vuepress/config.js @@ -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' }, { diff --git a/diboot-docs/guide/diboot-core/Mapper及自定义.md b/diboot-docs/guide/diboot-core/Mapper及自定义.md index f7f3f8a..f171340 100644 --- a/diboot-docs/guide/diboot-core/Mapper及自定义.md +++ b/diboot-docs/guide/diboot-core/Mapper及自定义.md @@ -1 +1,94 @@ -# Mapper及自定义 \ No newline at end of file +# 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 + + + + src/main/java + + **/*.xml + **/*.dtd + + false + + + +``` + +## 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 { + +} +``` + * 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 + + + + + +``` + +## 自定义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 { + + int forceDeleteEntities(@Param("name") String name); + +} +``` + +```xml + + + + + + DELETE FROM demo WHERE name=#{name} + + + +``` \ No newline at end of file diff --git a/diboot-docs/guide/diboot-core/Service与实现.md b/diboot-docs/guide/diboot-core/Service与实现.md index 585aa67..3e31136 100644 --- a/diboot-docs/guide/diboot-core/Service与实现.md +++ b/diboot-docs/guide/diboot-core/Service与实现.md @@ -1 +1,206 @@ -# Service与实现 \ No newline at end of file +# 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 { + +} +``` + +> 提示: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 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 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 wrapper = new LambdaQueryWrapper<>(); +wrapper.eq(Demo::getName, "张三"); +// 获取总条数 +int count = demoService.getEntityListCount(wrapper); +System.out.println(count); + +// 输出 +===> true +``` + +### getEntityList(Wrapper queryWrapper) +* 该方法查询符合条件的所有实体列表,返回查询出的实体列表。 +```java +List getEntityList(Wrapper queryWrapper); +``` + +* 该方法通过查询条件和分页参数查询出当前页的记录列表,返回查询出的实体列表。 +```java +List getEntityList(Wrapper queryWrapper, Pagination pagination); +``` + +### getEntityListLimit +> 该方法查询符合条件的指定数量的实体列表,返回查询出的实体列表。 +```java +List getEntityListLimit(Wrapper queryWrapper, int limitCount); +``` + +### getEntityListByIds +> 该方法通过主键列表,查询出该主键列表的所有实体列表,返回查询出的实体列表。 +```java +List getEntityListByIds(List ids); +``` + +### getMapList +> 该方法通过查询条件查询和分页参数出符合条件的Map列表,其中分页参数是可选参数,返回查询出的Map列表。 +```java +List> getMapList(Wrapper queryWrapper); +List> getMapList(Wrapper queryWrapper, Pagination pagination); +``` + +### getKeyValueList +> 该方法通过查询条件查询出查询出符合条件的 KeyValue 列表,该KeyValue是一个键值对,所以再查询条件中需要指定需要查询的字段。 +```java +List getKeyValueList(Wrapper queryWrapper); +``` + +### getViewObject +> 该方法通过主键,查询出该主键VO实例,返回一个VO实例。 +提示:如果该VO通过相应注解绑定了数据字典关联或者数据表关联,那么该方法也将查询出相对应的数据字典信息或者关联数据信息等。 +```java + VO getViewObject(Serializable id, Class voClass); +``` + +### getViewObjectList +> 该方法通过查询条件,分页条件,查询出符合该查询条件的当页数据列表,返回一个VO实例列表。 +提示:如果该VO通过相应注解绑定了数据字典关联或数据表关联,那么该方法查询出的VO列表中,每一个VO元素也将有对应的数据字典信息或关联表信息等。 +```java + List getViewObjectList(Wrapper queryWrapper, Pagination pagination, Class voClass); +``` +### bindingFieldTo + +```java +FieldBinder bindingFieldTo(List voList); +EntityBinder bindingEntityTo(List voList); +``` + +### bindingEntityListTo +```java +EntityListBinder bindingEntityListTo(List voList); +``` \ No newline at end of file diff --git a/diboot-docs/guide/diboot-core/无SQL关联.md b/diboot-docs/guide/diboot-core/无SQL关联.md new file mode 100644 index 0000000..1640902 --- /dev/null +++ b/diboot-docs/guide/diboot-core/无SQL关联.md @@ -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 voList = ...; +RelationsBinder.bind(voList); +``` +### 自动转型并绑定关联 +> 该关联会自动将vo所继承的父类的实体列表进行绑定并自动转型为voList,适用于对于非voList的实体列表等做处理,如: +```java +// 查询单表获取Entity集合 +// List entityList = userService.list(queryWrapper); +List 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 departmentList; + +// 关联自身,实现无限极分类等 +@BindEntityList(entity = Department.class, condition = "id=parent_id") +private List children; +``` +* **通过中间表进行多表关联的级联关联**绑定对应的实体列表,示例如下: +```java +@BindEntityList(entity = Role.class, condition="this.id=user_role.user_id AND user_role.role_id=id") +private List roleList; +``` diff --git a/diboot-docs/guide/diboot-core/查询条件DTO.md b/diboot-docs/guide/diboot-core/查询条件DTO.md index 7810262..77799bd 100644 --- a/diboot-docs/guide/diboot-core/查询条件DTO.md +++ b/diboot-docs/guide/diboot-core/查询条件DTO.md @@ -1 +1,33 @@ -# 查询条件DTO \ No newline at end of file +# 查询条件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 queryWrapper = super.buildQueryWrapper(userDto); + //... 查询list + return new JsonResult(Status.OK, list); +} +``` \ No newline at end of file diff --git a/diboot-docs/guide/diboot-devtools/介绍.md b/diboot-docs/guide/diboot-devtools/介绍.md new file mode 100644 index 0000000..51ea775 --- /dev/null +++ b/diboot-docs/guide/diboot-devtools/介绍.md @@ -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。 \ No newline at end of file diff --git a/diboot-docs/guide/diboot-devtools/安装.md b/diboot-docs/guide/diboot-devtools/安装.md index 90cd44f..f3711a1 100644 --- a/diboot-docs/guide/diboot-devtools/安装.md +++ b/diboot-docs/guide/diboot-devtools/安装.md @@ -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") ``` -## 添加配置信息 +### 添加配置信息 * 配置信息示例 ``` # 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数据库。 -::: \ No newline at end of file +### 初始化数据库 +diboot-devtools在初次运行中,会自动安装所需数据库表,如果已经存在,则不做操作。 \ No newline at end of file diff --git a/diboot-docs/guide/diboot-devtools/开始使用.md b/diboot-docs/guide/diboot-devtools/开始使用.md new file mode 100644 index 0000000..07e9ac4 --- /dev/null +++ b/diboot-docs/guide/diboot-devtools/开始使用.md @@ -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`标签中添加仓库地址 +``` + + + diboot-devtools + http://maven.diboot.com/repository/devtools/ + + +``` +2. 引入依赖 +``` + + com.diboot + diboot-devtools-spring-boot-starter + 2.0.3 + +``` + +## 添加配置信息 +* 配置信息示例 +``` +# 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`即是管理页面的链接,点击打开即可。 \ No newline at end of file