/* * Copyright (c) 2011-2019, hubin (jobob@qq.com). *

* Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at *

* https://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.baomidou.mybatisplus.extension.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.additional.query.ChainQuery; import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.additional.query.impl.QueryChainWrapper; import com.baomidou.mybatisplus.extension.service.additional.update.ChainUpdate; import com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.additional.update.impl.UpdateChainWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.function.Function; /** * 顶级 Service * * @author hubin * @since 2018-06-23 */ public interface IService { /** * 插入一条记录(选择字段,策略插入) * * @param entity 实体对象 */ boolean save(T entity); /** * 插入(批量) * * @param entityList 实体对象集合 */ @Transactional(rollbackFor = Exception.class) default boolean saveBatch(Collection entityList) { return saveBatch(entityList, 1000); } /** * 插入(批量) * * @param entityList 实体对象集合 * @param batchSize 插入批次数量 */ boolean saveBatch(Collection entityList, int batchSize); /** * 批量修改插入 * * @param entityList 实体对象集合 */ @Transactional(rollbackFor = Exception.class) default boolean saveOrUpdateBatch(Collection entityList) { return saveOrUpdateBatch(entityList, 1000); } /** * 批量修改插入 * * @param entityList 实体对象集合 * @param batchSize 每次的数量 */ boolean saveOrUpdateBatch(Collection entityList, int batchSize); /** * 根据 ID 删除 * * @param id 主键ID */ boolean removeById(Serializable id); /** * 根据 columnMap 条件,删除记录 * * @param columnMap 表字段 map 对象 */ boolean removeByMap(Map columnMap); /** * 根据 entity 条件,删除记录 * * @param queryWrapper 实体包装类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ boolean remove(Wrapper queryWrapper); /** * 删除(根据ID 批量删除) * * @param idList 主键ID列表 */ boolean removeByIds(Collection idList); /** * 根据 ID 选择修改 * * @param entity 实体对象 */ boolean updateById(T entity); /** * 根据 whereEntity 条件,更新记录 * * @param entity 实体对象 * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper} */ boolean update(T entity, Wrapper updateWrapper); /** * 根据 UpdateWrapper 条件,更新记录 需要设置sqlset * * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper} */ default boolean update(Wrapper updateWrapper) { return update(null, updateWrapper); } /** * 根据ID 批量更新 * * @param entityList 实体对象集合 */ @Transactional(rollbackFor = Exception.class) default boolean updateBatchById(Collection entityList) { return updateBatchById(entityList, 1000); } /** * 根据ID 批量更新 * * @param entityList 实体对象集合 * @param batchSize 更新批次数量 */ boolean updateBatchById(Collection entityList, int batchSize); /** * TableId 注解存在更新记录,否插入一条记录 * * @param entity 实体对象 */ boolean saveOrUpdate(T entity); /** * 根据 ID 查询 * * @param id 主键ID */ T getById(Serializable id); /** * 查询(根据ID 批量查询) * * @param idList 主键ID列表 */ Collection listByIds(Collection idList); /** * 查询(根据 columnMap 条件) * * @param columnMap 表字段 map 对象 */ Collection listByMap(Map columnMap); /** * 根据 Wrapper,查询一条记录
*

结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")

* * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ default T getOne(Wrapper queryWrapper) { return getOne(queryWrapper, true); } /** * 根据 Wrapper,查询一条记录 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} * @param throwEx 有多个 result 是否抛出异常 */ T getOne(Wrapper queryWrapper, boolean throwEx); /** * 根据 Wrapper,查询一条记录 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ Map getMap(Wrapper queryWrapper); /** * 根据 Wrapper,查询一条记录 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} * @param mapper 转换函数 */ default V getObj(Wrapper queryWrapper, Function mapper) { return SqlHelper.getObject(listObjs(queryWrapper, mapper)); } /** * 根据 Wrapper 条件,查询总记录数 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ int count(Wrapper queryWrapper); /** * 查询总记录数 * * @see Wrappers#emptyWrapper() */ default int count() { return count(Wrappers.emptyWrapper()); } /** * 查询列表 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ List list(Wrapper queryWrapper); /** * 查询所有 * * @see Wrappers#emptyWrapper() */ default List list() { return list(Wrappers.emptyWrapper()); } /** * 翻页查询 * * @param page 翻页对象 * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ IPage page(IPage page, Wrapper queryWrapper); /** * 无条件翻页查询 * * @param page 翻页对象 * @see Wrappers#emptyWrapper() */ default IPage page(IPage page) { return page(page, Wrappers.emptyWrapper()); } /** * 查询列表 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ List> listMaps(Wrapper queryWrapper); /** * 查询所有列表 * * @see Wrappers#emptyWrapper() */ default List> listMaps() { return listMaps(Wrappers.emptyWrapper()); } /** * 查询全部记录 */ default List listObjs() { return listObjs(Function.identity()); } /** * 查询全部记录 * * @param mapper 转换函数 */ default List listObjs(Function mapper) { return listObjs(Wrappers.emptyWrapper(), mapper); } /** * 根据 Wrapper 条件,查询全部记录 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ default List listObjs(Wrapper queryWrapper) { return listObjs(queryWrapper, Function.identity()); } /** * 根据 Wrapper 条件,查询全部记录 * * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} * @param mapper 转换函数 */ List listObjs(Wrapper queryWrapper, Function mapper); /** * 翻页查询 * * @param page 翻页对象 * @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper} */ IPage> pageMaps(IPage page, Wrapper queryWrapper); /** * 无条件翻页查询 * * @param page 翻页对象 * @see Wrappers#emptyWrapper() */ default IPage> pageMaps(IPage page) { return pageMaps(page, Wrappers.emptyWrapper()); } /** * 获取对应 entity 的 BaseMapper * * @return BaseMapper */ BaseMapper getBaseMapper(); /** * 链式查询 普通 * 支持 {@link ChainQuery} 内的方法为结尾进行查询 * * @return QueryWrapper 的包装类 */ default QueryChainWrapper query() { return new QueryChainWrapper<>(getBaseMapper()); } /** * 链式查询 lambda 式 *

注意:不支持 Kotlin

* * @return LambdaQueryWrapper 的包装类 */ default LambdaQueryChainWrapper lambdaQuery() { return new LambdaQueryChainWrapper<>(getBaseMapper()); } /** * 链式更改 普通 * 支持 {@link ChainUpdate} 内的方法为结尾进行数据修改 * * @return UpdateWrapper 的包装类 */ default UpdateChainWrapper update() { return new UpdateChainWrapper<>(getBaseMapper()); } /** * 链式更改 lambda 式 *

注意:不支持 Kotlin

* * @return LambdaUpdateWrapper 的包装类 */ default LambdaUpdateChainWrapper lambdaUpdate() { return new LambdaUpdateChainWrapper<>(getBaseMapper()); } }