Mybatis学习笔记3 在Web中应用Mybatis
Mybatis学习笔记2 增删改查及核心配置文件详解_biubiubiu0706的博客-CSDN博客
技术栈:HTML+Servlet+Mybatis
学习目标:
掌握mybatis在web应用中如何使用
Mybatis三大对对象的作用域和生命周期
关于Mybatis中三大对象的作用域和生命周期、
官网说明
ThreadLocal原理及使用
巩固MVC架构模式
为学习Mybatis的接口代理机制做准备
实现功能:银行账户转账
新建表
插入两条数据
新建maven模块
目录结构
关于目录结构,因此写完这个小demo后发现的打包问题,因此项目里已经有不同包
因为不同选择不同的maven模板会导致目录结构不太一样,这里注意下面这个
如果这样配置,打包后还是找不到静态文件
有了
如果还是没有,再去查看下路径对不对,然后重新clean rebuild
注意下 有些web.xml里会有这个选项,如果没有默认就是false,如果有,不能为true,为true的话只支持映射配置的方式,会找不到@WebServlet这种注解形式
pom.xml导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>mybatis-03</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><packaging>war</packaging><dependencies><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency><!--mysql驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><!--logback依赖--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!--servlet依赖--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.1</version><configuration><!-- 设置为 true 表示 web.xml 文件是可选的 --><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build>
</project>
配置Tomcat
添加部署
写个前端页面
因为不是JSP 上下文地址写死
将配置文件放到resources目录下
分别是XXXMapper.xml映射文件
jdbc.properties----我原先没有用这种方式去配置,该文件不需要
logback.xml-------名字不要改,引入logback Mybatis会默认找该名字文件
myabtis-config.xml核心配置文件
几个文件
Mybatis核心配置文件,这个写的比较全,自己配置一下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--定义一些键值对,可以在当前文件中通过${}来使用,也可以在当前项目任意的mapper.xml文件中使用(就是下面指定的mapper文件)resource:指定外部文件--><properties resource="db.properties"><!--<property name="aaaa" value="bbbb"/>--></properties><settings><!--默认开启一级缓存,默认是SESSION 可选值:SESSION|STATEMENT如果value配置成STATEMENT,去掉一级缓存,每次都会去查,一般不配置这个--><setting name="localCacheScope" value="true"/><!--开启日志--><!--开启Mybatis标准的内置日志实现-->
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<!-- <setting name="logImpl" value="SLF4J"/>-->
<!-- 引入logback可以不开启,默认使用--><setting name="logImpl" value="SLF4J"/><!-- 开启驼峰,开启后,只要数据库字段和对象属性名字母相同,无论中间加多少下划线都可以识别 --><setting name="mapUnderscoreToCamelCase" value="true"/><!--开启二级缓存--><setting name="cacheEnabled" value="true"/><!--默认false 配置返回为null的列--><setting name="callSettersOnNulls" value="true"/><!--默认false 配置当查询的列为null值时候 返回的user为null--><setting name="returnInstanceForEmptyRow" value="true"/><!--默认是true 使用编译参数--><setting name="useActualParamName" value="true"/><!--默认SIMPLE 可以选择REUSE BATCH 如果全局配置的话显然不是很好,因此,在需要批量的时候通过其他方式修改还是让它保持默认的SIMPLE,不去修改它--><!-- <setting name="defaultExecutorType" value="BATCH"/>--></settings><!--指定实体类包别名--><typeAliases><package name="com.hrui.pojo"/></typeAliases><!--environments:数据库环境配置default:默认使用哪个库id:指定使用的数据库id--><environments default="development"><environment id="development"><!--transactionManager:事务管理器type取值有两种:1:type="JDBC",使用java.sql.Connection管理事务2:type="MANAGED",文档解释,几乎什么都不做,它不提交或回滚一个连接,而是让容器来管理事务的整个生命周期--><transactionManager type="JDBC"/><!--dataSource:数据源type="POOLED",使用连接池type="UNPOOLED",不使用连接池type="JNDI",JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。这种数据源配置只需要两个属性--><dataSource type="POOLED"><property name="driver" value="1"/><property name="url" value="1"/><property name="username" value="1"/><property name="password" value="1"/></dataSource></environment><!--另外配置一个数据源development2--><environment id="development2"><!--transactionManager:事务管理器type取值有两种:1:type="JDBC",使用java.sql.Connection管理事务2:type="MANAGED",文档解释,几乎什么都不做,它不提交或回滚一个连接,而是让容器来管理事务的整个生命周期--><!--mybatis提供了两种事务管理机制1.JDBC(可小写)事务管理器:mybatis框架自己管理事务,实际就是采用原生JDBC代码管理事务好比写JDBC时: conn.setAutoCommit(false);......业务处理......conn.commit();手动提交2.MANAGED(可小写)事务管理器mybatis不再管理事务,事务交给其他容器负责:例如Spring但是这里用MANAGED,因为没有容器好比事务没有开启,就会变成没有事务这回事,直接干了--><transactionManager type="JDBC"/><!--dataSource:数据源type="POOLED",使用连接池type="UNPOOLED",不使用连接池type="JNDI",JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。这种数据源配置只需要两个属性--><dataSource type="POOLED"><property name="driver" value="1"/><property name="url" value="1"/><property name="username" value="1"/><property name="password" value="1"/></dataSource></environment></environments><!--resource属性会自动从类的根路径下开始查找资源--><!--1.<package name="包名"> 标签用于自动扫描指定包下的映射文件,要求映射文件名和接口名保持一致,并且映射文件(.xml)和接口需要在同一个包中,否则会报错。2.<mapper class=""> 标签的class属性用于注册映射文件,同样要求映射文件名和接口名保持一致,并且映射文件(.xml)和接口需要在同一个包中,否则会报错。3.<mapper resource="org/xx/demo/mapper/xx.xml"/> 标签用于注册映射文件,与上述两种方式不同,这种方式不要求映射文件名和接口名一致。这里是通过命名空间(namespace)和mapper接口对应的,命名空间要与接口的全限定名保持一致。4.<mapper url="file:///d:/CarMapper.xml" />是绝对路径加载映射文件的,而且 .xml 文件的名称并不需要和接口名称相同。通过命名空间指定和接口关系--><!--告诉mybatis去哪里找mapper文件--><mappers><mapper resource="mapper/UserMapper.xml"/><mapper resource="mapper/TestMapper.xml"/><mapper resource="mapper/ArticleMapper.xml"/></mappers>
</configuration>
logback.xml 也可以网上招份比较全面的
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false"><!--定义⽇志⽂件的存储地址--><property name="LOG_HOME" value="D:/home"/><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:⽇志消息,%n是换⾏符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!-- 按照每天⽣成⽇志⽂件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--⽇志⽂件输出的⽂件名--><FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--⽇志⽂件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:⽇志消息,%n是换⾏符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!--⽇志⽂件最⼤的⼤⼩--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>100MB</MaxFileSize></triggeringPolicy></appender><!--mybatis log configure--><logger name="com.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- ⽇志输出级别,logback⽇志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR --><root level="DEBUG"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root>
</configuration>
XXXMapper.xml映射文件
像这个练习项目 Mybatis核心配置文件里配置可以少点 如下
目录结构
前端几个简单的HTML
index.html
SqlSessionUtil工具类
package com.example.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;/*** @author hrui* @date 2023/9/8 14:55*/
public class SqlSessionUtil {//工具类的构造方法一般都是私有化//方法都是静态的//为了防止new对象,构造方法私有化private SqlSessionUtil(){}private static SqlSessionFactory sqlSessionFactory;//类加载时候执行//SqlSessionUtil工具类在被加载的时候,解析mybatis-config1.xml.创建sqlSessionFactory对象static{try {//SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();//下面这么写的原因是SqlSessionFactoryBuilder就是为了创建sqlSessionFactory而来的,使用完后,就不需要,都不需要创建个局部变量//一个sqlSessionFactory对应一个数据库sqlSessionFactory= new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config1.xml"));} catch (IOException e) {e.printStackTrace();}}//全局的 服务器级别的,一个服务器当中定义一个即可private static ThreadLocal<SqlSession> local=new ThreadLocal<>();//获取会话对象 返回会话对象public static SqlSession openSession(){SqlSession sqlSession=local.get();if(sqlSession==null){sqlSession = sqlSessionFactory.openSession();local.set(sqlSession);}return sqlSession;}//提供一个关闭的方法public static void close(SqlSession sqlSession){if(sqlSession!=null){//因为核心配置文件中配置POOLED 这里关闭是交还给连接池sqlSession.close();//注意移除SqlSession对象和当前线程的绑定关系//因为Tomcat服务器支持线程池 比如说t1线程用完了,close交还给连接池了,这个sqlSession属于不可用的状态,你没有remove出去 如果t2线程拿到了,那么这个sqlSession不可用local.remove();}}
}
如果上面代码中的close静态方法中,没有从本地线程中将sqlSession remove
当另外一个线程再重用这个sqlSession对象时候而你又没有remove 不信可以试试,建议试试
pojo
web
service
impl
dao
impl
.xml映射文件 因配置了实体类包 因此result后面用大写或小写类名即可
mybatis核心配置文件
logback.xml
相关文章:
Mybatis学习笔记3 在Web中应用Mybatis
Mybatis学习笔记2 增删改查及核心配置文件详解_biubiubiu0706的博客-CSDN博客 技术栈:HTMLServletMybatis 学习目标: 掌握mybatis在web应用中如何使用 Mybatis三大对对象的作用域和生命周期 关于Mybatis中三大对象的作用域和生命周期、 官网说明 ThreadLocal原理及使用 巩…...
软件测试之功能测试详解
一、功能测试概述 1)功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。 2)功能测试,根据产品特性、操作描述和用户方案,测试一个产品的特性和…...
javascript选取元素的范围,可以包含父级,也可以不包含父级
//函数可以选取元素的范围,对于要选取文本的非常方便,或选取特定的子节点 function getRange(element){//判断是否支持range范围选取var supdocument.implementation.hasFeature("Range","2.0");var also(typeof document.createRan…...
QGIS怎么修改源代码?持续更新...
修改配置文件保存位置 修改目的:放着和本地安装的其他QGIS共用一份配置文件 修改文件:core/qgsuserprofilemanager.cpp 修改位置:第37行 return basePath QDir::separator() "my_profiles";修改完毕后,再次生成一下…...
dev board sig技术文章:轻量系统适配ARM架构芯片平台
摘要:本文简单介绍OpenHarmony轻量系统移植,会分多篇 适合群体:想自己动手移植OpenHarmony轻量系统的朋友 开始尝试讲解一下系统的移植,主要是轻量系统,也可能会顺便讲下L1移植。 1.1移植类型 OpenHarmony轻量系统的…...
MyBatis之增删查改功能
文章目录 一、创建各种类二、MyBatis的各种功能 1、查询<select>2、增加<insert>3、修改<update>4、删除<delete>三、总结 前言 在MyBatis项目中编写代码实现对MySql数据库的增删查改 一、创建各种类 1、在Java包的mapper文件下创建一个接口 我创建…...
Leetcode算法入门与数组丨5. 数组二分查找
文章目录 1 二分查找算法2 二分查找细节3 二分查找两种思路3.1 直接法3.2 排除法 1 二分查找算法 二分查找算法是一种常用的查找算法,也被称为折半查找算法。它适用于有序数组的查找,并通过将待查找区间不断缩小一半的方式来快速定位目标值。 算法思想…...
拓扑关系如何管理?
在设备对接涂鸦的云端过程中,一部分设备由于自身资源或硬件配置,无法直接连接云端。而是需要通过网关进行中转,由网关代理实现和云端进行数据交互,间接实现设备接入云端。这样的设备也称为子设备。 要想实现网关代理子设备接入云…...
vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs
vue vue的由来 vue教程和M-V-VM架构思想 vue的初步简单使用 nodejs vue的由来 # 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 ->…...
课程表 循环依赖 拓扑排序 go语言
学会拓扑排序题目的基本解法 res数组 记录上课顺序g 记录学了课程i 能解锁的课程jindeg 记录每个课程的入度q 记录入度为0的课程 for循环q去解放其他课程 本题来自力扣课程表 func findOrder(numCourses int, prerequisites [][]int) []int {res : []int{}//建一个二维数组记…...
【红包雨接口设计】
一、服务器地址 http://rb.atguigu.cn 二、公共请求头参数 参数名称类型是否必选描述tokenString是用户唯一标识 备注:为了方便我们今天演示,服务端接受所有token。 三、接口 1. 创建红包雨 请求方式:GET请求地址:/api/v1/se…...
SSL证书到期更换证书会影响排名吗?
在现代的数字化时代,网络安全和用户体验成为了网站运营商和开发者们需要高度关注的问题。SSL证书作为一种重要的安全协议,对网站的安全性和用户信任起着至关重要的作用。然而,随着SSL证书的有效期限届满,许多网站运营商面临着更换…...
前端常用库之-JavaScript工具库lodash
文章目录 前端常用库之-JavaScript工具库lodash一、什么是lodash二、安装三、lodash使用Lodash 的 pick() 函数介绍和使用react 实例demo:pick结合...展开运算符(spread operator) 前端常用库之-JavaScript工具库lodash 一、什么是lodash 官网: https:…...
Linux- execve()
execve() 是 Linux/UNIX 中的 exec 函数家族中的一个,它允许进程执行一个新的程序。具体地,execve() 替换当前进程的映像为新的程序映像。 函数原型如下: int execve(const char *pathname, char *const argv[], char *const envp[]);pathn…...
007 数据结构_堆——“C”
前言 本文将会向您介绍关于堆Heap的实现 具体步骤 tips:本文具体步骤的顺序并不是源代码的顺序 typedef int HPDataType; typedef struct Heap {HPDataType* _a;int _size;int _capacity; }Heap;初始化 void HeapCreate(Heap* hp, HPDataType* a, int n) {hp-&…...
zabbix的原理与安装
一、Zabbix介绍 1、zabbix 是什么? zabbix是一个开源的IT基础监控软件,能实时监控网络服务,服务器和网络设备的状态,如网络使用,CPU负载、磁盘空间等,主要是包括数据的收集、报警和通知的可视化界面zabbi…...
ReactNative中升级IOS 17版本Crash解决
ReactNative中升级IOS 17版本Crash解决 ReactNative中升级IOS 17版本Crash解决一、问题描述二、原因分析三、解决方案决策3.1 设置宽高为非零值3.2 使用新的UIGraphicsImageRenderer替换就版本的UIGraphicsBeginImageContext 四、可能使用到该API的三方库4.1 react-native-fast…...
MongoDB详解
一、MongoDB概述 MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一…...
【SpringCloud微服务全家桶学习笔记-服务注册zookeeper/consul】
SpringCloud微服务全家桶学习笔记 Eureka服务注册 gitee码云仓库 9.其他服务注册框架 (1)zookeeper安装与使用 zookeeper需安装在虚拟机上,建议使用CentOS,安装地址如下: zookeeper镜像源 选择第一个进入后下载ta…...
【滑动窗口】LCR 016. 无重复字符的最长子串
LCR 016. 无重复字符的最长子串 解题思路 窗口内的字符串就是不重复子串每次遇到新的字符 看看窗口内是否存在该字符 如果存在直接剔除 然后调整窗口左边界不存在 添加窗口内部 右边界 class Solution {public int lengthOfLongestSubstring(String s) {if(s.length() < …...
C++中将类成员函数作为变量传递给函数
假设类ClassName有一个成员函数 void ClassName::funcname(int);通过typedef定义一个类成员函数指针类型,参数和返回值类型都要与成员函数对应 typedef void (ClassName::*FuncPtr)(int); // 定义类成员函数指针获取到的参数就是 FuncPtr pf...
2024届数字IC设计秋招面经-鼎信
背景 985硕士,计算机科班,实验室做cpu设计和fpga算法加速,我做处理器安全方向,有项目。 投递 8.25 没有笔试,两轮面试,直接通知下周一面试,草草的准备了下。 一面 技术面 9.4 不到半小时 …...
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
前馈神经网络(FFNN)和多层感知机(MLP)
多层感知器(MLP, Multi-Layer Perceptron)和前馈神经网络(Feed-Forward Neural Network, FFNN)是深度学习中两个经常被使用的术语,它们经常被互换使用。让我们详细地了解这两个术语: 多层感知器 (MLP): M…...
EasySwipeMenuLayout - 独立的侧滑删除
官网 GitHub - anzaizai/EasySwipeMenuLayout: A sliding menu library not just for recyclerview, but all views. 项目介绍 A sliding menu library not just for recyclerview, but all views. Recommended in conjunction with BaseRecyclerViewAdapterHelper Feature…...
优麒麟下载、安装、体验
下载 官网 优麒麟 点击增强版、或者基础版进行下载 虚拟机安装 选择镜像 修改名称和存储路径 设置为50G 下一步,点击完成 开启安装 设置语言 去掉下载更新选项 继续 点击restart now 输入密码 出现下图说明安装成功,可以畅快的使用了...
Appium混合页面点击方法tap的使用
原生应用开发,是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发;HTML5(h5)应用开发,是利用Web技术进行的App开发。目前,市面上很多app都是原生和h5混合开发,…...
求解灰度直方图,如何绘制灰度直方图(数字图像处理大题复习 P1)
文章目录 1. 画 X 轴2. 画直方图3. Complete 视频原链接 数字图像处理期末考试大题 B站链接 1. 画 X 轴 2. 画直方图 有几个 0 就在图上画多高,同理有几个 1 ,X1 的地方就画多高 3. Complete 这里的情况比较平均,一般来说不会这么平均&a…...
8种结构型设计模式对比
一、适配器模式 简介 适配器模式是一种结构型设计模式,它用于将不兼容的接口转换为可兼容的接口。适配器模式允许两个不兼容的类能够协同工作,通过将一个类的接口转换为另一个类所期望的接口形式。这样就能够在不修改现有代码的情况下,使两…...
【PX4】Ubuntu20.04+ROS Noetic 配置PX4-v1.12.2和Gazebo11联合仿真环境【教程】
【PX4】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】 文章目录 【PX4】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】0. 安装UbuntuROS1. 安装依赖2. 安装QGC地面站3. 配置PX4-v1.12.23.1 安装PX43.2 测试PX4是否成功安装…...
自己免费怎么制作网站吗/海城seo网站排名优化推广
最近项目任务有需求,想探究一下对未知未加密网络协议的解析。 之前只了解过基本的计算机网络知识,对于具体的网络协议,更多是学术上的认识,而没有工程上的认知与实践。因此对于网络协议解析的工作,可谓是一筹莫展。 各…...
w7自己做网站/防晒霜营销软文
一,WIN8 默认以管理员启动Visual Studio 2010 今天给VS2010安装一个GIT的插件,可打开之前版本库里的程序竟然没有版本控制的图标,相应的菜单也没有。这时才注意到原来在WIN8里启动VS时默认不是以管理员启动的(即使你当前是以管理员登录的&…...
做网站送的企业邮箱能用吗/国内永久免费域名注册
1.面向过程的思维方式: 就是把解决问题的关注点,放到解决问题的每一个详细的步骤上面! 面向对象的思维方式:(面向对象就是一种思维方式,与代码关系不大) 就是把解决问题的关注点,放到…...
深圳网站制作网站建设/seo工作前景如何
为什么特别讨论二叉树的遍历 之前处理的都是线性结构,线性结构的遍历只有一条路径,遍历起来十分简单。 二叉树是非线性结构,每个结点可能有两个子树 / 后继,因此需要确定遍历的方法, 使二叉树上的所有结点都能排在一个…...
嘉兴网站建设技术开发/免费域名注册
package java.util;import java.util.function.Predicate; import java.util.stream.Stream; import java.util.stream.StreamSupport;/***1.Collection接口是集合继承关系中的根接口(root interface),有些集合允许重复元素, * 有些集合有序,JDK不提供…...
河北省建设工程招标投标协会网站/福州seo推广优化
在Apache RocketMQ中,NameServer旨在协调分布式系统的每个组件,并通过管理主题路由信息来履行大部分职责。大致来说,管理层由两部分组成:Broker定期更新元数据,包括他们拥有的topic,这些topic保存在每一个NameServer中…...