springboot创建web项目

一、创建项目

二、导入依赖(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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.12.RELEASE</version></parent><groupId>com.cy</groupId><artifactId>Springboot-day01-re</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></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-jdbc</artifactId></dependency><!--mybatis提供依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><!--连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>

三、配置文件

application.yml文件

server:port: 8080servlet:context-path: /suv
#Spring配置
spring:#资源配置datasource:#数据源类型type: com.alibaba.druid.pool.DruidDataSource#地址url: jdbc:mysql://localhost:3306/rbac#用户名username: root#密码password: chenying#驱动名称driver-class-name: com.mysql.jdbc.Driver#持久层框架配置    
mybatis:#别名配置type-aliases-package: com.cy.pojo.entity#映射文件mapper-locations: classpath*:mappers/**/*mapper.xml# 配置日志
logging:level:root: infocom.cy: debug

四、XxxApplication内容

@SpringBootApplication
public class XxxApplication {public static void main(String[] args) {SpringApplication.run(XxxApplication.class,args);}
}

五、使用注解或config配置文件解决注解问题

package com.cy.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedOrigin("*");config.addAllowedMethod("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);return new CorsFilter(source);}
}

六、完成后端的增删查改操作

controller(控制器层)

package com.cy.controller;import com.cy.pojo.dto.EmployeeDto;import com.cy.pojo.entity.Employee;
import com.cy.pojo.vo.Result;
import com.cy.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import java.util.List;@RestController
@RequestMapping("list")
//解决跨域问题
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@GetMapping("/{pageNo}/{pageSize}")public Result queryPage(@PathVariable("pageNo") Integer pageNo,@PathVariable("pageSize") Integer pagesize,@RequestParam(required = false) String  username ){EmployeeDto employees= employeeService.PageByData(pageNo,pagesize,username);Result result = Result.builder().code(20000).message("查询成功").data(employees).build();return result;}@PostMapping("/save")public Result save(@RequestBody Employee employee){Integer add= employeeService.addByData(employee);if (add==null){return Result.builder().code(50000).message("新增失败").build();}return  Result.builder().code(20000).message("新增成功").build();}@RequestMapping("/listById")public Result getById(@RequestParam("id") Integer id){Employee employee=employeeService.selectById(id);if (employee==null){return Result.builder().code(50000).message("查询失败").build();}return   Result.builder().code(20000).message("查询成功").data(employee).build();}@PutMapping("/update")public Result update(@RequestBody Employee employee){Integer update=employeeService.updateByData(employee);if (update==null){return Result.builder().code(50000).message("修改失败").build();}return  Result.builder().code(20000).message("修改成功").build();}@DeleteMapping("/delete")public Result del(@RequestParam Integer id){Integer del=employeeService.delById(id);if (del==null){return Result.builder().code(50000).message("删除失败").build();}return  Result.builder().code(20000).message("删除成功").build();}@RequestMapping("/batchDel")public Result batchDel(@RequestBody List<Integer> ids){Integer dels= employeeService.batchDel(ids);if (dels==null){return Result.builder().code(50000).message("批量删除失败").build();}return  Result.builder().code(20000).message("批量删除成功").build();}}

service(业务逻辑层)

package com.cy.service;import com.cy.pojo.dto.EmployeeDto;
import com.cy.pojo.entity.Employee;import java.util.List;public interface EmployeeService {EmployeeDto PageByData(Integer pageNo, Integer pagesize, String username);Integer addByData(Employee employee);Integer updateByData(Employee employee);Employee selectById(Integer id);Integer delById(Integer id);Integer batchDel(List<Integer> ids);
}
package com.cy.service.impl;import com.cy.mapper.EmployeeMapper;
import com.cy.pojo.dto.EmployeeDto;
import com.cy.pojo.entity.Employee;
import com.cy.service.EmployeeService;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;@Service
public class EmployeeServiceImpl implements EmployeeService {@Resourceprivate EmployeeMapper employeeMapper;@Overridepublic EmployeeDto PageByData(Integer pageNo, Integer pagesize,String username) {Integer total=employeeMapper.sum();int ceil =(int) Math.ceil((total / (double) pagesize));Integer c=ceil;Integer start;if (pageNo<c){start=(pageNo-1)*pagesize;}else {start=(ceil-1)*pagesize;}List<Employee> employeeList=employeeMapper.getPage(start,pagesize,username);EmployeeDto dto = EmployeeDto.builder().pageNo(pageNo).pageSize(pagesize).total(ceil).dataList(employeeList).build();return dto;}@Overridepublic Integer addByData(Employee employee) {Integer add=employeeMapper.add(employee);return add;}@Overridepublic Integer updateByData(Employee employee) {Integer update=employeeMapper.updateByData(employee);return update;}@Overridepublic Employee selectById(Integer id) {Employee employee=employeeMapper.getById(id);return employee;}@Overridepublic Integer delById(Integer id) {Integer del=employeeMapper.del(id);return del;}@Overridepublic Integer batchDel(List<Integer> ids) {return employeeMapper.batchDel(ids);}
}

