[MyBatisPlus]通用Service接口测试通用Service

通用Service接口

说明:

  • 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删 除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
  • 泛型 T 为任意实体对象
  • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承
    Mybatis-Plus 提供的基类
  • 官网地址:https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%
    A3

IService

/** Copyright (c) 2011-2022, baomidou (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.Assert;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.ChainQuery;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.ChainUpdate;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
import com.baomidou.mybatisplus.extension.kotlin.KtQueryChainWrapper;
import com.baomidou.mybatisplus.extension.kotlin.KtUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers;
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.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;/*** 顶级 Service** @author hubin* @since 2018-06-23*/
public interface IService<T> {/*** 默认批次提交数量*/int DEFAULT_BATCH_SIZE = 1000;/*** 插入一条记录(选择字段,策略插入)** @param entity 实体对象*/default boolean save(T entity) {return SqlHelper.retBool(getBaseMapper().insert(entity));}/*** 插入(批量)** @param entityList 实体对象集合*/@Transactional(rollbackFor = Exception.class)default boolean saveBatch(Collection<T> entityList) {return saveBatch(entityList, DEFAULT_BATCH_SIZE);}/*** 插入(批量)** @param entityList 实体对象集合* @param batchSize  插入批次数量*/boolean saveBatch(Collection<T> entityList, int batchSize);/*** 批量修改插入** @param entityList 实体对象集合*/@Transactional(rollbackFor = Exception.class)default boolean saveOrUpdateBatch(Collection<T> entityList) {return saveOrUpdateBatch(entityList, DEFAULT_BATCH_SIZE);}/*** 批量修改插入** @param entityList 实体对象集合* @param batchSize  每次的数量*/boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);/*** 根据 ID 删除** @param id 主键ID*/default boolean removeById(Serializable id) {return SqlHelper.retBool(getBaseMapper().deleteById(id));}/*** 根据 ID 删除** @param id      主键(类型必须与实体类型字段保持一致)* @param useFill 是否启用填充(为true的情况,会将入参转换实体进行delete删除)* @return 删除结果* @since 3.5.0*/default boolean removeById(Serializable id, boolean useFill) {throw new UnsupportedOperationException("不支持的方法!");}/*** 根据实体(ID)删除** @param entity 实体* @since 3.4.4*/default boolean removeById(T entity) {return SqlHelper.retBool(getBaseMapper().deleteById(entity));}/*** 根据 columnMap 条件,删除记录** @param columnMap 表字段 map 对象*/default boolean removeByMap(Map<String, Object> columnMap) {Assert.notEmpty(columnMap, "error: columnMap must not be empty");return SqlHelper.retBool(getBaseMapper().deleteByMap(columnMap));}/*** 根据 entity 条件,删除记录** @param queryWrapper 实体包装类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default boolean remove(Wrapper<T> queryWrapper) {return SqlHelper.retBool(getBaseMapper().delete(queryWrapper));}/*** 删除(根据ID 批量删除)** @param list 主键ID或实体列表*/default boolean removeByIds(Collection<?> list) {if (CollectionUtils.isEmpty(list)) {return false;}return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));}/*** 批量删除** @param list    主键ID或实体列表* @param useFill 是否填充(为true的情况,会将入参转换实体进行delete删除)* @return 删除结果* @since 3.5.0*/@Transactional(rollbackFor = Exception.class)default boolean removeByIds(Collection<?> list, boolean useFill) {if (CollectionUtils.isEmpty(list)) {return false;}if (useFill) {return removeBatchByIds(list, true);}return SqlHelper.retBool(getBaseMapper().deleteBatchIds(list));}/*** 批量删除(jdbc批量提交)** @param list 主键ID或实体列表(主键ID类型必须与实体类型字段保持一致)* @return 删除结果* @since 3.5.0*/@Transactional(rollbackFor = Exception.class)default boolean removeBatchByIds(Collection<?> list) {return removeBatchByIds(list, DEFAULT_BATCH_SIZE);}/*** 批量删除(jdbc批量提交)** @param list    主键ID或实体列表(主键ID类型必须与实体类型字段保持一致)* @param useFill 是否启用填充(为true的情况,会将入参转换实体进行delete删除)* @return 删除结果* @since 3.5.0*/@Transactional(rollbackFor = Exception.class)default boolean removeBatchByIds(Collection<?> list, boolean useFill) {return removeBatchByIds(list, DEFAULT_BATCH_SIZE, useFill);}/*** 批量删除(jdbc批量提交)** @param list      主键ID或实体列表* @param batchSize 批次大小* @return 删除结果* @since 3.5.0*/default boolean removeBatchByIds(Collection<?> list, int batchSize) {throw new UnsupportedOperationException("不支持的方法!");}/*** 批量删除(jdbc批量提交)** @param list      主键ID或实体列表* @param batchSize 批次大小* @param useFill   是否启用填充(为true的情况,会将入参转换实体进行delete删除)* @return 删除结果* @since 3.5.0*/default boolean removeBatchByIds(Collection<?> list, int batchSize, boolean useFill) {throw new UnsupportedOperationException("不支持的方法!");}/*** 根据 ID 选择修改** @param entity 实体对象*/default boolean updateById(T entity) {return SqlHelper.retBool(getBaseMapper().updateById(entity));}/*** 根据 UpdateWrapper 条件,更新记录 需要设置sqlset** @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}*/default boolean update(Wrapper<T> updateWrapper) {return update(null, updateWrapper);}/*** 根据 whereEntity 条件,更新记录** @param entity        实体对象* @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}*/default boolean update(T entity, Wrapper<T> updateWrapper) {return SqlHelper.retBool(getBaseMapper().update(entity, updateWrapper));}/*** 根据ID 批量更新** @param entityList 实体对象集合*/@Transactional(rollbackFor = Exception.class)default boolean updateBatchById(Collection<T> entityList) {return updateBatchById(entityList, DEFAULT_BATCH_SIZE);}/*** 根据ID 批量更新** @param entityList 实体对象集合* @param batchSize  更新批次数量*/boolean updateBatchById(Collection<T> entityList, int batchSize);/*** TableId 注解存在更新记录,否插入一条记录** @param entity 实体对象*/boolean saveOrUpdate(T entity);/*** 根据 ID 查询** @param id 主键ID*/default T getById(Serializable id) {return getBaseMapper().selectById(id);}/*** 查询(根据ID 批量查询)** @param idList 主键ID列表*/default List<T> listByIds(Collection<? extends Serializable> idList) {return getBaseMapper().selectBatchIds(idList);}/*** 查询(根据 columnMap 条件)** @param columnMap 表字段 map 对象*/default List<T> listByMap(Map<String, Object> columnMap) {return getBaseMapper().selectByMap(columnMap);}/*** 根据 Wrapper,查询一条记录 <br/>* <p>结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")</p>** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default T getOne(Wrapper<T> queryWrapper) {return getOne(queryWrapper, true);}/*** 根据 Wrapper,查询一条记录** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}* @param throwEx      有多个 result 是否抛出异常*/T getOne(Wrapper<T> queryWrapper, boolean throwEx);/*** 根据 Wrapper,查询一条记录** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/Map<String, Object> getMap(Wrapper<T> queryWrapper);/*** 根据 Wrapper,查询一条记录** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}* @param mapper       转换函数*/<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);/*** 查询总记录数** @see Wrappers#emptyWrapper()*/default long count() {return count(Wrappers.emptyWrapper());}/*** 根据 Wrapper 条件,查询总记录数** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default long count(Wrapper<T> queryWrapper) {return SqlHelper.retCount(getBaseMapper().selectCount(queryWrapper));}/*** 查询列表** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default List<T> list(Wrapper<T> queryWrapper) {return getBaseMapper().selectList(queryWrapper);}/*** 查询所有** @see Wrappers#emptyWrapper()*/default List<T> list() {return list(Wrappers.emptyWrapper());}/*** 翻页查询** @param page         翻页对象* @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {return getBaseMapper().selectPage(page, queryWrapper);}/*** 无条件翻页查询** @param page 翻页对象* @see Wrappers#emptyWrapper()*/default <E extends IPage<T>> E page(E page) {return page(page, Wrappers.emptyWrapper());}/*** 查询列表** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper) {return getBaseMapper().selectMaps(queryWrapper);}/*** 查询所有列表** @see Wrappers#emptyWrapper()*/default List<Map<String, Object>> listMaps() {return listMaps(Wrappers.emptyWrapper());}/*** 查询全部记录*/default List<Object> listObjs() {return listObjs(Function.identity());}/*** 查询全部记录** @param mapper 转换函数*/default <V> List<V> listObjs(Function<? super Object, V> mapper) {return listObjs(Wrappers.emptyWrapper(), mapper);}/*** 根据 Wrapper 条件,查询全部记录** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default List<Object> listObjs(Wrapper<T> queryWrapper) {return listObjs(queryWrapper, Function.identity());}/*** 根据 Wrapper 条件,查询全部记录** @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}* @param mapper       转换函数*/default <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper) {return getBaseMapper().selectObjs(queryWrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());}/*** 翻页查询** @param page         翻页对象* @param queryWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}*/default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper) {return getBaseMapper().selectMapsPage(page, queryWrapper);}/*** 无条件翻页查询** @param page 翻页对象* @see Wrappers#emptyWrapper()*/default <E extends IPage<Map<String, Object>>> E pageMaps(E page) {return pageMaps(page, Wrappers.emptyWrapper());}/*** 获取对应 entity 的 BaseMapper** @return BaseMapper*/BaseMapper<T> getBaseMapper();/*** 获取 entity 的 class** @return {@link Class<T>}*/Class<T> getEntityClass();/*** 以下的方法使用介绍:** 一. 名称介绍* 1. 方法名带有 query 的为对数据的查询操作, 方法名带有 update 的为对数据的修改操作* 2. 方法名带有 lambda 的为内部方法入参 column 支持函数式的* 二. 支持介绍** 1. 方法名带有 query 的支持以 {@link ChainQuery} 内部的方法名结尾进行数据查询操作* 2. 方法名带有 update 的支持以 {@link ChainUpdate} 内部的方法名为结尾进行数据修改操作** 三. 使用示例,只用不带 lambda 的方法各展示一个例子,其他类推* 1. 根据条件获取一条数据: `query().eq("column", value).one()`* 2. 根据条件删除一条数据: `update().eq("column", value).remove()`**//*** 链式查询 普通** @return QueryWrapper 的包装类*/default QueryChainWrapper<T> query() {return ChainWrappers.queryChain(getBaseMapper());}/*** 链式查询 lambda 式* <p>注意:不支持 Kotlin </p>** @return LambdaQueryWrapper 的包装类*/default LambdaQueryChainWrapper<T> lambdaQuery() {return ChainWrappers.lambdaQueryChain(getBaseMapper());}/*** 链式查询 lambda 式* kotlin 使用** @return KtQueryWrapper 的包装类*/default KtQueryChainWrapper<T> ktQuery() {return ChainWrappers.ktQueryChain(getBaseMapper(), getEntityClass());}/*** 链式查询 lambda 式* kotlin 使用** @return KtQueryWrapper 的包装类*/default KtUpdateChainWrapper<T> ktUpdate() {return ChainWrappers.ktUpdateChain(getBaseMapper(), getEntityClass());}/*** 链式更改 普通** @return UpdateWrapper 的包装类*/default UpdateChainWrapper<T> update() {return ChainWrappers.updateChain(getBaseMapper());}/*** 链式更改 lambda 式* <p>注意:不支持 Kotlin </p>** @return LambdaUpdateWrapper 的包装类*/default LambdaUpdateChainWrapper<T> lambdaUpdate() {return ChainWrappers.lambdaUpdateChain(getBaseMapper());}/*** <p>* 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法* 此次修改主要是减少了此项业务代码的代码量(存在性验证之后的saveOrUpdate操作)* </p>** @param entity 实体对象*/default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) {return update(entity, updateWrapper) || saveOrUpdate(entity);}
}

MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑
详情查看源码IService和ServiceImpl

创建Service接口和实现类

在这里插入图片描述

UserService.interface

package com.xxxx.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.xxxx.mybatisplus.pojo.User;public interface UserService extends IService<User> {
}

UserServiceImpl

package com.xxxx.mybatisplus.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xxxx.mybatisplus.mapper.UserMapper;
import com.xxxx.mybatisplus.pojo.User;
import com.xxxx.mybatisplus.service.UserService;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}

测试通过Service

查询总记录数

package com.xxxx.mybatisplus;import com.xxxx.mybatisplus.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class MyBatisPlusServiceTest {@Autowiredprivate UserService userService;/*** 查询总记录数* SELECT COUNT( * ) FROM user*/@Testpublic void testGetCount(){long count = userService.count();System.out.println("总记录数 = "+count);}}

在这里插入图片描述

批量添加功能

@Testpublic void testInsertMore(){List<User> list = new ArrayList<>();for (int i = 1;i<=10;i++){User user = new User();user.setName("ybc"+i);user.setAge(20+i);list.add(user);}boolean b = userService.saveBatch(list);System.out.println(b);}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 禁用ipv6服务_在 Windows 7 中禁用IPv6协议/IPv6隧道

How to disable certain Internet Protocol version 6 (IPv6) components in Windows Vista, Windows 7 and Windows Server 2008http://support.microsoft.com/kb/929852/HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\双击 DisabledComponents 来…

