SSMP整合案例

news2024/11/23 19:59:04

黑马程序员Spring Boot2

文章目录

  • 1、创建项目
    • 1.1 新建项目
    • 1.2 整合 MyBatis Plus
  • 2、创建表以及对应的实体类
    • 2.1 创建表
    • 2.2 创建实体类
      • 2.2.1 引入lombok,简化实体类开发
      • 2.2.2 开发实体类
  • 3、数据层开发
    • 3.1 手动导入两个坐标
    • 3.2 配置数据源与MyBatisPlus对应的配置
    • 3.3 开发Dao接口(继承BaseMapper)
    • 3.4 制作测试类测试Dao功能是否有效
    • 3.5 遇到问题
    • 3.5 开启MyBatis Plus的日志
    • 3.6 分页功能的视线
    • 3.7 按照条件查询
  • 4、业务层开发
    • 4.1 标准开发
    • 4.2 快速开发方案
  • 5、表现层开发
    • 5.1 表现层代码
    • 5.2 表现层数据一致性处理
  • 6、前后端协议联调

1、创建项目

1.1 新建项目

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

1.2 整合 MyBatis Plus

  1. 访问 https://mvnrepository.com/ 搜索 mybatis plus 选择第一个,选择一个版本,复制其坐标,粘贴到pom.xml,刷新maven

在这里插入图片描述

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.7</version>
        </dependency>
  1. 修改配置文件为yml格式

2、创建表以及对应的实体类

2.1 创建表