mapper(数据访问层)

package com.cy.mapper;import com.cy.pojo.entity.Employee;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface EmployeeMapper {List<Employee> getPage(@Param("start") Integer start,@Param("pageSize") Integer pagesize,@Param("username") String username);Integer sum();Integer add(Employee employee);Integer updateByData(Employee employee);Employee getById(Integer id);Integer del(Integer id);Integer batchDel(List<Integer> ids);
}

mappers

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.mapper.EmployeeMapper"><insert id="add">insert into employee(username,name,password,email,age,admin,dept_id)values(#{username},#{name},#{password},#{email},#{age},#{admin},#{deptId})</insert><update id="updateByData">update employee<set><if test="username!=null">username=#{username},</if><if test="name!=null">name=#{name},</if><if test="password!=null">password=#{password},</if><if test="email!=null">email=#{email},</if><if test="age!=null">age=#{age},</if><if test="admin!=null">admin=#{admin},</if><if test="deptId!=null">dept_id=#{deptId},</if></set>where id=#{id}</update><delete id="del">delete from employee where id=#{id}</delete><delete id="batchDel">delete from employeewhere id<trim prefix="in (" suffix=")" suffixOverrides=","><foreach collection="ids" item="item" separator=",">#{item}</foreach></trim></delete><!--<mapper namespace="">--><select id="getPage" resultType="com.cy.pojo.entity.Employee">select * from employee<where><if test="username!=null">and username like concat("%",#{username},"%")</if></where><if test="start!=null and pageSize!=null">limit #{start},#{pageSize}</if></select><select id="sum" resultType="java.lang.Integer">select count(*) from employee</select><select id="getById" resultType="com.cy.pojo.entity.Employee">select * from employeewhere id=#{id}</select>
</mapper>

还有一些简单的工具类

EmployeeDto

package com.cy.pojo.dto;import com.cy.pojo.entity.Employee;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.ArrayList;
import java.util.List;/*** @Author chen* @Version 1.0* @Date 2024/12/24* @Description 返回前端的数据*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeDto {/***数据总数*/private Integer total;/***页面数*/private Integer pageNo;/***每页数据大小*/private Integer pageSize;/***数据集合*/private List<Employee> dataList=new ArrayList<>();
}

实体类

package com.cy.pojo.entity;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.ArrayList;
import java.util.List;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employee {/***主键*/private Integer id;/***用户名*/private String username;/***名称*/private String name;/***密码*/private String password;/***邮箱*/private String email;/***年龄*/private Integer age;/***管理员*/private Integer admin;/***所属部门*/private Integer deptId;//角色id集//private List<Integer> roleIds = new ArrayList<>();
}

统一后端返回前端的格式

package com.cy.pojo.vo;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @Author chen* @Version 1.0* @Date 2024/12/24* @Description 统一返回类型*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Result {/***状态码*/private Integer code;/***提示信息*/private String  message;/***返回数据*/private Object data;}