程序员修神之路--晦涩难懂的CAP,是否完全正确?

微信搜一搜架构师修行之路菜菜哥&#xff0c;帮忙解决一个问题是不是面试又被虐了&#xff1f;是的呢&#xff0c;这次面试官问我什么是CAP&#xff1f;这个可就说来话长了......01PARTCAP说到CAP&#xff0c;首先不能不说分布式系统&#xff0c;前面几篇也说过&#xff0c;分布…

7-4 是否同一棵二叉搜索树 (25 分)

是否同一棵二叉搜索树 1.题目描述&#xff1a; 给定一个插入序列就可以唯一确定一棵二叉搜索树。然而&#xff0c;一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树&#xff0c;都得到一样的结果。于是对…

[MyBatisPlus]雪花算法

雪花算法 背景 需要选择合适的方案去应对数据规模的增长&#xff0c;以应对逐渐增长的访问压力和数据量。 数据库的扩展方式主要包括&#xff1a;业务分库、主从复制&#xff0c;数据库分表。 数据库分表 将不同业务数据分散存储到不同的数据库服务器&#xff0c;能够支撑…

pip 设置超时时间_Python pip使用超时问题解决方案

引言之前有位群友在群里发了个问题&#xff0c;说使用pip安装第三方包遇到"Read timeout"。我相信很多时候&#xff0c;大家在使用pip都会遇到这个问题&#xff0c;所以&#xff0c;我想有必要写一遍文章来总结一下。具体如下&#xff1a;解决方案在这之前&#xff0…