# 创建数据库
create database ssm;
# 使用数据库
use ssm;
# 创建表book
create table book(
    id int primary key , # 书id,主键
    type varchar(32), # 类型
    name varchar(32), # 书名
    description varchar(256) # 描述
);
# 查询测试
select * from book;
# 向表中插入16条数据
insert into book value (1,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (2,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (3,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (4,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (5,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (6,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (7,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (8,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (9,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (10,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (11,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (12,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (13,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (14,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (15,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (16,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕');

2.2 创建实体类

2.2.1 引入lombok,简化实体类开发

  1. 在 pom.xml 中引入 lombok 的坐标
    在这里插入图片描述
<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok-maven-plugin</artifactId>
            <version>1.18.20.0</version>
            <scope>provided</scope>
        </dependency>

2.2.2 开发实体类

  1. 新建pojo 包,新建Book 类
package com.itheima.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data // get/set方法、toString方法、hshCode方法、equals方法
@AllArgsConstructor //全参构造函数
@NoArgsConstructor // 无参构造函数
public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;
}

3、数据层开发

  • 技术实现方案
    • MyBatisPlus
    • Druid

3.1 手动导入两个坐标

在这里插入图片描述

 <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.23</version>
        </dependency>

3.2 配置数据源与MyBatisPlus对应的配置

在这里插入图片描述

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbcmysql://localhost:3306/mytails
      username: root
      password: 123456

3.3 开发Dao接口(继承BaseMapper)

package com.itheima.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itheima.pojo.Book;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface BookDao extends BaseMapper<Book> {
}

3.4 制作测试类测试Dao功能是否有效

package com.itheima.dao;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTest {
    @Autowired
    BookDao bookDao;
    @Test
    public void getById(){
        System.out.println(bookDao.selectById(1));
    }
}

3.5 遇到问题

  1. 报错信息如下
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookDao' defined in file [E:\IDEA\IDEA2023-zhuanye\project\heima\SpringBoot2\springboot-ssmp\springboot-ssmp\target\classes\com\itheima\dao\BookDao.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.ibatis.session.Configuration.parsePendingMethods(Z)V
  1. 解决方法
    • mybatis plus 的版本太高了,降低一下版本即可

3.5 开启MyBatis Plus的日志

  • 为方便调试可以开启MyBatis Plus的日志
    在这里插入图片描述
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.6 分页功能的视线

  1. 分页操作依赖MyBatisPlus分页拦截器实现功能
    • 创建一个包config ,在包下创建MPConfig类,类中代码如下

在这里插入图片描述

  • 分页操作师在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现
package com.itheima.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        // 定义拦截器
        MybatisPlusInterceptor interceptor =new MybatisPlusInterceptor();
        // 添加具体拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

  1. 使用IPage封装分页数据
  • 分页查询代码
    在这里插入图片描述
@Test
    void testGetPage(){
        IPage page=new Page(2,5);
        bookDao.selectPage(page,null);
    }
  • 分页操作需要设定分页对象IPage
  • IPage对象封装了分页操作中的所有数据
    • 数据
    • 当前页码值
    • 每页数据总量
    • 最大页码值
    • 数据总量

3.7 按照条件查询

 @Test
    void testGetBy(){
        String name="Spring";
        LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<Book>();
        lqw.like(name!=null,Book::getName,name);
        bookDao.selectList(lqw);
    }

4、业务层开发

4.1 标准开发

  1. 新建包service,在该包下创建BookService接口
package com.itheima.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.pojo.Book;

import java.util.List;

public interface BookService {
    boolean save(Book book);// 插入数据
    boolean delete(Integer id);// 根据id删除
    boolean update(Book book);// 更新数据
    Book getByAd(Integer id);// 根据id查询单个用户
    List<Book> getAll();// 查询所有数据
    IPage<Book> getByPage(int currentPage,int pageSize);// 查询某一页信息
}

  1. 实现类定义
package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.dao.BookDao;
import com.itheima.pojo.Book;
import com.itheima.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    BookDao bookDao;

    /**
     * 插入数据
     * @param book
     * @return
     */
    @Override
    public boolean save(Book book) {
//        book.setId(17);
//        book.setName("测试数据1");
//        book.setType("测试数据1");
//        book.setDescription("测试数据1");
        return bookDao.insert(book)>0;
    }

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    @Override
    public boolean delete(Integer id) {
        return bookDao.deleteById(id)>0;
    }

    /**
     * 更新数据
     * @param book
     * @return
     */
    @Override
    public boolean update(Book book) {
        book.setId(17);
        book.setDescription("我是更新之后的数据");
        return bookDao.updateById(book)>0;
    }

    /**
     * 根据id查询单条数据
     * @param id
     * @return
     */
    @Override
    public Book getById(Integer id) {
        return bookDao.selectById(id);
    }

    /**
     * 查询所有数据
     * @return
     */
    @Override
    public List<Book> getAll() {
        return bookDao.selectList(null);
    }

    /**
     * 查询某一页的数据
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public IPage<Book> getByPage(int currentPage, int pageSize) {
        IPage<Book> page=new Page(currentPage,pageSize);
        return bookDao.selectPage(page,null);
    }
}

  1. 测试类定义
package com.itheima.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.pojo.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookServiceTest {
    @Autowired
    BookService bookService;
    /**
     * 根据id查询单个
     */
    @Test
    public void getById(){
        System.out.println(bookService.getById(1));
    }

    /**
     * 新增数据
     */
    @Test
    public void testInsert(){
        Book book=new Book(17,"计算机理论","Spring实战 第5版","Spring入门经典教程 深入理解Spring 原理");
        bookService.save(book);
    }

    /**
     * 根据id删除数据
     */
    @Test
    public void testDelete(){
        bookService.delete(17);

    }

    /**
     * 更新数据
     */
    @Test
    public void testUpdate(){
        Book book=bookService.getById(16);
        book.setName("Spring实战");
        bookService.update(book);

    }

    /**
     * 查询所有数据
     */
    @Test
    public void testGetAll(){
        System.out.println(bookService.getAll());
    }

    /**
     * 查询某一页数据
     */
    @Test
    void testGetPage(){
        bookService.getByPage(2, 5);
    }
}

4.2 快速开发方案

  • 使用MyBatisPlus提供有业务层通用接口与业务层通用实现类
  • 在通用类基础上做功能重载或功能追加
  • 注意重载是不要覆盖原始操作,避免原始提供的功能丢失
  1. 接口定义
package com.itheima.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.pojo.Book;

public interface IBookService extends IService<Book> {
    // 可追加操作【可谁家大的操作与原始操作通过名称区分,功能类似】
}

  1. 实现类定义
package com.itheima.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.dao.BookDao;
import com.itheima.pojo.Book;
import com.itheima.service.IBookService;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl2 extends ServiceImpl<BookDao, Book> implements IBookService {
}

  1. 测试
package com.itheima.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.pojo.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookServiceTest2 {
    @Autowired
    IBookService bookService;
    /**
     * 根据id查询单个
     */
    @Test
    public void getById(){
        System.out.println(bookService.getById(1));
    }

    /**
     * 新增数据
     */
    @Test
    public void testInsert(){
        Book book=new Book(17,"计算机理论","Spring实战 第5版","Spring入门经典教程 深入理解Spring 原理");
        bookService.save(book);
    }

    /**
     * 根据id删除数据
     */
    @Test
    public void testDelete(){
        bookService.removeById(17);

    }

    /**
     * 更新数据
     */
    @Test
    public void testUpdate(){
        Book book=bookService.getById(16);
        book.setName("Spring实战");
        bookService.updateById(book);

    }

    /**
     * 查询所有数据
     */
    @Test
    public void testGetAll(){
        System.out.println(bookService.list());
    }

    /**
     * 查询某一页数据
     */
    @Test
    void testGetPage(){
        IPage<Book> page=new Page(2,5);
        bookService.page(page);
    }
}

5、表现层开发

  1. 基于Restful进行表现层接口开发
    • 新增:POST
    • 删除:DELETE
    • 修改:PUT
    • 查询:GET
  2. 接收参数
    • 实体数据:@RequestBody
    • 路径变量:@PathVariable

5.1 表现层代码

  1. 新建controller包,之后再该包下新建BookController类
package com.itheima.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.pojo.Book;
import com.itheima.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    IBookService bookService;

    /**
     * 查询全部数据
     * @return
     */
    @GetMapping
    public List<Book> getAll(){
        return bookService.list();
    }

    /**
     * 插入一条数据
     * @param book
     * @return
     */
    @PostMapping
    public Boolean save(@RequestBody Book book){
        return bookService.save(book);
    }

    /**
     * 更新数据
     * @param book
     * @return
     */
    @PutMapping
    public Boolean update(@RequestBody Book book){
        return bookService.updateById(book);
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Boolean delete(@PathVariable Integer id){
        return bookService.removeById(id);
    }

    /**
     * 分页查询
     * @param currentPage
     * @param pageSize
     * @return
     */
    @GetMapping("/{currentPage}/{pageSize}")
    public IPage<Book> getByPage(@PathVariable int currentPage,@PathVariable int pageSize){
        return bookService.getPage(currentPage,pageSize);
    }
}

5.2 表现层数据一致性处理

  1. 设计统一的返回值结果类型便于前端开发读取数据
  2. 返回值结构类型可以根据需求自行设定,没有固定格式
  3. 返回值结果类型类似于后端与前端进行数据格式统一,也称为前后端数据协议
  4. 统一返回结果例子
package com.itheima;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class R {
    private Boolean flag;
    private Object data;

}

6、前后端协议联调

  • 前后后端分离结构设计中页面归属前端服务器
  • 单体工程中页面放置在resources目录下的static目录中
    在这里插入图片描述

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

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

相关文章

第1讲:创建vite工程,使用框架为Vanilla时,语言是typescript,修改http端口的方法

直接在项目根目录创建 vite.config.ts文件。 在该文件中添加内容&#xff1a; import { defineConfig } from vite;export default defineConfig({server: {port: 7777,}, });最后尝试运行package.json中的Debug

【图解IO与Netty系列】Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制

Netty编解码器、TCP粘包拆包问题处理、Netty心跳检测机制 Netty编解码器编码器解码器编解码器Netty提供的现成编解码器 TCP粘包拆包问题处理Netty心跳检测机制 Netty编解码器 网络传输是以字节流的形式传输的&#xff0c;而我们的应用程序一般不会直接对字节流进行处理&#x…

金蝶BI方案与奥威BI:智能、高效的数据分析组合

在当今数据驱动的时代&#xff0c;企业对于快速、准确、全面的数据分析需求日益增长。金蝶BI方案和奥威BI SaaS平台正是为满足这一需求而精心打造的智能数据分析工具。 方案见效快 金蝶BI方案以其高效的数据处理能力&#xff0c;能够快速地将海量数据转化为有价值的信息。通过…

跟《经济学人》学英文:2024年6月15日这期 America

America seems immune to the world economy’s problems 美国似乎对世界经济问题免疫 immune to&#xff1a;美 [ɪˈmjun tu] 对…有免疫力&#xff1b;不受…感染&#xff1b;不受…的影响&#xff1b;免疫耐受&#xff1b; Elsewhere, political dysfunction and fiscal…

api-ms-win-crt-runtime-l1-1-0.dll文件丢失的情况要怎么处理?比较靠谱的多种修复方法分享

遇到api-ms-win-crt-runtime-l1-1-0.dll文件丢失的情况实际上是一个常见问题&#xff0c;解决此类问题存在多种方法。首先我们先来了解一下api-ms-win-crt-runtime-l1-1-0.dll文件吧&#xff0c;只有了解了我们才知道怎么去解决这个api-ms-win-crt-runtime-l1-1-0.dll文件丢失的…

【机器学习】计算机图形和深度学习模型NeRF详解(2)

1. 引言 本文是"计算机图形和深度学习模型NeRF详解"系列文章的续篇&#xff0c;进一步深入探讨了NeRF的核心技术。NeRF作为一项突破性技术&#xff0c;因其能够从有限的2D图像中重建出完整的3D场景&#xff0c;而在多个领域&#xff0c;如医学成像、3D场景重建、动画…

Spring中网络请求客户端WebClient的使用详解

Spring中网络请求客户端WebClient的使用详解_java_脚本之家 Spring5的WebClient使用详解-腾讯云开发者社区-腾讯云 在 Spring 5 之前&#xff0c;如果我们想要调用其他系统提供的 HTTP 服务&#xff0c;通常可以使用 Spring 提供的 RestTemplate 来访问&#xff0c;不过由于 …

国际荐酒师携手各国际荐酒师专业委员会深化2024年度合作

国际荐酒师&#xff08;香港&#xff09;协会携手广东海上丝绸之路文化促进会及广东省城镇化发展研究会&#xff0c;深化2024年度合作&#xff0c;共同打造品荐与传播大师班培养荐酒师专业人材 近日&#xff0c;国际荐酒师&#xff08;香港&#xff09;协会、广东海上丝绸之路…

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications.

通过防抖动代码解决ResizeObserver loop completed with undelivered notifications. 一、报错内容二、解决方案解释&#xff1a; 一、报错内容 我通过el-tabs下的el-tab-pane切换到el-table出现的报错&#xff0c;大致是渲染宽度出现了问题 二、解决方案 扩展原生的 Resiz…

操作系统 文件系统

实验目的&#xff1a; 掌握文件系统设计的基本思想。理解掌握文件系统基本数据结构的设计。理解掌握文件操作中涉及的数据结构访问过程。 实验内容&#xff1a; 1、编程实现一个简单的内存文件系统。实现Linux常见的一些文件操作命令。比如&#xff1a;ls/cat/cp/rm等。 实…

足底筋膜炎怎么治疗效果好得快

足底筋膜炎症状&#xff1a;疼痛是足底筋膜炎最典型和常见的症状。患者通常会感到足跟或足底区域的疼痛&#xff0c;这种疼痛可能表现为刺痛、钝痛或灼热感。疼痛的程度和频率因人而异&#xff0c;但通常会在早晨起床后或长时间休息后首次站立时最为明显。这是因为休息时足底筋…

华为云与AWS负载均衡服务深度对比:性能、成本与可用性

随着云计算的迅速发展&#xff0c;企业对于云服务提供商的选择变得越来越关键。在选择云服务提供商时&#xff0c;负载均衡服务是企业关注的重点之一。我们九河云将深入比较两大知名云服务提供商华为云和AWS的负载均衡服务&#xff0c;从性能、成本和可用性等方面进行对比。 AW…

使用CAPL创建系统变量之sysDefineNamespace

目录 0 前言 1 使用CAPL创建系统变量 0 前言 最近在项目中发现可以通过CAPL来创建系统变量&#xff0c;这样方法在一定程度上提高了代码的统一性和测试的便利性。想要加入HIL自动化测试群的小伙伴欢迎评论区留言或私信&#xff0c;让我们一起进步&#xff01; 1 使用CAPL创建…

Java23种设计模式(一)

前言 这2个月来&#xff0c;重新出发&#xff0c;从java开发需要的数据库、查询日志工具、开发工具等的安装、环境配置&#xff0c;再到后面的基础学习、数据库学习、扩展学习&#xff08;maven、mq、设计模式、spring 系列等等&#xff09;&#xff0c;边学边记录&#xff0c…

typeScript debug 调试

以leetcode 20为例 0.首先编写代码 function isValid(s: string): boolean {let stack: string[] []for (let index 0; index < s.length; index) {let x: string s[index]debuggerswitch (x) {case (:stack.push())breakcase [:stack.push(])breakcase {:stack.push(})…

契约锁电子签章平台 add 远程命令执行漏洞复现(XVE-2023-23720)

0x01 产品简介 契约锁电子签章平台是上海亘岩网络科技有限公司推出的一套数字签章解决方案。契约锁为中大型组织提供“数字身份、电子签章、印章管控以及数据存证服务”于一体的数字可信基础解决方案,可无缝集成各类系统,让其具有电子化签署的能力,实现组织全程数字化办公。通…

java.lang.ClassNotFoundException: javafx.util.Pair的问题解决与原因详解

先说解决办法: 1、引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version> </dependency>2、更换代码依赖地址&#xff1a; 原来依赖地址&#xff1a; import j…

中国首例!「DataKit」上架亚马逊云科技 Marketplace add-ons

在 2022 年的 re:Invent 大会上&#xff0c;亚马逊云科技宣布了一项重大更新&#xff1a;亚马逊云科技 Marketplace 为 Amazon Elastic Kubernetes Service&#xff08;Amazon EKS&#xff09;提供了附加组件的支持。这一创新功能极大地丰富了 EKS 的生态系统&#xff0c;使用户…

linux离线安装chrony服务校准时间

基础环境 Linux forlinx 5.10.35 #53 SMP PREEMPT Thu Mar 30 01:04:19 CST 2023 aarch64 aarch64 aarch64 GNU/Linux chrony源码包 下载地址&#xff1a;https://download.tuxfamily.org/chrony/ 以chrony-4.5.tar.gz举例说明 详细步骤 1.解压chrony tar zxvf chrony-4.…

办公楼导航系统:设计要点、功能实现与效益评估

随着现代办公楼的日益复杂化和规模化&#xff0c;如何高效、便捷地在楼宇内部进行定位和导航&#xff0c;已成为众多企业和员工关注的焦点。维小帮办公楼定位导航系统通过精准的定位和智能的导航功能&#xff0c;能够显著提升办公环境的智能化水平和办公效率。 一、维小帮办公…