前端HTML页面效果显示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- Bootstrap --><link rel="stylesheet" href="./css/bootstrap.css" ><script src="./js/vue.js"></script><script src="./js/axios.min.js"></script>
</head>
<body>
<div id="app">
<table class="table"><form class="form-inline"><label >产品名/概述</label><input type="text" v-model="username" placeholder="请输入产品名/概述"><button type="submit" @click="search">搜索</button><button class="fat-btn"type="button" style="background-color: #269abc" @click="resBtn">重置</button></form><div><button class="fat-btn"type="button" style="background-color: #269abc" @click="asveBtn"> 新增</button><button class="fat-btn"type="button" style="background-color: tomato" @click="batchDel"> 批量删除</button></div><thead><tr><th>选择</th><th>用户名</th><th>用户</th><th>密码</th><th>邮件</th><th>年龄</th><th>管理员</th><th>操作</th></tr></thead><tbody><tr v-for="(value,key) in dataList" :key="key"><td><input type="checkbox" :value="value.id" v-model="ids"></td><td>{{value.username}}</td><td>{{value.name}}</td><td>{{value.password}}</td><td>{{value.email}}</td><td>{{value.age}}</td><td>{{value.admin}}</td><td><buttontype="button" style="background-color: tomato" @click="delData(value.id)"> 删除</button><button class="fat-btn"type="button" style="background-color: darkcyan" @click="findData(value.id)"> 编辑</button></td></tr></tbody>
</table><!--分页--><div style="padding-right: 20px"><ul class="pagination" ><li><a href="#">&laquo;</a></li><li v-for="page in totalPage" :key="page" ><a href="#" :class="{active:page==pageNo}" @click="change(page)">{{page}}</a></li><li><a href="#">&raquo;</a></li></ul></div>
<!--新增窗口--><div style="width: 50%;align-content: center" v-if="newBtn"><form><div class="form-group"><label >用户名</label><input type="text" class="form-control" v-model="addem.username"  placeholder="用户名"></div><div class="form-group"><label >用户</label><input type="text" class="form-control" v-model="addem.name"  placeholder="用户"></div><div class="form-group"><label >密码</label><input type="text" class="form-control" v-model="addem.password" placeholder="密码"></div><div class="form-group"><label >邮件</label><input type="text" class="form-control" placeholder="邮件" v-model="addem.email"></div><div class="form-group"><label >年龄</label><input type="text" class="form-control" placeholder="年龄" v-model="addem.age"></div><div class="form-group"><label >管理员</label><input type="text" class="form-control" placeholder="管理员" v-model="addem.admin"></div><div class="form-group"><label >所属部门</label><input type="text" class="form-control" placeholder="所属部门" v-model="addem.deptId"></div><button type="submit" class="btn btn-default" @click="saveData">确定</button><button type="submit" class="btn btn-default" @click="closeBtn">取消</button></form></div>
<!--编辑窗口--><div  style="width: 50%;align-content: center" v-if="updateBtn"><form><div class="form-group"><label >用户名</label><input type="text" class="form-control" v-model="empol.username"  placeholder="用户名"></div><div class="form-group"><label >用户</label><input type="text" class="form-control" v-model="empol.name"  placeholder="用户"></div><div class="form-group"><label >密码</label><input type="text" class="form-control" v-model="empol.password" placeholder="密码"></div><div class="form-group"><label >邮件</label><input type="text" class="form-control" placeholder="邮件" v-model="empol.email"></div><div class="form-group"><label >年龄</label><input type="text" class="form-control" placeholder="年龄" v-model="empol.age"></div><div class="form-group"><label >管理员</label><input type="text" class="form-control" placeholder="管理员" v-model="empol.admin"></div><div class="form-group"><label >所属部门</label><input type="text" class="form-control" placeholder="所属部门" v-model="empol.deptId"></div><button type="submit" class="btn btn-default" @click="updateData">确定</button><button type="submit" class="btn btn-default" @click="closeBtn">取消</button></form></div>
</div><script src="./js/bootstrap.js"></script>
<script>new Vue({el:'#app',data:{pageNo:1,pageSize:3,totalPage:1,dataList:[],ids:[],username:null,form:{username:null,name:null},addem:{},empol:{},newBtn:false,updateBtn:false},methods:{getAll(){console.log("username:",this.username)axios({method:'get',url:`http://localhost:8080/suv/list/${this.pageNo}/${this.pageSize}`,params:{username:this.username}}).then(resp=>{console.log("分页查询的数据:",resp.data)if (resp.data.code===20000){this.dataList=resp.data.data.dataListthis.totalPage=resp.data.data.total}})},change(page){this.pageNo=pagethis.getAll()},/*新增*/saveData(){axios({method: 'post',url: 'http://localhost:8080/suv/list/save',data: this.addem}).then(resp=>{if (resp.data.code===20000){alert(resp.data.message)}else {alert(resp.data.message)}})},findData(id){this.updateBtn = trueaxios({method:'get',url:'http://localhost:8080/suv/list/listById',params: {id:id}}).then(resp=>{console.log(resp.data)if (resp.data.code===20000){this.empol=resp.data.data}})},updateData() {axios({method:'put',url:'http://localhost:8080/suv/list/update',data:this.empol}).then(resp=>{if (resp.data.code===20000){alert(resp.data.message)this.updateBtn=falsethis.getAll()}})},asveBtn(){this.newBtn=true},search(){this.pageNo = 1,this.getAll()},resBtn(){this.closeBtn()this.username=nullthis.getAll()},closeBtn(){this.newBtn = false,this.updateBtn = false},/*删除*/delData(id){if (confirm("确定删除吗")){axios({method:'delete',url:'http://localhost:8080/suv/list/delete',params:{id:id}}).then(resp=>{if (resp.data.code===20000){alert(resp.data.message)}else {alert(resp.data.message)}this.pageNo=1this.getAll()})}},/*批量删除*/batchDel(){axios({method:'post',url:'http://localhost:8080/suv/list/batchDel',data:this.ids}).then(resp=>{alert(resp.data.message)this.pageNo=1this.getAll()})}},created(){this.getAll()}})</script>
</body>
</html>

