/* * 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 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 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 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(Wrappers.emptyWrapper(), 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()); } 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 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; // } // } }