mybatis-flex/docs/zh/base/service.md
2023-05-15 14:13:26 +08:00

4.1 KiB
Raw Blame History

顶级 Service 接口

MyBatis-Flex 提供了一个名为 IService 的接口,及其默认实现类 ServiceImpl ,用于简化在 「Service」 层重复定义 「Mapper」 层的方法。

IService 接口只是提供了简单且常用的 “增删改查” 方法,更多细节以及复杂的业务,还是需要使用 BaseMapper 进行处理。

::: tip 注意 IService 目前只在 Spring 扩展包中提供使用。 :::

示例代码

接口:

public interface IAccountService extends IService{
    //你的自定义方法
    Account customMethod();
}

实现类:

@Component
public class AccountServiceImpl implements IAccountService
        extends ServiceImpl<AccountMapper, Account>{
    
    @Override
    public Account customMethod(){
       return getMapper().selectOneByQuery("...");
    }
}

保存数据

IService 的接口提供了 save、saveOrUpdate、saveBatch 方法,用于保存数据:

  • save(entity):保存一条数据,忽略 null 值的字段。
  • saveOrUpdate(entity):保存一条数据,如果数据存在则更新数据。
  • saveBatch(entities):批量保存多条数据。
  • saveBatch(entities, size):批量保存多条数据,按指定数量切分。

删除数据

IService 的接口提供了 remove、removeById、removeByIds、removeByMap 方法,用于删除数据:

  • remove(query):根据 QueryConditionQueryWrapper 构建的条件来删除数据。
  • removeById(id):根据主键删除数据,复合主键需要传入一个数组。
  • removeByIds(ids):根据主键的集合,批量删除多条数据。
  • removeByMap(map):根据 Map<字段名,值> 组成的条件删除数据,字段名和值的关系为相等的关系;同时,防止 "不小心" 全表删除数据Map 的值不允许为 null 或者空数据。

更新数据

IService 的接口提供了 update、updateById、updateByMap 方法,用于更新数据:

  • update(entity, query):根据 QueryConditionQueryWrapper 构建的条件更新数据,实体类可以没有主键(如果有也会被忽略),实体类的 null 属性,会自动被忽略。
  • updateById(entity):根据主键更新数据,要求主键值不能为空,否则会抛出异常;同时,数据为 null 的字段不会更新到数据库。
  • updateByMap(entity, map):根据 Map<字段名,值> 组成的条件更新数据,实体类可以没有主键(如果有也会被忽略),实体类的 null 属性,会自动被忽略。

查询数据

查询一条数据

IService 的接口提供了 getById、getByIdOpt、getOne、getOneOpt 方法,用于查询一条数据:

  • getById(id):根据主键查询数据。
  • getByIdOpt(id):根据主键查询数据,并封装为 Optional 返回。
  • getOne(query): 根据 QueryConditionQueryWrapper 构建的条件查询一条数据。
  • getOneOpt(query): 根据 QueryConditionQueryWrapper 构建的条件查询一条数据,并封装为 Optional 返回。

查询多条数据

IService 的接口提供了 list、listByIds、listByMap 方法,用于查询多条数据:

  • list():查询所有数据。
  • list(query):根据 QueryConditionQueryWrapper 构建的条件查询多条数据。
  • listByIds(ids):根据主键的集合查询多条数据。
  • listByMap(map):根据 Map<字段名,值> 组成的条件查询多条数据。

查询数据数量

IService 的接口提供了 exists、count 方法,用于查询数据数量;

  • count():查询所有数据数量。
  • count(query):根据 QueryConditionQueryWrapper 构建的条件查询数据数量。
  • exist(query):根据 QueryConditionQueryWrapper 构建的条件判断数据是否存在。

分页查询数据

IService 的接口提供了 page 方法,用于分页查询数据:

  • page(page):分页查询所有数据。
  • page(page, query):根据 QueryConditionQueryWrapper 构建的条件分页查询数据。

其他方法

  • getBaseMapper():获取对应的 BaseMapper 接口。