数据库数据设置:

效果展示

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

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

相关文章

RAID5原理简介和相关问题

1、RAID5工作原理 2、RAID5单块硬盘的数据连续吗&#xff1f; 3、RAID5单块硬盘存储的是原始数据&#xff0c;还是异或后的数据&#xff1f; 4、RAID5的分块大小 ‌RAID5的分块大小一般选择4KB到64KB之间较为合适‌。选择合适的分块大小主要取决于以下几个考量因素&#xff1…

重温设计模式--模板方法模式

文章目录 一、模板方法模式概述二、模板方法模式UML图三、优点1代码复用性高2可维护性好3扩展性强 四、缺点五、使用场景六、C 代码示例1七、 C 代码示例2 一、模板方法模式概述 定义&#xff1a;定义一个操作中的算法骨架&#xff0c;而降一些步骤延迟到子类中。模板方法使得…

Websocket客户端从Openai Realtime api Sever只收到部分数据问题分析

目录 背景 分析 解决方案 背景 正常情况下&#xff0c;会从Openai Realtime api Sever收到正常的json数据,但是当返回音频数据时&#xff0c;总会返回非json数据。这是什么问题呢&#xff1f; 分析 期望的完整响应数据如下&#xff1a; {"session": {"inp…

运动控制卡网络通讯的心跳检测之C#上位机编程

本文导读 今天&#xff0c;正运动小助手给大家分享一下如何使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能。 01 ECI2618B硬件介绍 ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴&#xff0c;可扩展至12轴的运动控制…

SpringBoot状态机

Spring Boot 状态机&#xff08;State Machine&#xff09;是 Spring Framework 提供的一种用于实现复杂业务逻辑的状态管理工具。它基于有限状态机&#xff08;Finite State Machine, FSM&#xff09;的概念&#xff0c;允许开发者定义一组状态、事件以及它们之间的转换规则。…

基于图注意力网络的两阶段图匹配点云配准方法

Two-stage graph matching point cloud registration method based on graph attention network— 基于图注意力网络的两阶段图匹配点云配准方法 从两阶段点云配准方法中找一些图匹配的一些灵感。文章提出了两阶段图匹配点云配准网络&#xff08;TSGM-Net&#xff09; TSGM-Ne…

uniapp跨平台开发---webview调用app方法

1.app端实现 注意:为了实现实时通信,app端页面是.nvue 代码实现 <template><view class"content"><view class"web-view"><web-view class"web-view" :src"url" ref"webview" onPostMessage"o…

【专题】2024年悦己生活消费洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38654 在当今时代背景下&#xff0c;社会发展日新月异&#xff0c;人们的生活方式与消费观念正经历深刻变革。MoonFox 月狐数据的《2024 年悦己生活消费洞察报告》聚焦于这一充满活力与变化的消费领域。随着就业、婚姻等社会压力的…

