Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

  • 一、快速创建Spring boot项目
  • 二、项目完整目录
  • 三、pom.xml
  • 四、application.yaml
  • 五、实体类
  • 六、mapper
  • 七、IService接口
  • 八、Service实现类
  • 九、配置类
  • 十、枚举
  • 十一、增删改查测试类
  • 十二、服务测试类
  • 十三、分页测试类
  • 十四、枚举测试类
  • 十五、乐观锁测试类

一、快速创建Spring boot项目

在这里插入图片描述

二、项目完整目录

在这里插入图片描述

三、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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.lovejava.boot</groupId><artifactId>learnjava</artifactId><version>0.0.1-SNAPSHOT</version><name>learnjava</name><properties><java.version>8</java.version><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build></project>

四、application.yaml

spring:application:name: learnjavadatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://10.129.88.141:3306/data_entry_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: datasightpassword: datasight123456!Amybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    log-impl: org.apache.ibatis.logging.log4j.Log4jImpl
#  global-config:
#    db-config:
#      table-prefix: t_
#      id-type: AUTOtype-enums-package: com.lovejava.boot.enums

五、实体类

import com.baomidou.mybatisplus.annotation.*;
import com.lovejava.boot.enums.SexEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@TableName("user")
public class User {@TableId(value = "id",type=IdType.AUTO)private Long id;//    @TableField("sname")private String name;private Integer age;private SexEnum sex;private String email;@TableField("isDeleted")@TableLogicprivate Integer isDeleted;@Versionprivate Integer version;}

六、mapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lovejava.boot.pojo.User;
import org.springframework.stereotype.Repository;@Repository
public interface UserMapper extends BaseMapper<User> {
}

七、IService接口

IService 是 MyBatis-Plus 提供的一个通用 Service 层接口,它封装了常见的 CRUD 操作,包括插入、删除、查询和分页等。通过继承 IService 接口,可以快速实现对数据库的基本操作,同时保持代码的简洁性和可维护性。

IService 接口中的方法命名遵循了一定的规范,如 get 用于查询单行,remove 用于删除,list 用于查询集合,page 用于分页查询,这样可以避免与 Mapper 层的方法混淆。

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

八、Service实现类

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

九、配置类

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan("com.lovejava.boot.mapper")
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//添加乐观锁插件interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());// 如果配置多个插件, 切记分页最后添加interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbTypereturn interceptor;}
}

