mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18:24 +08:00
update docs
This commit is contained in:
parent
5e5210c638
commit
5ddd5153b2
@ -2,11 +2,8 @@
|
|||||||
|
|
||||||
MyBatis-Flex 提供了一个名为 `IService` 的接口,及其默认实现类 `ServiceImpl` ,用于简化在 「Service」 层重复定义 「Mapper」 层的方法。
|
MyBatis-Flex 提供了一个名为 `IService` 的接口,及其默认实现类 `ServiceImpl` ,用于简化在 「Service」 层重复定义 「Mapper」 层的方法。
|
||||||
|
|
||||||
> `IService` 接口只是提供了简单且常用的 “增删改查” 方法,更多细节以及复杂的业务,还是需要使用 `BaseMapper` 进行处理。
|
> `IService` 接口只是提供了简单且常用的 “增删改查” 方法,更多细节以及复杂的业务,还是需要使用 `Mapper` 进行处理。
|
||||||
|
|
||||||
::: tip 注意
|
|
||||||
`IService` 目前只在 Spring 扩展包中提供使用。
|
|
||||||
:::
|
|
||||||
|
|
||||||
## 示例代码
|
## 示例代码
|
||||||
|
|
||||||
@ -100,4 +97,4 @@ public class AccountServiceImpl implements IAccountService
|
|||||||
|
|
||||||
## 其他方法
|
## 其他方法
|
||||||
|
|
||||||
- **getBaseMapper()**:获取对应的 `BaseMapper` 接口。
|
- **getMapper()**:获取对应的 `BaseMapper` 接口。
|
||||||
@ -9,9 +9,11 @@
|
|||||||
- 获取某个地区的数据
|
- 获取某个地区的数据
|
||||||
- 等等
|
- 等等
|
||||||
|
|
||||||
这一些,都是通过当前的用户的信息(部门、角色、权限等),查询时,添加特定的条件。在 MyBatis-Flex 中,我们可以使用自定义数据方言 `IDialect` 的方式来实现这一种需求。
|
这一些,都是通过当前的用户的信息(部门、角色、权限等),查询时,添加特定的条件。在 MyBatis-Flex 中,我们可以通过 2 种方式来实现这一种需求。
|
||||||
|
|
||||||
以下是示例代码:
|
## 方式1:使用自定义数据方言 `IDialect`
|
||||||
|
|
||||||
|
在自定义方言中,重写 `forSelectByQuery` 方法,这个方法是用于构建返回根据 `QueryWrapper` 查询的方法, 以下是示例代码:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class MyPermissionDialect extends CommonsDialectImpl{
|
public class MyPermissionDialect extends CommonsDialectImpl{
|
||||||
@ -31,4 +33,37 @@ public class MyPermissionDialect extends CommonsDialectImpl{
|
|||||||
|
|
||||||
```java
|
```java
|
||||||
DialectFactory.registerDialect(DbType.MYSQL, new MyPermissionDialect());
|
DialectFactory.registerDialect(DbType.MYSQL, new MyPermissionDialect());
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
**常见问题1:通过重写 `IDialect` 后,所有的查询都添加了条件,但是有些表不需要条件如何做?**
|
||||||
|
|
||||||
|
>答:可以通过 CPI 获取 QueryWrapper 查询了哪些表,然后进行动态处理。例如 `List<QueryTable> tables = CPI.getQueryTables(queryWrapper)`,然后进一步对
|
||||||
|
> `tables` 进行验证是否需要添加数据权限。
|
||||||
|
|
||||||
|
## 方式2:重写 IService 的查询方法
|
||||||
|
|
||||||
|
在一般的应用中,查询是通过 Service 进行的,MyBatis-Flex 提供了 `IService` 接口及其默认的 `ServiceImpl` 实现类。
|
||||||
|
|
||||||
|
我们可以通过构建自己的 `IServiceImpl` 来实现这一种需求,例如:
|
||||||
|
|
||||||
|
```java
|
||||||
|
public class MyServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected M mapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseMapper<T> getMapper() {
|
||||||
|
return mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<T> list(QueryWrapper query) {
|
||||||
|
//获取当前用户信息,为 queryWrapper 添加额外的条件
|
||||||
|
return IService.super.list(query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
当然,在 `IService` 中,除了 `list` 方法以外,还有其他的查询方法,可能也需要复写一下。
|
||||||
|
|||||||
@ -49,7 +49,6 @@ MyBatis-Flex 主要是和 `MyBatis-Plus` 与 `Fluent-Mybatis` 对比,内容来
|
|||||||
|
|
||||||
**MyBatis-Flex:**
|
**MyBatis-Flex:**
|
||||||
|
|
||||||
一般方式:
|
|
||||||
````java
|
````java
|
||||||
QueryWrapper query = QueryWrapper.create()
|
QueryWrapper query = QueryWrapper.create()
|
||||||
.where(EMPLOYEE.LAST_NAME.like(searchWord)) //条件为null时自动忽略
|
.where(EMPLOYEE.LAST_NAME.like(searchWord)) //条件为null时自动忽略
|
||||||
@ -57,21 +56,6 @@ QueryWrapper query = QueryWrapper.create()
|
|||||||
.and(EMPLOYEE.AGE.gt(24));
|
.and(EMPLOYEE.AGE.gt(24));
|
||||||
List<Employee> employees = employeeMapper.selectListByQuery(query);
|
List<Employee> employees = employeeMapper.selectListByQuery(query);
|
||||||
````
|
````
|
||||||
更简单一点:
|
|
||||||
````java
|
|
||||||
QueryWrapper query = select()
|
|
||||||
.where(EMPLOYEE.LAST_NAME.like(searchWord))
|
|
||||||
.and(EMPLOYEE.GENDER.eq(1))
|
|
||||||
.and(EMPLOYEE.AGE.gt(24));
|
|
||||||
List<Employee> employees = employeeMapper.selectListByQuery(query);
|
|
||||||
````
|
|
||||||
换一种方式:
|
|
||||||
````java
|
|
||||||
QueryCondition condition = EMPLOYEE.LAST_NAME.like(searchWord)
|
|
||||||
.and(EMPLOYEE.GENDER.eq(1))
|
|
||||||
.and(EMPLOYEE.AGE.gt(24));
|
|
||||||
List<Employee> employees = employeeMapper.selectListByCondition(condition);
|
|
||||||
````
|
|
||||||
|
|
||||||
**MyBatis-Plus:**
|
**MyBatis-Plus:**
|
||||||
|
|
||||||
@ -82,7 +66,7 @@ QueryWrapper<Employee> queryWrapper = Wrappers.query()
|
|||||||
.gt("age", 24);
|
.gt("age", 24);
|
||||||
List<Employee> employees = employeeMapper.selectList(queryWrapper);
|
List<Employee> employees = employeeMapper.selectList(queryWrapper);
|
||||||
````
|
````
|
||||||
或者 MyBatis-Plus 的lambda写法:
|
或者 MyBatis-Plus 的 lambda 写法:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
LambdaQueryWrapper<Employee> queryWrapper = Wrappers.<Employee>lambdaQuery()
|
LambdaQueryWrapper<Employee> queryWrapper = Wrappers.<Employee>lambdaQuery()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user