生产看板管理系统涵盖哪些方面

嘿&#xff0c;各位搞生产管理的朋友&#xff0c;肯定都碰到过些麻烦事儿吧。我就寻思着&#xff0c;能不能弄出个 “明明白白” 的工作场地呢&#xff1f;让员工和管理人员都能随时查查生产进度&#xff0c;一发现生产里有啥问题就能立马知道。 生产进度不好追踪生产过程不清…

密码学期末考试笔记

文章目录 公钥加密之前的部分 (非重点&#xff0c;关注工具怎么用&#xff0c;和性质)一、对称加密 (symmetric ciphers)1. 定义 二、PRG (伪随机数生成器)1. 定义2. 属性 三、语义安全 (Semantic Security)1. one-time key2. 流密码是语义安全的 四、分组密码 (Block Cipher)1…

workman服务端开发模式-应用开发-vue-element-admin挂载websocket

一、项目根目录main.js添加全局引入 import /utils/websocket 二、在根目录app.vue 中初始化WebSocket连接 <template><div id"app"><router-view /></div> </template><script>import store from ./store export default {n…

我的 2024 年终总结

2024 年&#xff0c;我离开了待了两年的互联网公司&#xff0c;来到了一家聚焦教育机器人和激光切割机的公司&#xff0c;没错&#xff0c;是一家硬件公司&#xff0c;从未接触过的领域&#xff0c;但这还不是我今年最重要的里程碑事件 5 月份的时候&#xff0c;正式提出了离职…

信创源代码加密的答案:信创沙箱

在信息化与工业化融合创新&#xff08;信创&#xff09;的背景下&#xff0c;企业面临着前所未有的数据安全挑战。SDC沙盒技术以其独特的隔离和保护机制&#xff0c;为信创环境提供了强有力的支持。以下是SDC沙盒在信创支持方面的优势&#xff0c;这些优势体现了其在保护企业数…

Leecode刷题C语言之根据第k场考试的分数排序

执行结果:通过 执行用时和内存消耗如下&#xff1a; int gk 0;int compare(const void* a, const void* b) {int* ua *(int**)a;int* ub *(int**)b;return ub[gk] - ua[gk]; }int** sortTheStudents(int** score, int scoreSize, int* scoreColSize, int k, int* returnSiz…

Linux 下SVN新手操作手册

下面来介绍Linux 下 SVN操作方法&#xff1a; 1、SVN的安装 Centos 7 安装Subversion sudo yum -y install subversion Ubuntu 安装Subversion sudo apt-get install subversion 自定义安装&#xff0c;官方地址&#xff1a;https://subversion.apache.org/ 2、SVN的使用…

ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关

目录 应用 1&#xff1a;它是相关性还是托布勒第一定律&#xff1f; 应用 2&#xff1a;将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中&#xff0c;我们在新的空间组件实用程序&#xff08;Moran 特征向量&#xff09;工具集中发布了一个新工具 - 从字段过滤空间自相关。…

自定义一个maven骨架 | 最佳实践

自定义一个maven骨架 | 最佳实践 目的&#xff1a;将一个多模块项目的基础结构制作成maven骨架&#xff0c;实现项目的快速构建&#xff0c;风格统一 公司内部会制定自己的规范及包结构。当创建新项目的时候就需要选择骨架&#xff0c;即可生成包结构。 Archetype都为不同类型的…

CTFHUB-web进阶(Bypassdisable_function)

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…

workman服务端开发模式-GatewayWorker的使用

一、GatewayWorker介绍 Workerman是一个使用PHP开发的高性能组件&#xff0c;用于构建高性能的异步并发TCP、UDP、Unix Socket、HTTP、Websocket服务。 GatewayWorker是基于Workerman开发的一套TCP长连接的应用框架&#xff0c;实现了单发、群发、广播等接口&#xff0c;内置了…

oracle linux8.10+ oracle 23ai安装

介质准备&#xff1a; 数据库23ai https://edelivery.oracle.com 上述网站下载基础版本&#xff0c;本次未使用。 本次是安装了带补丁的版本&#xff1a; Database Release Update 23.6.0.24.10 GoldImage表示带补丁用于直接安装的软件包 查找888.1对应Primary Note for …