如何隐藏运行 winform 程序?

群里有个同学问了问题 如何隐藏运行 winform 程序&#xff1f;&#xff0c;提起了我的兴趣&#xff0c;玩玩呗&#xff1f;那就玩玩吧&#xff01;第一版 将一个 winform 程序隐藏执行&#xff0c;隐藏执行的方式有很多种&#xff0c;第一个 demo 就用最简单的方式&#xff0c;…

vector的基本用法 (详解 + 代码演示)

前言&#xff1a; vector 是向量类型&#xff0c;它可以容纳许多类型的数据&#xff0c;如若干个整数&#xff0c;所以称其为容器。vector 是C STL的一个重要成员&#xff0c;使用它时需要包含头文件&#xff1a;#include; 一、vector 的初始化&#xff1a;可以有五种方式,举…

python定义一个_Python,包括定义一个类

我有一个我要解决的问题&#xff1a;编写一个包含以下内容的类contentResult的定义&#xff1a;•String类型的实例变量winner&#xff0c;初始化为空字符串。在•String类型的实例变量second_place&#xff0c;初始化为空字符串。在•字符串类型的第三位实例变量&#xff0c;初…

[MyBatisPlus]常用注解_@TableName_@TableId_@TableField_@TableLogic通过全局配置配置主键生成策略

常用注解 TableName 设置实体类所对应的表名 如果全部表都有某个前缀,难道我们要通过一个一个加注解的方式来解决实体类对应表名问题吗&#xff1f; 我们可以通过配置文件来解决这个问题&#xff1a; TableId 将属性所对应的字段指定为主键 TableId的value属性 TableId的ty…

