/*
* Copyright (c) 2011-2016, 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
*
* http://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.impl.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.additional.query.impl.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
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 实体对象集合
*/
default boolean saveBatch(Collection entityList) {
return saveBatch(entityList, 1000);
}
/**
*
* 插入(批量)
*
*
* @param entityList 实体对象集合
* @param batchSize 插入批次数量
*/
boolean saveBatch(Collection entityList, int batchSize);
/**
*
* 批量修改插入
*
*
* @param entityList 实体对象集合
*/
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 extends Serializable> 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);
/**
*
* 根据ID 批量更新
*
*
* @param entityList 实体对象集合
*/
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 extends Serializable> idList);
/**
*
* 查询(根据 columnMap 条件)
*
*
* @param columnMap 表字段 map 对象
*/
Collection listByMap(Map columnMap);
/**
*
* 根据 Wrapper,查询一条记录
*
*
* @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
*/
default T getOne(Wrapper queryWrapper) {
return getOne(queryWrapper, false);
}
/**
*
* 根据 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 super Object, V> 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 super Object, V> mapper) {
return listObjs(Wrappers.emptyWrapper(), mapper);
}
/**
*
* 根据 Wrapper 条件,查询全部记录
*
*
* @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
*/
default List listObjs(Wrapper queryWrapper) {
return listObjs(Wrappers.emptyWrapper(), Function.identity());
}
/**
*
* 根据 Wrapper 条件,查询全部记录
*
*
* @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
* @param mapper 转换函数
*/
List listObjs(Wrapper queryWrapper, Function super Object, V> 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());
}
BaseMapper getBaseMapper();
default QueryChainWrapper query() {
return new QueryChainWrapper<>(getBaseMapper());
}
default LambdaQueryChainWrapper lambdaQuery() {
return new LambdaQueryChainWrapper<>(getBaseMapper());
}
// default InnerLambdaQuery lambdaQuery() {
// return new InnerLambdaQuery<>(this);
// }
//
// class InnerLambdaQuery extends LambdaQueryWrapper {
//
// private IService iService;
//
// private InnerLambdaQuery() {
// }
//
// protected InnerLambdaQuery(IService iService) {
// this.iService = iService;
// }
//
//
// /**
// *
// * 根据 entity 条件,删除记录
// *
// */
// public boolean remove() {
// return iService.remove(this);
// }
//
//
// /**
// *
// * 根据 Wrapper,查询一条记录
// *
// */
// public T getOne() {
// return getOne(false);
// }
//
// /**
// *
// * 根据 Wrapper,查询一条记录
// *
// *
// * @param throwEx 有多个 result 是否抛出异常
// */
// public T getOne(boolean throwEx) {
// return iService.getOne(this, throwEx);
// }
//
// /**
// *
// * 根据 Wrapper,查询一条记录
// *
// */
// public Map getMap() {
// return iService.getMap(this);
// }
//
//
// /**
// *
// * 根据 Wrapper 条件,查询总记录数
// *
// */
// public int count() {
// return iService.count(this);
// }
//
// /**
// *
// * 查询列表
// *
// */
// public List list() {
// return iService.list(this);
// }
//
// /**
// *
// * 翻页查询
// *
// *
// * @param page 翻页对象
// */
// public IPage page(IPage page) {
// return iService.page(page, this);
// }
//
// /**
// *
// * 查询列表
// *
// */
// public List> listMaps() {
// return iService.listMaps(this);
// }
//
// /**
// *
// * 查询全部记录
// *
// *
// * @param mapper 转换函数
// */
// public List listObjs(Function super Object, V> mapper) {
// return iService.listObjs(this, mapper);
// }
//
// /**
// *
// * 根据 Wrapper 条件,查询全部记录
// *
// */
// public List listObjs() {
// return listObjs(Function.identity());
// }
//
// /**
// *
// * 翻页查询
// *
// *
// * @param page 翻页对象
// */
// public IPage> pageMaps(IPage page) {
// return iService.pageMaps(page, this);
// }
//
// @Override
// public InnerLambdaQuery setEntity(T entity) {
// super.setEntity(entity);
// return this;
// }
//
//
// @Override
// public InnerLambdaQuery allEq(Map, V> params) {
// super.allEq(params);
// return this;
// }
//
// @Override
// public InnerLambdaQuery allEq(Map, V> params, boolean null2IsNull) {
// super.allEq(params, null2IsNull);
// return this;
// }
//
// @Override
// public InnerLambdaQuery allEq(BiPredicate, V> filter, Map, V> params) {
// super.allEq(filter, params);
// return this;
// }
//
// @Override
// public InnerLambdaQuery allEq(BiPredicate, V> filter, Map, V> params, boolean null2IsNull) {
// super.allEq(filter, params, null2IsNull);
// return this;
// }
//
// @Override
// public InnerLambdaQuery allEq(boolean condition, Map, V> params, boolean null2IsNull) {
// super.allEq(condition, params, null2IsNull);
// return this;
// }
//
// @Override
// public InnerLambdaQuery allEq(boolean condition, BiPredicate, V> filter, Map, V> params, boolean null2IsNull) {
// super.allEq(condition, filter, params, null2IsNull);
// return this;
// }
//
// @Override
// public InnerLambdaQuery eq(SFunction column, Object val) {
// super.eq(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery ne(SFunction column, Object val) {
// super.ne(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery gt(SFunction column, Object val) {
// super.gt(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery ge(SFunction column, Object val) {
// super.ge(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery lt(SFunction column, Object val) {
// super.lt(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery le(SFunction column, Object val) {
// super.le(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery between(SFunction column, Object val1, Object val2) {
// super.between(column, val1, val2);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notBetween(SFunction column, Object val1, Object val2) {
// super.notBetween(column, val1, val2);
// return this;
// }
//
// @Override
// public InnerLambdaQuery like(SFunction column, Object val) {
// super.like(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notLike(SFunction column, Object val) {
// super.notLike(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery likeLeft(SFunction column, Object val) {
// super.likeLeft(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery likeRight(SFunction column, Object val) {
// super.likeRight(column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery eq(boolean condition, SFunction column, Object val) {
// super.eq(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery ne(boolean condition, SFunction column, Object val) {
// super.ne(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery gt(boolean condition, SFunction column, Object val) {
// super.gt(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery ge(boolean condition, SFunction column, Object val) {
// super.ge(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery lt(boolean condition, SFunction column, Object val) {
// super.lt(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery le(boolean condition, SFunction column, Object val) {
// super.le(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery like(boolean condition, SFunction column, Object val) {
// super.like(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notLike(boolean condition, SFunction column, Object val) {
// super.notLike(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery likeLeft(boolean condition, SFunction column, Object val) {
// super.likeLeft(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery likeRight(boolean condition, SFunction column, Object val) {
// super.likeRight(condition, column, val);
// return this;
// }
//
// @Override
// public InnerLambdaQuery between(boolean condition, SFunction column, Object val1, Object val2) {
// super.between(condition, column, val1, val2);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notBetween(boolean condition, SFunction column, Object val1, Object val2) {
// super.notBetween(condition, column, val1, val2);
// return this;
// }
//
// @Override
// public InnerLambdaQuery and(boolean condition, Function, LambdaQueryWrapper> func) {
// super.and(condition, func);
// return this;
// }
//
// @Override
// public InnerLambdaQuery or(boolean condition, Function, LambdaQueryWrapper> func) {
// super.or(condition, func);
// return this;
// }
//
// @Override
// public InnerLambdaQuery nested(boolean condition, Function, LambdaQueryWrapper> func) {
// super.nested(condition, func);
// return this;
// }
//
// @Override
// public InnerLambdaQuery or(boolean condition) {
// super.or(condition);
// return this;
// }
//
// @Override
// public InnerLambdaQuery apply(boolean condition, String applySql, Object... value) {
// super.apply(condition, applySql, value);
// return this;
// }
//
// @Override
// public InnerLambdaQuery last(boolean condition, String lastSql) {
// super.last(condition, lastSql);
// return this;
// }
//
// @Override
// public InnerLambdaQuery exists(boolean condition, String existsSql) {
// super.exists(condition, existsSql);
// return this;
// }
//
// @Override
// public InnerLambdaQuery isNotNull(SFunction column) {
// super.isNotNull(column);
// return this;
// }
//
// @Override
// public InnerLambdaQuery in(SFunction column, Collection> coll) {
// super.in(column, coll);
// return this;
// }
//
// @Override
// public InnerLambdaQuery inOrThrow(SFunction column, Collection> value) {
// super.inOrThrow(column, value);
// return this;
// }
//
// @Override
// public InnerLambdaQuery inOrThrow(boolean condition, SFunction column, Collection> coll) {
// super.inOrThrow(condition, column, coll);
// return this;
// }
//
// @Override
// public InnerLambdaQuery inOrThrow(SFunction column, Object... values) {
// super.inOrThrow(column, values);
// return this;
// }
//
// @Override
// public InnerLambdaQuery inOrThrow(boolean condition, SFunction column, Object... values) {
// super.inOrThrow(condition, column, values);
// return this;
// }
//
// @Override
// public InnerLambdaQuery in(SFunction column, Object... values) {
// super.in(column, values);
// return this;
// }
//
// @Override
// public InnerLambdaQuery in(boolean condition, SFunction column, Object... values) {
// super.in(condition, column, values);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notIn(SFunction column, Collection> coll) {
// super.notIn(column, coll);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notInOrThrow(SFunction column, Collection> value) {
// super.notInOrThrow(column, value);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notInOrThrow(boolean condition, SFunction column, Collection> coll) {
// super.notInOrThrow(condition, column, coll);
// return this;
// }
// @Override
// public InnerLambdaQuery notInOrThrow(SFunction column, Object... values) {
// super.notInOrThrow(column, values);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notInOrThrow(boolean condition, SFunction column, Object... values) {
// super.notInOrThrow(condition, column, values);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notIn(SFunction column, Object... value) {
// super.notIn(column, value);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notIn(boolean condition, SFunction column, Object... values) {
// super.notIn(condition, column, values);
// return this;
// }
//
// @Override
// public InnerLambdaQuery orderByAsc(SFunction... columns) {
// super.orderByAsc(columns);
// return this;
// }
//
// @Override
// public InnerLambdaQuery orderByAsc(boolean condition, SFunction... columns) {
// super.orderByAsc(condition, columns);
// return this;
// }
//
// @Override
// public InnerLambdaQuery orderByDesc(SFunction... columns) {
// super.orderByDesc(columns);
// return this;
// }
//
// @Override
// public InnerLambdaQuery orderByDesc(boolean condition, SFunction... columns) {
// super.orderByDesc(condition, columns);
// return this;
// }
//
// @Override
// public InnerLambdaQuery having(String sqlHaving, Object... params) {
// super.having(sqlHaving, params);
// return this;
// }
//
// @Override
// public InnerLambdaQuery or() {
// super.or();
// return this;
// }
//
// @Override
// public InnerLambdaQuery apply(String applySql, Object... value) {
// super.apply(applySql, value);
// return this;
// }
//
// @Override
// public InnerLambdaQuery last(String lastSql) {
// super.last(lastSql);
// return this;
// }
//
// @Override
// public InnerLambdaQuery exists(String existsSql) {
// super.exists(existsSql);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notExists(String notExistsSql) {
// super.notExists(notExistsSql);
// return this;
// }
//
// @Override
// public InnerLambdaQuery and(Function, LambdaQueryWrapper> func) {
// super.and(func);
// return this;
// }
//
// @Override
// public InnerLambdaQuery or(Function, LambdaQueryWrapper> func) {
// super.or(func);
// return this;
// }
//
// @Override
// public InnerLambdaQuery nested(Function, LambdaQueryWrapper> func) {
// super.nested(func);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notExists(boolean condition, String notExistsSql) {
// super.notExists(condition, notExistsSql);
// return this;
// }
//
// @Override
// public InnerLambdaQuery isNull(boolean condition, SFunction column) {
// super.isNull(condition, column);
// return this;
// }
//
// @Override
// public InnerLambdaQuery isNull(SFunction column) {
// super.isNull(column);
// return this;
// }
//
// @Override
// public InnerLambdaQuery isNotNull(boolean condition, SFunction column) {
// super.isNotNull(condition, column);
// return this;
// }
//
// @Override
// public InnerLambdaQuery in(boolean condition, SFunction column, Collection> coll) {
// super.in(condition, column, coll);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notIn(boolean condition, SFunction column, Collection> coll) {
// super.notIn(condition, column, coll);
// return this;
// }
//
// @Override
// public InnerLambdaQuery inSql(SFunction column, String inValue) {
// super.inSql(column, inValue);
// return this;
// }
//
//
// @Override
// public InnerLambdaQuery inSql(boolean condition, SFunction column, String inValue) {
// super.inSql(condition, column, inValue);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notInSql(SFunction column, String inValue) {
// super.notInSql(column, inValue);
// return this;
// }
//
// @Override
// public InnerLambdaQuery notInSql(boolean condition, SFunction column, String inValue) {
// super.notInSql(condition, column, inValue);
// return this;
// }
//
// @Override
// public InnerLambdaQuery groupBy(SFunction... columns) {
// super.groupBy(columns);
// return this;
// }
//
// @Override
// public InnerLambdaQuery groupBy(boolean condition, SFunction... columns) {
// super.groupBy(condition, columns);
// return this;
// }
//
// @Override
// public InnerLambdaQuery orderBy(boolean condition, boolean isAsc, SFunction... columns) {
// super.orderBy(condition, isAsc, columns);
// return this;
// }
//
// @Override
// public InnerLambdaQuery having(boolean condition, String sqlHaving, Object... params) {
// super.having(condition, sqlHaving, params);
// return this;
// }
// }
}