十、枚举

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;@Getter
@AllArgsConstructor
public enum SexEnum {MALE(1,"男"),FEMALE(2,"女");@EnumValue //将注解所标识的属性的值存储到数据库中private Integer sex;private String sexName;}

十一、增删改查测试类

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.lovejava.boot.mapper.UserMapper;
import com.lovejava.boot.pojo.User;
import net.minidev.json.JSONUtil;
import org.junit.jupiter.api.Test;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@SpringBootTest
public class MyBatisPlusTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testSelectList(){List<User> users = userMapper.selectList(null);System.out.println(users);users.forEach(System.out::println);}@Testpublic void testInsert(){User user = new User();user.setName("刘备");user.setAge(23);user.setEmail("fy@qq.com");int result = userMapper.insert(user);System.out.println("result:"+result);System.out.println("id:"+user.getId());}@Testpublic void testDelete(){int result = userMapper.deleteById(1860576442045870081L);System.out.println(result);}//DELETE FROM user WHERE name = ? AND age = ?@Testpublic void testDeleteByMap(){Map<String,Object> map = new HashMap<>();map.put("name","刘备");map.put("age",23);int result = userMapper.deleteByMap(map);System.out.println("result:"+result);}//通过多个id实现批量删除@Testpublic void testDeleteBatchIds(){List<Integer> list = Arrays.asList(1, 2, 3);int result = userMapper.deleteBatchIds(list);System.out.println("result:"+result);}@Testpublic void testUpdate(){User user = new User();user.setId(1860579637015023618l);user.setName("刘备");user.setEmail("lb@qq.com");int result = userMapper.updateById(user);System.out.println("result: " + result);}@Testpublic void testSelectById(){List<Long> list = Arrays.asList(1l, 2l, 3l);List<User> users = userMapper.selectBatchIds(list);users.forEach(System.out::println);}@Testpublic void testSelectByMap(){HashMap<String, Object> map = new HashMap<>();map.put("name","诸葛亮");map.put("age",20);List<User> users = userMapper.selectByMap(map);users.forEach(System.out::println);}@Testpublic void testConditionSelect(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","刘备").between("age",10,50).isNotNull("email");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}@Testpublic void testConditionOrder(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("age").orderByAsc("id");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}@Testpublic void deleteCondition(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("email");int result = userMapper.delete(queryWrapper);System.out.println("result:" + result);}@Testpublic void updateCondition(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt("age",20).like("name","刘备").or().isNull("email");User user = new User();user.setName("诸葛亮");user.setEmail("zhugeliang@qq.com");int result = userMapper.update(user, queryWrapper);System.out.println("result: "+result);}//UPDATE user SET name=?, email=? WHERE isDeleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))@Testpublic void updateCondition2(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name","诸葛亮").and(i -> i.gt("age",20).or().isNull("email"));User user = new User();user.setName("张飞");user.setEmail("zhangfei@qq.com");int result = userMapper.update(user, queryWrapper);System.out.println("result:"+result);}//UPDATE user SET name=?,email=? WHERE isDeleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))@Testpublic void updateCondition3(){UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.like("name","诸葛亮").and(i -> i.gt("age",20).or().isNull("email"));updateWrapper.set("name","孙权").set("email","sunquan@qq.com");int result = userMapper.update(null,updateWrapper);System.out.println("result:" + result);}@Testpublic void selectCondition(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name","age","email");List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);maps.forEach(System.out::println);}//子查询//SELECT id,name,age,email,isDeleted FROM user WHERE isDeleted=0 AND (id IN (select id from user where id < 10))@Testpublic void selectCondition2(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("id","select id from user where id < 10");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}//模拟实际条件//SELECT id,name,age,email,isDeleted FROM user WHERE isDeleted=0 AND (age >= ? AND age <= ?)@Testpublic void getCondition(){String username = "";Integer startage = 20;Integer endage = 35;QueryWrapper<User> queryWrapper = new QueryWrapper<>();if(StringUtils.isNotBlank(username)){queryWrapper.like("name",username);}if(startage!=null){queryWrapper.ge("age",startage);}if(endage!=null){queryWrapper.le("age",endage);}List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}//SELECT id,name,age,email,isDeleted FROM user WHERE isDeleted=0 AND (age >= ? AND age <= ?)@Testpublic void getCondition2(){String username = "";Integer startage = 20;Integer endage = 35;QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like(StringUtils.isNotBlank(username),"name","孙权").ge(startage!=null,"age",startage).le(endage!=null,"age",endage);List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}@Testpublic void testSelectLambda(){String username = "";Integer startage = 20;Integer endage = 35;LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.like(StringUtils.isNotBlank(username),User::getName,username).ge(startage!=null,User::getAge,startage).le(endage!=null,User::getAge,endage);List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}//UPDATE user SET name=?,age=?,email=? WHERE isDeleted=0 AND (age >= ? AND age <= ?)@Testpublic void testUpdateLambda(){String username = "";Integer startage = 20;Integer endage = 35;LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.like(StringUtils.isNotBlank(username),User::getName,username).ge(startage!=null,User::getAge,startage).le(endage!=null,User::getAge,endage);updateWrapper.set(User::getName,"诸葛亮回来了").set(User::getAge,16).set(User::getEmail,"诸葛亮@qq" +".com");int result = userMapper.update(null, updateWrapper);System.out.println("result: "+result);}@Testpublic void testOptimisticLocker2(){// 线程1//1.查询用户信息User user1 = userMapper.selectById(2);//2.修改用户信息user1.setName("马超1");user1.setAge(20);user1.setEmail("machao1@qq.com");//模拟另外一个线程执行了插队操作User user2 = userMapper.selectById(2);//2.修改用户信息user2.setName("马超2");user2.setAge(20);user2.setEmail("machao2@qq.com");userMapper.updateById(user2);//如果没有乐观锁就会覆盖插队线程的值//可以使用自旋锁来多次尝试提交userMapper.updateById(user1);}
}

十二、服务测试类

import java.util.ArrayList;
import java.util.List;@SpringBootTest
public class MyBatisPlusServiceTest {@Autowiredprivate UserService userService;@Testpublic void testGetCount(){int count = userService.count();System.out.println("总记录数: "+count);}@Testpublic void testInsertBatch(){List<User> list = new ArrayList<>();for (int i = 1; i<= 10; i++){User user = new User();user.setName("fy"+i);user.setAge(20+i);user.setEmail("fy"+i+"qq.com");list.add(user);}boolean b = userService.saveBatch(list);System.out.println("操作结果:"+b);}}