最小堆和最大堆的建立以及基本操作

前言&#xff1a; 堆的特性&#xff1a;用数组表示的完全二叉树。有序性&#xff1a;任一结点的关键字是其子树所有结点的最大值 (最小值) 堆的本质&#xff1a;就是一颗 完全二叉树 堆的数据存储&#xff1a; 用的是 数组 建堆时主要的操作&#xff1a;就是调整 对数组的元素…

[C#.NET 拾遗补漏]06:单例模式最佳实践

阅读本文大概需要 3 分钟。大家好&#xff0c;这是【C#.NET 拾遗补漏】专辑的第 06 篇文章。今天讲讲大家熟悉的单例模式。单例模式大概是所有设计模式中最简单的一种&#xff0c;如果在面试时被问及熟悉哪些设计模式&#xff0c;你可能第一个答的就是单例模式。单例模式的实现…

字符串是单一字符的无序组合吗_Python学习笔记(八)组合数据类型

Python语言中最常用的组合数据类型有3大类&#xff0c; 分别是集合类型、序列类型和映射类型。集合类型是一个具体的数据类型名称&#xff0c;而序列类型和映射类型是一类数据类型的总称。集合类型是一个元素集合&#xff0c;元素之间无序&#xff0c;相同元素在 集合中唯一存在…

[MyBatisPlus]条件构造器wapper

wapper简介 QueryWrapper 组装查询条件 查询用户名包含a&#xff0c;年龄在20到30之间&#xff0c;邮箱信息不为null的用户信息 package com.xxxx.mybatisplus;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xxxx.mybatisplus.mapper.Use…

7-6 列出连通集 (25 分)(详解)

列出连通集 1&#xff1a;思路 &#xff1a; 利用了邻接矩阵储存数据并建图&#xff0c;然后就是 DFS遍历和BFS遍历 只不过是本题需要输出的是非连通图 连通分量 外加俩函数搞定2&#xff1a;上码 #include<bits/stdc.h> using namespace std;//一些量的定义 queue<…

推荐:适合小白入门的Asp.Net Core 开源学习手册

前言推荐一个入门级的.NET Core开源项目&#xff0c;非常适合新手入门学习.NET Core。开源地址:https://github.com/windsting/little-aspnetcore-book。手册在线下载地址&#xff1a;https://nbarbettini.gitbooks.io/little-asp-net-core-book/content/chapters/mvc-basics/c…

从当前元素继续寻找_云漫圈 | 寻找无序数组的第k大元素

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;小灰来源&#xff1a;程序员小灰本期封面作者&#xff1a;泰勒太乐————— 第二天 —————题目是什么意思呢&#xff1f;比如给定的无序数组如下&#xff1a;如果 k6&#xff0c;也就是要寻找第6大的元素&a…

DFS和BFS总结和代码演示(详解)

1&#xff1a;BFS 广度优先搜索类似于树的层次遍历过程。它需要借助一个队列来实现。如图2-1-1所示&#xff0c;要想遍历从v0到v6的每一个顶点&#xff0c;我们可以设v0为第一层&#xff0c;v1、v2、v3为第二层&#xff0c;v4、v5为第三层&#xff0c;v6为第四层&#xff0c;再…

Kestrel的ListenAnyIP和ListenLocalhost的区别

问题在上篇文章&#xff0c;把AAStore.ProductCatalog.Api部署到docker中运行&#xff0c;输入地址访问报错如下图&#xff0c;说明外部无法访问这个url。&#xff08;当然本地开发环境测试是可以访问的&#xff09;。后来修改此处options.ListenLocalhost(8081)的代码改成opti…

[MyBatisPlus]Plus分页插件的配置和使用

Plus分页插件的配置和使用 配置类 package com.xxxx.mybatisplus.config;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.Pagin…

控制是否展示_现场展示板管理不在于看,而在于管!

点击上方"五株科技"&#xff0c;关注公众号&#xff0c;天天有精彩&#xff01;一位日本专家根据研究数据宣称&#xff0c;如果中国的中小企业有效实行车间展示板管理&#xff0c;最大能够提升生产效率30%以上。通常被管理者小视的车间展示板&#xff0c;在专家眼中却…