commit
a7f5c94abf
28
README.md
28
README.md
|
@ -4,17 +4,15 @@
|
|||
</a>
|
||||
</p>
|
||||
|
||||
# diboot-v2
|
||||
diboot 2.0版本项目,实现: diboot-core全新内核 + diboot-shiro-*权限控制 + diboot-components-*基础组件 + diboot-devtools代码生成平台。
|
||||
# diboot-v2 (重复的工作自动做)
|
||||
diboot 2.0版本项目,实现: diboot-core全新内核 + diboot-devtools代码生成平台 + 基础功能组件。
|
||||
|
||||
> diboot的设计目标:面向开发人员的低代码开发平台,提高开发效率和质量,提高代码可维护性。
|
||||
|
||||
## 技术交流QQ群: 731690096
|
||||
|
||||
> 复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情自动化
|
||||
> 把重复有规律的事情自动化
|
||||
|
||||
**2.0版devtools预计将于10月份发布,敬请期待。**
|
||||
|
||||
|
||||
## 一、 diboot-core: 精简优化内核
|
||||
全新精简内核,主要实现<font color="red">单表CRUD无SQL 和 多表关联查询绑定的无SQL</font>实现方案,并提供查询绑定等常用开发场景的简单封装。
|
||||
|
@ -37,19 +35,15 @@ diboot 2.0版本项目,实现: diboot-core全新内核 + diboot-shiro-*权限
|
|||
|
||||
|
||||
> .
|
||||
|
||||
|
||||
## 二、 diboot-shiro*: 基于RBAC+Shiro的权限认证模块
|
||||
RBAC的角色权限+基于Shiro的细粒度权限控制
|
||||
## 二、 diboot-devtools 代码生成工具
|
||||
#### 1. 支持常用的五大数据库(MySQL,MariaDB,ORACLE,SQLServer, PostgreSQL)。
|
||||
#### 2. 使用简单,只需在项目中引入devtools依赖,添加相关配置信息后,即可启动运行。
|
||||
#### 3. 基于主流框架(SpringBoot + Mybatis-Plus),打造全新优化内核,保证生成的代码更简洁,质量更高。
|
||||
#### 4. 功能强大,实现数据结构变更与代码联动同步,更方便维护数据库表结构及关联关系,一键生成/更新代码。
|
||||
#### 5. 通过devtools维护数据结构,标准化了数据结构定义,同时数据结构变动SQL会被自动记录,便于同步更新生产等环境数据库。
|
||||
#### 6. 使用灵活,可按需启用更多功能。例如:是否开启引入 `Lombok`、`Swagger`等。
|
||||
|
||||
### diboot-shiro 权限基础模块
|
||||
|
||||
### diboot-shiro-wx-* 微信服务号/企业号相关权限
|
||||
|
||||
具体请查看: [diboot-shiro README](https://github.com/dibo-software/diboot-v2/tree/master/diboot-shiro "注解自动绑定多表关联").
|
||||
|
||||
|
||||
## 三、 diboot-devtools 代码生成工具
|
||||
> 比 [diboot devtools 1.x 版本](https://www.diboot.com/) 更通用更强大的代码生成工具 ...
|
||||
> [我要试试](https://github.com/dibo-software/diboot-v2/blob/master/diboot-docs/guide/diboot-devtools/%E4%BB%8B%E7%BB%8D.md)
|
||||
|
||||
...
|
|
@ -48,18 +48,18 @@ private List<Role> roleList;
|
|||
### 1. 引入依赖
|
||||
Gradle:
|
||||
~~~gradle
|
||||
compile("com.diboot:diboot-core-spring-boot-starter:2.0.2")
|
||||
compile("com.diboot:diboot-core-spring-boot-starter:2.0.3")
|
||||
~~~
|
||||
或Maven
|
||||
~~~xml
|
||||
<dependency>
|
||||
<groupId>com.diboot</groupId>
|
||||
<artifactId>diboot-core-spring-boot-starter</artifactId>
|
||||
<version>2.0.2</version>
|
||||
<version>2.0.3</version>
|
||||
</dependency>
|
||||
~~~
|
||||
> 注: @BindDict注解需要依赖dictionary表,可配置参数 diboot.core.init-sql=true 初次启动时starter会自动安装 init-{db}.sql。
|
||||
如不支持自动安装的数据库,需手动执行 diboot-core-*.jar/META-INF/sql/init-{db}.sql 。
|
||||
> 注: @BindDict注解需要依赖dictionary表,初次启动时starter会自动创建该表。
|
||||
|
||||
### 2. 定义你的Service(继承diboot的BaseService或Mybatis-plus的ISerivice)及Mapper
|
||||
|
||||
### 3. 使用注解绑定:
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
# Ignore Gradle project-specific cache directory
|
||||
node_modules/
|
|
@ -42,8 +42,8 @@
|
|||
<ul>
|
||||
<li>电话:0512-62988949</li>
|
||||
<li>Q Q:281550336</li>
|
||||
<li>QQ群:731690096</li>
|
||||
<li>邮箱:service@dibo.ltd</li>
|
||||
<li>技术交流QQ群:731690096</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-item"></div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Service类
|
||||
|
||||
> 对于一个自定义的entity,您可以像以往的习惯一样开发service相关代码,如果需要使用diboot-core中封装好的一些接口,需要继承diboot-core中的BaSeService类,并传入对应的实体类。
|
||||
> 对于一个自定义的entity,您可以像以往的习惯一样开发service相关代码,但我们推荐您继承diboot-core中封装好的BaseService接口及BaseServiceImpl实现。
|
||||
|
||||
```java
|
||||
package com.example.demo.service;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
> 当两张表数据之间有直接的依赖关系时,如主外键关联关系,即可使用单表关联。在通过diboot-core的封装后,
|
||||
单表关联时开发者不再需要写大量java代码和SQL查询,只要使用相关注解即可快速绑定它们之间的关联关系。
|
||||
同时关联的实现是拆解关联查询为单表查询,可以更加高效利用数据库缓存和索引,提高查询效率。
|
||||
|
||||
## @BindField 注解
|
||||
|
||||
|
@ -17,7 +18,7 @@ entity表示关联实体,field表示关联表字段名,condition表示关联
|
|||
|
||||
该注解在单表关联时使用,用来将数据表中的某条数据映射到对应实体,使用方法如下:
|
||||
```java
|
||||
@BindEntity(entity = Department.class, condition = "this.id = if_employee_position_department.employee_id AND if_employee_position_department.department_id = id AND if_employee_position_department.deleted = 0")
|
||||
@BindEntity(entity = Department.class, condition = "this.id = employee_position_department.employee_id AND employee_position_department.department_id = id AND employee_position_department.deleted = 0")
|
||||
private Department department;
|
||||
```
|
||||
使用@BindEntity注解时需传两个参数,分别是entity和condition,
|
||||
|
|
|
@ -2,12 +2,13 @@
|
|||
|
||||
> 当两张表数据之间是通过第三张表来产生依赖关系时,即可使用多表关联。在通过diboot-core的封装后,
|
||||
多表关联时开发者不再需要写大量java代码和SQL查询,只要使用相关注解即可快速绑定它们之间的关联关系。
|
||||
同时关联的实现是拆解关联查询为单表查询,可以更加高效利用数据库缓存和索引,提高查询效率。
|
||||
|
||||
## @BindEntityList 注解
|
||||
|
||||
该注解在多表关联时使用,用来将数据表中的单条或多条数据映射到对应的实体集合,使用方法如下:
|
||||
```java
|
||||
@BindEntityList(entity = Department.class, condition = "this.id = if_position_department.position_id AND if_position_department.department_id = id AND if_position_department.deleted = 0")
|
||||
@BindEntityList(entity = Department.class, condition = "this.id = position_department.position_id AND position_department.department_id = id AND position_department.deleted = 0")
|
||||
private List<Department> departmentList;
|
||||
```
|
||||
使用@BindEntityList注解时需传两个参数,分别是entity和condition,
|
||||
|
|
|
@ -2,18 +2,16 @@
|
|||
|
||||
## diboot-core是什么?
|
||||
|
||||
> diboot-core是diboot2.0版本的核心基础框架,基于Spring,Mybatis-plus等知名开源项目。
|
||||
> diboot-core 是 diboot 2.0版本的核心基础框架,基于Spring Boot、Mybatis-plus封装,实现基础代码的简化及高效。
|
||||
> 使用diboot-core可以更加简单快捷地创建web后端应用,您之前的诸多代码将被极大简化,系统也更容易维护。同时搭档[devtools](https://github.com/dibo-software/diboot-v2-example/tree/master/diboot-devtools-example),你需要写的仅有业务逻辑代码。
|
||||
|
||||
* 使用diboot-core可以更加简单且方便地创建您的web后端应用,您之前的诸多工作也将得到极大的放松,我们为您准备了常用的各种工具类函数;
|
||||
* 我们为你配置好了mybatis-plus,方便你进行单表CRUD无SQL的探索;
|
||||
* 我们也为您提供了多表关联查询的无SQL实现方案,这里的多表不只是两张表之间的关联,而且还可以处理三张表之间的关联,只需要一个注解,你就可以快速处理完以往要好些代码才能处理好的事情;
|
||||
* 我们为您提供了数据字典的管理与接口;
|
||||
* 我们在diboot-core中还提供了其他常用开发场景的简单封装。
|
||||
* 集成了[mybatis-plus](https://mp.baomidou.com/),以实现单表CRUD无SQL。
|
||||
* 扩展实现了多表关联查询的无SQL方案,只需要一个简单注解@Bind*,就可以实现关联对象(含字段、实体、实体集合等)的数据绑定,且实现方案是将关联查询拆解为单表查询,保障最佳性能。
|
||||
* 支持@BindDict注解简单绑定数据字典,实现value-name转换。
|
||||
* 实现了Entity/DTO自动转换为QueryWrapper(@BindQuery注解绑定字段参数对应的查询条件,无需再手动构建QueryWrapper查询条件)。
|
||||
* 另外还提供其他常用开发场景的最佳实践封装。
|
||||
* 我们还封装了[diboot-core-starter](https://github.com/dibo-software/diboot-v2-example/tree/master/diboot-core-example),简化diboot-core的初始化配置(自动配置、自动创建数据字典表)
|
||||
|
||||
## 依赖引入
|
||||
## diboot-core使用
|
||||
|
||||
可以从**Maven中央仓库**搜索[diboot-core](https://mvnrepository.com/artifact/com.diboot/diboot-core),刷新项目即可。
|
||||
|
||||
## 初始化数据库
|
||||
|
||||
diboot-core在初次运行中,会自动安装所需数据库表,如果已经存在,则不做操作。
|
||||
请参考 [diboot-core README](https://github.com/dibo-software/diboot-v2/tree/master/diboot-core)
|
|
@ -1,12 +1,12 @@
|
|||
# 实体Entity
|
||||
|
||||
> diboot-core中的实体与1.x版本的model一样,我们为了命名更加规范,这里改用entity,下文简称实体。
|
||||
> diboot-core中的实体Entity是与数据库表对应的映射对象,下文简称实体。
|
||||
|
||||
所有实体统一存放在entity包名下,命名一般将表名转换为驼峰命名法命名再首字母大写即可,比如**sys_user**的实体名为**SysUser。**
|
||||
所有实体统一存放在entity包名下,命名采用将表名转换为首字母大写的驼峰命名法命名,比如**sys_user**的实体名为**SysUser。**
|
||||
|
||||
## BaseEntity
|
||||
|
||||
> BaseEntity是diboot-core提供的基础实体类,提供了我们默认数据表结构的默认字段,比如id、deleted、create_time等,默认的方法如toMap、toString方法等。
|
||||
> BaseEntity是diboot-core提供的基础实体类,提供了我们默认数据表结构的默认字段,比如id、is_deleted、create_time等,默认的方法如toMap等。
|
||||
|
||||
## BaseExtEntity
|
||||
|
||||
|
|
|
@ -214,7 +214,7 @@ Object obj = ContextHelper.getBean(beanId);
|
|||
//方法定义
|
||||
public static Object getBean(Class type){...}
|
||||
//方法调用示例
|
||||
Object obj = ContextHelper.getBean(Organization.class);
|
||||
OrganizationService service = ContextHelper.getBean(OrganizationService.class);
|
||||
```
|
||||
|
||||
* getBeans 方法
|
||||
|
@ -222,10 +222,7 @@ Object obj = ContextHelper.getBean(Organization.class);
|
|||
//方法定义
|
||||
public static <T> List<T> getBeans(Class<T> type){...}
|
||||
//方法调用示例
|
||||
List<Organization> orgList = ContextHelper.getBeans(Organization.class);
|
||||
System.out.println(orgList.get(0).getName());
|
||||
//执行结果
|
||||
===> xxx有限公司
|
||||
List<OrganizationService> orgServiceList = ContextHelper.getBeans(OrganizationService.class);
|
||||
```
|
||||
该方法用来获取指定类型的全部实例,入参为类类型(type)。
|
||||
|
||||
|
@ -233,8 +230,7 @@ System.out.println(orgList.get(0).getName());
|
|||
```java
|
||||
//方法定义
|
||||
public static List<Object> getBeansByAnnotation(Class<? extends Annotation> annotationType){...}
|
||||
//方法调用示例
|
||||
List<Object> objList = ContextHelper.getBeansByAnnotation(Organization.class);
|
||||
// 同Spring 的 getBeansWithAnnotation
|
||||
```
|
||||
该方法用来根据注解获取beans,入参为类类型(annotationType)。
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# 数据字典关联
|
||||
# 数据字典关联绑定
|
||||
|
||||
> 当表中的字段为数据字典类型的值时,可使用数据字典关联来绑定表字段与数据字典的关联关系。在通过diboot-core的封装后,
|
||||
数据字典关联时开发者不再需要写大量java代码和SQL查询,只要使用相关注解即可快速绑定它们之间的关联关系。
|
||||
数据字典关联时开发者不再需要写大量java代码和SQL关联查询,只要使用相关注解即可快速转换值value为标签/名称name。
|
||||
|
||||
## @BindDict 注解
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ public class DemoVO extends Demo {
|
|||
```
|
||||
|
||||
:::warning
|
||||
注:@BindDict注解需要依赖dictionary表,可配置参数 diboot.core.init-sql=true 初次启动时starter会自动安装 init-{db}.sql。 如不支持自动安装的数据库,需手动执行 diboot-core-*.jar/META-INF/sql/init-{db}.sql 。
|
||||
注:@BindDict注解需要依赖dictionary表,初次启动时starter会自动安装。
|
||||
:::
|
||||
|
||||
## 处理方式
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
|
@ -1,30 +1,37 @@
|
|||
# 介绍
|
||||
|
||||
## diboot-devtools是什么?
|
||||
## diboot-devtools是什么?
|
||||
|
||||
> diboot-devtools是一个面向广大程序开发人员的开发助理,有了她,你可以摆脱重复性的Coding,更专注于业务分析,提高开发效率和代码质量。
|
||||
> diboot-devtools是一个面向Java开发人员的开发助理,有了她,你可以摆脱重复性的Coding,更专注于业务分析,提高开发效率和代码质量。
|
||||
|
||||
> **diboot-devtools - 将重复有规律的事情自动化**
|
||||
|
||||
## 我们的优势
|
||||
* 支持常用的五大数据库(MySQL,MariaDB,ORACLE,SQLServer, PostgreSQL)。
|
||||
* 安装简单,只需在项目中引入devtools依赖,添加相关配置信息后,即可启动运行。
|
||||
* 使用简单,只需在项目中引入devtools依赖,添加相关配置信息后,即可启动运行。
|
||||
* 基于主流框架(SpringBoot + Mybatis-Plus),打造全新优化内核[diboot-core](https://github.com/dibo-software/diboot-v2/tree/master/diboot-core),保证生成的代码更简洁,质量更高。
|
||||
* 功能强大,实现数据结构变更与代码联动同步,更方便维护数据库表结构及关联关系,一键生成/更新代码。
|
||||
* 通过devtools维护数据结构,标准化了数据结构定义,同时数据结构变动SQL会被自动记录,便于同步更新生产等环境数据库。
|
||||
* 使用灵活,可按需启用更多功能。例如:是否开启引入 `Lombok`、`Swagger`等。
|
||||
* 基于主流框架,并依赖全新优化内核[diboot-core](https://github.com/dibo-software/diboot-v2/tree/master/diboot-core),保证生成的代码更简洁,质量更高。
|
||||
* 功能强大,更方便维护数据库表结构及关联关系,一键生成/更新代码。并以SQL方式保存更新内容,便于维护项目、或者发布到多个不同数据库使用。
|
||||
* 为SpringBoot量身打造,微服务、单体应用等一网打尽。
|
||||
* ORM框架使用Mybatis及更加方便的Mybatis-Plus,应用广泛且强大。
|
||||
* 适用场景广,紧随SpringBoot步伐迭代,微服务、单体应用等开发场景通用。
|
||||
|
||||
## 我们能帮您
|
||||
|
||||
### 解决软件工程的一些问题
|
||||
1. 将人们从繁琐的较为机械的工作中解放出来,将精力集中到更多需要人的创造性的工作上,促使人们更多地关注需求,做对的事。
|
||||
2. 可以让人们不接触代码地创建出一些通过界面设计出的业务功能,让人们可以验证某些想法,更为快捷且低成本的试错。
|
||||
3. 让开发人员免除基础的繁琐工作,提高开发效率,加快迭代速度,快人一步当然胜人一筹。
|
||||
### 解决数据结构设计的一些问题
|
||||
1. 传统的数据结构设计一般会借助一些软件来进行数据库设计,这样可以确保数据库结构与需求关联更加紧密,并且可视化,但这也造成了一些问题,比如数据库与代码是脱钩的,只能依靠程序员通过编码去将数据库与代码给串起来,但通过人力的形式在这之间操作效率是很低的。比如一个需求,需要改一个数据库字段,也需要开发人员在代码层面做对应的更改,这其实也是一个容易出错的过程。但我们的diboot轻代码平台,提供了基础的表的管理与设计功能,不但可以通过该功能设计表结构以及表与表之间、表与数据字典之间的关联关系,而且我们也内置了展示关联关系的E-R图模型展示,让您对数据模型也一目了然。在这整个过程中,这些数据结构也并不是独立存在的,表结构字段、关联关系都已经在devtools中与系统做了映射,更改数据结构后,也能重新生成相对应的代码,如果您已经更改了之前生成的代码也没关系,也可以选择更新代码,那么对数据结构的更改,就直接反馈到代码中了,而这一切,只需要您点下提交按钮即可。
|
||||
2. 由此可见,我们diboot对于数据结构设计带来的改变是颠覆性的,我们在devtools中提供了数据结构设计功能,并且让数据模型可视化,方便了数据结构的设计,数据结构与代码结构是自动对应起来的,中间少了人力的工作,提高了效率,减少了成本,并且可靠性也极大地提升了,这在系统上线之后的维护阶段,也是意义巨大的。
|
||||
### 解决软件开发过程中的重复性问题
|
||||
1. 将开发人员从繁琐的机械式的工作中解放出来,将精力集中到更多需要业务实现的工作上,促使人们更多地关注需求,做对的事。
|
||||
2. 让开发人员提高开发效率和质量,使软件系统的代码标准统一,降低维护成本。
|
||||
|
||||
### 解决数据结构与代码联动同步问题
|
||||
1. 传统的开发模式是:先通过客户端修改数据结构,然后再回到代码,新建实体和CRUD、调整字段、改SQL等,过程繁琐易出错。
|
||||
而diboot-devtools,提供了增强的数据结构维护功能,除了基础的表结构维护功能外,还支持配置表关联、数据字典关联,同时可以通过查看关联关系的E-R图,对数据模型一目了然。
|
||||
通过devtools所做的数据结构及关联的更改,都能同步生成或更新相对应的Java代码。数据结构与代码同步的自动化,您只需要喝着咖啡点下提交按钮即可。
|
||||
2. 通过devtools维护数据结构,标准化了数据结构定义,同时数据结构变动SQL会被自动记录,便于同步更新非开发环境数据库,避免生产环境漏执行SQL的问题。
|
||||
3. 可以说,devtools对于数据结构设计带来的改变是全方位的,我们在devtools中提供的数据结构设计和数据模型可视化,以及与代码的联动更新,都在推动一个目标:标准化、自动化、高质量、高效率。
|
||||
|
||||
### 解决软件开发效率的问题
|
||||
1. 我们的core项目内置了一些常用工具,以及一些底层模块,基于这些工具和底层模块,可以更快地开始开发工作,对于简化一些业务流程的开发是很有帮助的。
|
||||
2. 我们提供了一些常用的业务模块,开箱即用。
|
||||
3. devtools提供了数据结构设计,并生成基础代码以及接口代码,在数据结构更改后,也能智能地更改相关代码来适配这种数据结构更改。
|
||||
### 解决后期维护过程的一些麻烦
|
||||
1. 我们支持从已经更改过的代码来自动地更改字段等功能,也具有更加简洁的底层框架diboot-core,以及为spring boot打造的diboot-core-starter。
|
||||
1. diboot-core项目极大精简了CRUD和简单关联场景的实现代码,并内置了一些常用工具,以及一些底层模块,基于这些工具和底层模块,可以更快地开始开发工作。
|
||||
2. devtools实现了数据结构与代码联动,在数据结构更改后,也能智能地更新相关代码。
|
||||
3. devtools还会逐步提供一些常用的功能模块,开箱即用。
|
||||
|
||||
### 降低后期维护成本
|
||||
1. 上面的这波操作,带来的另外一个好处是:需要开发人员写的只有真正的业务逻辑代码,代码的可维护性提高。
|
|
@ -17,4 +17,16 @@
|
|||
: devtools UI初始化完成,URL: http://localhost:8080/example/diboot.html
|
||||
: Diboot devtools 初始化完成。
|
||||
```
|
||||
其中的`URL`即是管理页面的链接,点击打开即可。
|
||||
其中的`URL`即是管理页面的链接,点击即可打开Devtools操作界面。
|
||||
|
||||
## 注意
|
||||
Devtools是用于开发过程的助手工具,切勿发布至其他环境。对于非开发需要取消devtools的依赖:
|
||||
方式一(推荐):
|
||||
非开发环境取消依赖 diboot-devtools-spring-boot-starter,改为只依赖 diboot-core-spring-boot-starter
|
||||
|
||||
方式二:
|
||||
在application.properties中增加配置,禁用devtools:
|
||||
```
|
||||
diboot.devtools.disabled=true
|
||||
```
|
||||
|
||||
|
|
|
@ -1,59 +1,10 @@
|
|||
# 安装
|
||||
|
||||
## 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方式保存更新内容,便于维护项目、或者发布到多个不同数据库使用。
|
||||
|
||||
## 我们能帮您
|
||||
|
||||
### 解决软件工程的一些问题:
|
||||
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`配置项中添加仓库地址
|
||||
```
|
||||
repositories {
|
||||
maven{ url 'http://maven.diboot.com/repository/devtools/'}
|
||||
}
|
||||
```
|
||||
2. 引入依赖
|
||||
# 安装&使用
|
||||
## 引入依赖
|
||||
* Gradle项目引入依赖
|
||||
```
|
||||
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. 引入依赖
|
||||
* Maven项目引入依赖
|
||||
```
|
||||
<dependency>
|
||||
<groupId>com.diboot</groupId>
|
||||
|
@ -62,39 +13,27 @@ compile ("com.diboot:diboot-devtools-spring-boot-starter:2.0.3")
|
|||
</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.codes-version=1.0
|
||||
diboot.devtools.codes-copyright=MyCompany
|
||||
diboot.devtools.codes-author=MyName
|
||||
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
|
||||
#diboot.devtools.enable-swagger=false
|
||||
```
|
||||
|
||||
* 配置信息说明
|
||||
* 配置信息说明见[开始使用](开始使用.md)
|
||||
|
||||
* 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在初次运行中,会自动安装所需数据库表,如果已经存在,则不做操作。
|
|
@ -1,30 +1,10 @@
|
|||
# 开始使用
|
||||
## 引入依赖
|
||||
* Gradle项目
|
||||
1. 添加仓库地址
|
||||
在`build.gradle`的`repositories`配置项中添加仓库地址
|
||||
```
|
||||
repositories {
|
||||
maven{ url 'http://maven.diboot.com/repository/devtools/'}
|
||||
}
|
||||
```
|
||||
2. 引入依赖
|
||||
* Gradle项目引入依赖
|
||||
```
|
||||
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. 引入依赖
|
||||
* Maven项目引入依赖
|
||||
```
|
||||
<dependency>
|
||||
<groupId>com.diboot</groupId>
|
||||
|
@ -40,18 +20,17 @@ compile ("com.diboot:diboot-devtools-spring-boot-starter:2.0.3")
|
|||
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.codes-version=1.0
|
||||
diboot.devtools.codes-copyright=MyCompany
|
||||
diboot.devtools.codes-author=MyName
|
||||
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
|
||||
#diboot.devtools.enable-swagger=false
|
||||
```
|
||||
|
||||
* 配置信息说明
|
||||
|
@ -63,9 +42,8 @@ diboot.devtools.enable-diboot-shiro=false
|
|||
* 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.enable-swagger:是否引入`Swagger`注解,若设置true,请注意添加Swagger依赖。
|
||||
|
||||
:::warning
|
||||
如果您使用的是**PostgreSQL数据库**,那么需要额外添加两行配置,以此来适配boolean类型字段所对应的数据库的boolean类型,需添加的配置如下:
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
# 数据表管理
|
||||
* 项目开发过程中,通过数据库管理工具创建表时,可选择同时生成代码(`Entity`、`VO`、`Service及其实现类`、`Mapper及映射文件`、`Controller`),并保存相关SQL更新历史。
|
||||
* 通过数据库管理工具修改表、字段及关联关系时,也将同步地更改后端代码,让您彻底摆脱繁琐的CRUD。
|
||||
* 通过数据库管理工具修改表、字段及关联关系时,也将同步地更改后端代码,让您彻底摆脱繁琐的CRUD和简单关联查询。
|
||||
* 数据库管理工具中可以填写字段的样例数据,devtools会自动插入到表中作为后续生成预览等的样例展示。
|
||||
|
||||
## 创建数据表
|
||||
> 点击数据表的列表栏上方"**+**"按钮,打开创建表窗口。可以使用**引导建表**和**SQL建表**两种方式来创建数据库表。
|
||||
|
||||
![添加数据表按钮](./images/添加数据表按钮.png)
|
||||
|
||||
|
||||
|
||||
1. 引导建表
|
||||
|
||||
* 数据库表名:建议使用英文小写命名,多个单词以下划线分隔。
|
||||
|
@ -17,7 +21,7 @@
|
|||
* 预置字段:
|
||||
* id:
|
||||
* extdata:扩展字段,用来存放该表各类相关冗余数据的json字符串,比如:存放冗余的创建人姓名等。
|
||||
* deleted:是否已删除,用来表明该条数据是否已删除,该字段默认为1代表已删除,0代表未删除。
|
||||
* is_deleted:逻辑删除标记字段,用来表明该条数据是否已删除,默认为0代表未删除,1代表已删除。
|
||||
* create_by:创建人id。
|
||||
* create_time:创建时间,数据库默认值为创建时的当前系统时间。
|
||||
* update_time:更新时间,数据库默认值为更新时的当前系统时间。
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
package com.diboot.shiro.dto;
|
||||
|
||||
import com.diboot.shiro.entity.SysUser;
|
||||
import com.diboot.shiro.enums.IUserType;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 账号修改类
|
||||
* @author : wee
|
||||
* @version : v2.0
|
||||
* @Date 2019-10-23 13:57
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class AccountDTO {
|
||||
|
||||
/**
|
||||
* 账号id
|
||||
* {@link SysUser#getId()}
|
||||
*/
|
||||
private Long accountId;
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 旧密码
|
||||
*/
|
||||
private String oldPassword;
|
||||
|
||||
|
||||
/**
|
||||
* 新密码
|
||||
*/
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* 新重复密码
|
||||
*/
|
||||
private String rePassword;
|
||||
|
||||
/**
|
||||
* 用户类型
|
||||
*/
|
||||
private String userType;
|
||||
|
||||
|
||||
}
|
|
@ -84,4 +84,10 @@ public class SysUser extends BaseEntity {
|
|||
|
||||
@TableField(exist = false)
|
||||
private Boolean admin;
|
||||
|
||||
/**
|
||||
* 默认需要创建角色,如果不需要设置为false即可
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private Boolean createRole = true;
|
||||
}
|
||||
|
|
|
@ -2,12 +2,14 @@ package com.diboot.shiro.jwt;
|
|||
|
||||
import com.diboot.core.entity.BaseEntity;
|
||||
import com.diboot.core.util.V;
|
||||
import com.diboot.core.vo.Status;
|
||||
import com.diboot.shiro.entity.Permission;
|
||||
import com.diboot.shiro.entity.SysUser;
|
||||
import com.diboot.shiro.service.AuthWayService;
|
||||
import com.diboot.shiro.service.RoleService;
|
||||
import com.diboot.shiro.service.UserRoleService;
|
||||
import com.diboot.shiro.vo.RoleVO;
|
||||
import org.apache.shiro.ShiroException;
|
||||
import org.apache.shiro.authc.AuthenticationException;
|
||||
import org.apache.shiro.authc.AuthenticationInfo;
|
||||
import org.apache.shiro.authc.AuthenticationToken;
|
||||
|
@ -55,7 +57,6 @@ public class BaseJwtRealm extends AuthorizingRealm {
|
|||
BaseJwtAuthenticationToken jwtToken = (BaseJwtAuthenticationToken) token;
|
||||
|
||||
String account = (String) jwtToken.getPrincipal();
|
||||
|
||||
if (V.isEmpty(account)){
|
||||
throw new AuthenticationException("无效的token");
|
||||
}
|
||||
|
@ -63,12 +64,15 @@ public class BaseJwtRealm extends AuthorizingRealm {
|
|||
// 获取认证方式
|
||||
AuthWayService authWayService = jwtToken.getAuthWayService();
|
||||
|
||||
BaseEntity user = authWayService.getUser();
|
||||
SysUser user = authWayService.getUser();
|
||||
|
||||
// 登录失败则抛出相关异常
|
||||
if (user == null){
|
||||
throw new AuthenticationException("用户不存在");
|
||||
}
|
||||
if (!jwtToken.getStatusList().contains(user.getStatus())) {
|
||||
throw new AuthenticationException("用户暂时不可用!");
|
||||
}
|
||||
|
||||
if (authWayService.requirePassword() && !authWayService.isPasswordMatch()){
|
||||
throw new AuthenticationException("用户名或密码错误");
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.diboot.shiro.service;
|
||||
|
||||
import com.diboot.core.service.BaseService;
|
||||
import com.diboot.shiro.dto.AccountDTO;
|
||||
import com.diboot.shiro.entity.SysUser;
|
||||
import com.diboot.shiro.entity.TokenAccountInfo;
|
||||
import com.diboot.shiro.enums.IUserType;
|
||||
|
@ -59,6 +60,13 @@ public interface SysUserService extends BaseService<SysUser> {
|
|||
* @throws Exception
|
||||
*/
|
||||
SysUser getLoginAccountInfo(TokenAccountInfo account) throws Exception;
|
||||
/**
|
||||
* 通过账户和类别获取用户
|
||||
* @param account
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
SysUser getByAccountInfo(TokenAccountInfo account) throws Exception;
|
||||
|
||||
/**
|
||||
* 根据用户信息的id 和 用户类型,获取对应的账户 和 账户关联的信息
|
||||
|
@ -76,4 +84,18 @@ public interface SysUserService extends BaseService<SysUser> {
|
|||
*/
|
||||
SysUser getSysUser(Long userId, IUserType iUserType);
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
* @param accountDTO
|
||||
* @return
|
||||
*/
|
||||
boolean changePassword(AccountDTO accountDTO);
|
||||
|
||||
/**
|
||||
* 修改账号
|
||||
* @param accountDTO
|
||||
* @return
|
||||
*/
|
||||
boolean changeAccount(AccountDTO accountDTO);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
package com.diboot.shiro.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.additional.update.impl.UpdateChainWrapper;
|
||||
import com.diboot.core.service.impl.BaseServiceImpl;
|
||||
import com.diboot.core.util.BeanUtils;
|
||||
import com.diboot.core.util.S;
|
||||
import com.diboot.core.util.V;
|
||||
import com.diboot.core.vo.Status;
|
||||
import com.diboot.shiro.authz.config.SystemParamConfig;
|
||||
import com.diboot.shiro.dto.AccountDTO;
|
||||
import com.diboot.shiro.entity.*;
|
||||
import com.diboot.shiro.enums.IUserType;
|
||||
import com.diboot.shiro.exception.ShiroCustomException;
|
||||
|
@ -17,6 +21,7 @@ import com.diboot.shiro.service.RoleService;
|
|||
import com.diboot.shiro.service.SysUserService;
|
||||
import com.diboot.shiro.service.UserRoleService;
|
||||
import com.diboot.shiro.util.AuthHelper;
|
||||
import com.diboot.shiro.util.JwtHelper;
|
||||
import com.diboot.shiro.vo.RoleVO;
|
||||
import com.diboot.shiro.vo.SysUserVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -83,10 +88,13 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser>
|
|||
if(!success){
|
||||
throw new ShiroCustomException(Status.FAIL_VALIDATION, "创建用户失败!");
|
||||
}
|
||||
//构建 + 创建(账户-角色)关系
|
||||
success = this.createUserRole(sysUser);
|
||||
if (!success) {
|
||||
throw new ShiroCustomException(Status.FAIL_VALIDATION, "创建用户失败!");
|
||||
//设置是否创建角色
|
||||
if (sysUser.getCreateRole()) {
|
||||
//构建 + 创建(账户-角色)关系
|
||||
success = this.createUserRole(sysUser);
|
||||
if (!success) {
|
||||
throw new ShiroCustomException(Status.FAIL_VALIDATION, "创建用户失败!");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -163,12 +171,20 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser>
|
|||
//构建关系
|
||||
Map<Long, SysUser> sysUserMap = buildSysUserAndRoleAndPermissionRelation(sysUserList);
|
||||
SysUser sysUser = sysUserMap.get(sysUserList.get(0).getUserId());
|
||||
if (V.isEmpty(sysUser.getRoleVOList())) {
|
||||
throw new ShiroCustomException(Status.FAIL_OPERATION, "未配置角色,获取数据失败");
|
||||
}
|
||||
// if (V.isEmpty(sysUser.getRoleVOList())) {
|
||||
// throw new ShiroCustomException(Status.FAIL_OPERATION, "未配置角色,获取数据失败");
|
||||
// }
|
||||
return sysUser;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysUser getByAccountInfo(TokenAccountInfo account) throws Exception {
|
||||
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = Wrappers.<SysUser>lambdaQuery()
|
||||
.eq(SysUser::getUsername, account.getAccount())
|
||||
.eq(SysUser::getUserType, account.getUserType());
|
||||
return getOne(sysUserLambdaQueryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Long, SysUser> getSysUserListWithRolesAndPermissionsByUserIdList(List<Long> userIdList, IUserType iUserType) {
|
||||
//1、获取账户信息
|
||||
|
@ -201,6 +217,39 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser>
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean changePassword(AccountDTO accountDTO) {
|
||||
SysUser dbSysUser = getById(accountDTO.getAccountId());
|
||||
if (V.isEmpty(dbSysUser)) {
|
||||
throw new ShiroCustomException(Status.FAIL_OPERATION, "用户不存在,修改密码失败");
|
||||
}
|
||||
if (V.isEmpty(accountDTO.getPassword()) || V.isEmpty(accountDTO.getRePassword()) || V.isEmpty(accountDTO.getOldPassword())) {
|
||||
throw new ShiroCustomException(Status.FAIL_OPERATION, "新旧密码不能为空");
|
||||
}
|
||||
if (!accountDTO.getPassword().equals(accountDTO.getRePassword())) {
|
||||
throw new ShiroCustomException(Status.FAIL_OPERATION, "两次密码不一致");
|
||||
}
|
||||
|
||||
if (!S.equals(AuthHelper.encryptMD5(accountDTO.getOldPassword(), dbSysUser.getSalt(), true), dbSysUser.getPassword())){
|
||||
throw new ShiroCustomException(Status.FAIL_OPERATION, "原密码错误");
|
||||
}
|
||||
//生成新的加密盐
|
||||
String newSalt = AuthHelper.createSalt();
|
||||
LambdaUpdateWrapper<SysUser> updateWrapper = Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(true, SysUser::getPassword, AuthHelper.encryptMD5(accountDTO.getPassword(), newSalt, true))
|
||||
.set(true, SysUser::getSalt, newSalt)
|
||||
.eq(SysUser::getId, accountDTO.getAccountId());
|
||||
return update(updateWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean changeAccount(AccountDTO accountDTO) {
|
||||
LambdaUpdateWrapper<SysUser> updateWrapper = Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(true, SysUser::getUsername, accountDTO.getUsername())
|
||||
.eq(SysUser::getId, accountDTO.getAccountId());
|
||||
return update(updateWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装账户 1-n 角色 1-n 权限关系
|
||||
* @param sysUserList
|
||||
|
|
|
@ -50,8 +50,7 @@ public class UsernamePasswordAuthWayServiceImpl implements AuthWayService {
|
|||
logger.debug("【获取用户】==>当前登陆用户类型 - {},- 账号{}", token.getIUserType().getType(), token.getAccount());
|
||||
LambdaQueryWrapper<SysUser> query = Wrappers.<SysUser>lambdaQuery()
|
||||
.eq(SysUser::getUsername, token.getAccount())
|
||||
.eq(SysUser::getUserType, token.getIUserType().getType())
|
||||
.in(SysUser::getStatus, token.getStatusList());
|
||||
.eq(SysUser::getUserType, token.getIUserType().getType());
|
||||
List<SysUser> userList = sysUserService.getEntityList(query);
|
||||
if (V.isEmpty(userList)){
|
||||
return null;
|
||||
|
@ -66,12 +65,17 @@ public class UsernamePasswordAuthWayServiceImpl implements AuthWayService {
|
|||
|
||||
@Override
|
||||
public boolean isPasswordMatch() {
|
||||
if (V.isEmpty(token.getIUserType())) {
|
||||
logger.debug("用户名密码登陆,用户类型不能为空");
|
||||
return false;
|
||||
}
|
||||
String password = token.getPassword();
|
||||
|
||||
// 构建查询条件
|
||||
QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.lambda()
|
||||
.eq(SysUser::getUsername, token.getAccount());
|
||||
.eq(SysUser::getUsername, token.getAccount())
|
||||
.eq(SysUser::getUserType, token.getIUserType().getType());
|
||||
|
||||
// 获取单条用户记录
|
||||
List<SysUser> userList = sysUserService.getEntityList(queryWrapper);
|
||||
|
|
Loading…
Reference in New Issue