十三、分页测试类

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lovejava.boot.mapper.UserMapper;
import com.lovejava.boot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class MybatisPlusPluginsTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testSelectPage(){Page<User> page = new Page<>(1,1);userMapper.selectPage(page,null);page.getRecords().forEach(System.out::println);System.out.println(page.getTotal());}//SELECT COUNT(*) FROM user WHERE isDeleted = 0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)@Testpublic void testSelectConditionPage(){Page<User> page = new Page<>(1,1);QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","刘备").between("age",10,50).isNotNull("email");userMapper.selectPage(page,queryWrapper);System.out.println(page);System.out.println(page.getTotal());System.out.println(page.getRecords());System.out.println(page.getPages());System.out.println(page.hasNext());System.out.println(page.hasPrevious());}
}

十四、枚举测试类

import com.lovejava.boot.enums.SexEnum;
import com.lovejava.boot.mapper.UserMapper;
import com.lovejava.boot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class MyBatisPlusEnumTest {@Autowiredprivate UserMapper userMapper;@Testpublic void test(){User user = new User();user.setName("admin");user.setAge(23);user.setSex(SexEnum.MALE);user.setEmail("admin@qq.com");int result = userMapper.insert(user);System.out.println("result:" + result);}
}

十五、乐观锁测试类

实体类添加字段:

    @Versionprivate Integer version;

添加乐观锁插件

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan("com.lovejava.boot.mapper")
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//添加乐观锁插件interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());// 如果配置多个插件, 切记分页最后添加interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbTypereturn interceptor;}
}

乐观锁实现

    @Testpublic void testOptimisticLocker2(){// 线程1//1.查询用户信息User user1 = userMapper.selectById(2);//2.修改用户信息user1.setName("马超1");user1.setAge(20);user1.setEmail("machao1@qq.com");//模拟另外一个线程执行了插队操作User user2 = userMapper.selectById(2);//2.修改用户信息user2.setName("马超2");user2.setAge(20);user2.setEmail("machao2@qq.com");userMapper.updateById(user2);//如果没有乐观锁就会覆盖插队线程的值//可以使用自旋锁来多次尝试提交userMapper.updateById(user1);}

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

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

相关文章

C++:用红黑树封装map与set-1

文章目录 前言一、STL源码分析二、红黑树的构建三、map与set整体框架的搭建与解析四、如何取出进行比较&#xff1f;1. met与set的数据是不同的2. 取出数据进行比较1&#xff09;问题发现2&#xff09;仿函数解决 五、封装插入六、迭代器的实现1. operator* 与operator->2. …

Perforce《2024游戏技术现状报告》Part3:生成式AI、版本控制、CI/CD等游戏技术的未来趋势与应用

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

4-SpringCloud整合服务间的调用即负载均衡

springcloud目录&#xff1a; 1.Spring Cloud简介 2.SpringCloud整合eureka注册中心 3.SpringCloud整合服务注册 4.SpringCloud整合服务间的调用即负载均衡 5.SpringCloud整合Feign调用 6.SpringCloud整合config配置中心 7.SpringCloud整合zuul路由网关 我们复制一个yqx-user服…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch客户端在和集群连接时&#xff0c;如何选择特定的节点执行请求的&#xff1f; 100…

深入浅出,快速安装并了解汇编语言

1.什么是汇编语言 了解汇编语言需要先从了解机器语言开始&#xff0c;在计算机发展的初期阶段&#xff0c;机器语言是计算机直接理解和执行的二进制代码语言&#xff0c;其核心特点包括直接执行性、资源高效性、学习难度大以及平台依赖性。它主要由指令码构成&#xff0c;这些…

2.2_3 纠错编码—海明码

目录 1、海明码的纠错过程 2、海明距离 3、确认检验码位数 4、确定校验码和数据的位置 5、求出校验码的值 6、检错并纠错 方法一 方法二 1、海明码的纠错过程 2、海明距离 两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的海明距离(码距)&#xff0c;一…

1992-2021年 各省市县经过矫正的夜间灯光数据(GNLD、VIIRS)区域汇总:省份、城市、区县面板数据

1992-2021年 各省市县经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09;区域汇总&#xff1a;省份、城市、区县面板数据 .r.rar https://download.csdn.net/download/2401_84585615/90001905 从1992年至2021年&#xff0c;中国各省份、城市及区县的夜间灯光数据经过…

微信小程序上传微信官方审核流程(1)

1&#xff0c;打开微信开发者工具 2&#xff0c;微信开发者工具右上角有一个上传按钮&#xff0c;点击上传按钮 3&#xff0c;点击完上传按钮会弹出一个上传成功的提示&#xff0c;点击提示框中的确定按钮 4&#xff0c;点击完确定按钮后会显示填写版本好和项目备注 5&#x…

快速获取镜像包的方法

1、当我们需要在无网络的环境中&#xff0c;在Docker环境中安装某个镜像时&#xff0c;需要先下载这个镜像包后&#xff0c;再上传 2、下面以在minio为例 在有网络的电脑中使用使用命令下载 docker pull minio/minio将下载好的tar包保存到指定的目录下 save -o /home/cl/app…

11 —— 打包模式的应用

需求&#xff1a;在开发模式下想让webpack使用style-loader进行css样式的处理&#xff1b;让它把css代码内嵌在js中&#xff1b;在生产模式下提取css代码 —— 判断当前运行命令时所在的环境 方案&#xff1a;借助cross-env全局软件包&#xff0c;设置参数区分打包运行环境 …

docker容器化部署springboot项目

前言 docker安装 下载官网 选择自己的系统 然后安装文档内给的命令按顺序执行即可。设置仓库&#xff0c;安装docker. 一、更换镜像源 一般情况下,docker原本自带的镜像网站不一定连的上,就很容易导致下载镜像失败,因此需要换源. 创建/etc/docker/daemon.json并填入数据…

2024深育杯misc2

题目描述&#xff1a;攻击者远程服务器监听所用的端口是( )&#xff1f;请提交flag&#xff0c;例如端口号为80&#xff0c;则提交Sangfor{80} 附件解压打开是一个raw文件 用volatility3工具查看ip链接信息

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM&#xff1f; POM是PageObjectModule&#xff08;页面对象模式&#xff09;的缩写&#xff0c;其目的是为了Web UI测试创建对象库。在这种模式下&#xff0c;应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

L14.【LeetCode笔记】返回倒数第k个节点

目录 1.题目 2.分析 思路 代码 提交结果 1.题目 面试题 02.02. 返回倒数第 k 个节点 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 注意&#xff1a;本题相对原题稍作改动 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 …

linux-进程间通信

进程的通信是两个或多个进程实现数据的交互&#xff0c;让不同的进程看到同一份资源&#xff0c;而这份资源是由操作系统创建管理的。如果让其中一个进程来提供的话会破坏该进程的独立性&#xff0c;因为这个进程内部的数据可以被其他进程看到&#xff0c;那这个独立性就遭到了…

基于阿里云服务器部署静态的website

目录 一&#xff1a;创建服务器实例并connect 二&#xff1a;本地文件和服务器share 三&#xff1a;关于IIS服务器的安装预配置 四&#xff1a;设置安全组 五&#xff1a;建站流程 六&#xff1a;关于备案 一&#xff1a;创建服务器实例并connect 创建好的服务器实例在云…

Java算法OJ(10)哈希表练习

目录 1.前言 2.正文 2.1俩数之和 2.2无重复字符的最长子串 2.3罗马数字转整数 2.4整数转罗马数字 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来分享几道哈希表相关的练习题&#xff0c;操作比较基础但是思想比较重要&#xff0c;另外有许多思路与解法都是学习参照题解…

二叉树:堆的建立和应用

在建立堆之前&#xff0c;我们要知道什么是树和二叉树 树 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个结点组成的一个具有层次关系的集合&#xff0c;之所以把它叫做树&#xff0c;是因为它长得像一棵倒挂的树&#xff0c;也就是根在上面&…

oracle的静态注册和动态注册

oracle的静态注册和动态注册 静态注册&#xff1a; 静态注册 : 指将实例的相关信息手动告知 listener 侦 听 器 &#xff0c; 可以使用netmgr,netca,oem 以及直接 vi listener.ora 文件来实现静态注册&#xff0c;在动态注册不稳定时使用&#xff0c;特点是&#xff1a;稳定&…

postgresql按照年月日统计历史数据

1.按照日 SELECT a.time,COALESCE(b.counts,0) as counts from ( SELECT to_char ( b, YYYY-MM-DD ) AS time FROM generate_series ( to_timestamp ( 2024-06-01, YYYY-MM-DD hh24:mi:ss ), to_timestamp ( 2024-06-30, YYYY-MM-DD hh24:mi:ss ), 1 days ) AS b GROUP BY tim…