当前位置: 首页 > news >正文

【net6】一文跑通前后端以及数据库,简单的天气系统管理(保姆入门)

一、前言

使用Vue3为前端,.net6为后端,连接postgreSQL数据库,连通前后端与数据库,实现最基础的天气管理系统的增删改查。

二、内容

目录

一、前言

二、内容

2.1 后端部分

2.1.1 在VS里面使用此模板创建项目

2.1.2 安装下列依赖包

2.1.3 目录展示

2.1.3.1 控制层代码

2.1.3.2 实体类代码

2.1.3.3 接口代码

2.1.3.4 接口实现代码

2.1.3.5 配置相关代码

2.2 数据库部分

2.3 前端部分

2.3.1 通过Vite安装Vue

2.3.2 页面代码部分

2.3.3 页面接口部分

2.4 实现

三、总结


2.1 后端部分

2.1.1 在VS里面使用此模板创建项目

此模板实现了基本的控制器,记住使用.net6创建

2.1.2 安装下列依赖包

第一个是ORM框架,第二个是连接数据库所需要的包,第三个是已有的包不用管,第四个是可以帮助后端字段名与数据库字段映射匹配的包

<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net6.0</TargetFramework><Nullable>enable</Nullable><ImplicitUsings>enable</ImplicitUsings></PropertyGroup><ItemGroup><PackageReference Include="Dapper" Version="2.1.66" /><PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.3" /><PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /><PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /></ItemGroup></Project>

2.1.3 目录展示

2.1.3.1 控制层代码
using Microsoft.AspNetCore.Mvc;
using WebApi.Models;
using WebApi.Repositories;namespace WebApi.Controllers
{[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{private readonly IWeatherRepository _repository;public WeatherForecastController(IWeatherRepository repository){_repository = repository;}// 获取全部天气预报数据[HttpGet("getWeather", Name = "GetWeatherForecast")]public async Task<ActionResult<IEnumerable<WeatherForecast>>> Get(){try{var data = await _repository.GetAllAsync();Console.WriteLine($"数据库获取列表如下{data}");return Ok(data);}catch (Exception ex){return StatusCode(500, new { error = "获取数据失败", message = ex.Message });}}// 根据 ID 获取天气预报数据[HttpGet("getWeatherById/{id}", Name = "GetWeatherForecastById")]public async Task<ActionResult<WeatherForecast>> Get(int id){try{var weatherForecast = await _repository.GetByIdAsync(id);if (weatherForecast == null){return NotFound(new { message = $"ID {id} 不存在" });}return Ok(weatherForecast);}catch (Exception ex){return StatusCode(500, new { error = "获取数据失败", message = ex.Message });}}// 添加天气预报数据[HttpPost("addWeather", Name = "AddWeatherForecast")]public async Task<ActionResult<WeatherForecast>> Post([FromBody] WeatherForecast weatherForecast){if (weatherForecast == null || !ModelState.IsValid){return BadRequest(new { message = "数据无效" });}try{await _repository.AddAsync(weatherForecast);return CreatedAtAction(nameof(Get), new { id = weatherForecast.Id }, weatherForecast);}catch (Exception ex){return StatusCode(500, new { error = "添加数据失败", message = ex.Message });}}// 更新天气预报数据[HttpPut("updateWeatherById/{id}", Name = "UpdateWeatherForecast")]public async Task<ActionResult> Put(int id, [FromBody] WeatherForecast weatherForecast){if (weatherForecast == null || !ModelState.IsValid){return BadRequest(new { message = "数据无效" });}if (id != weatherForecast.Id){return BadRequest(new { message = "ID 不匹配" });}try{var updated = await _repository.UpdateAsync(weatherForecast);if (!updated){return NotFound(new { message = $"ID {id} 不存在" });}return Ok(new { message = "更新成功" });}catch (Exception ex){return StatusCode(500, new { error = "更新数据失败", message = ex.Message });}}// 删除天气预报数据[HttpDelete("deleteWeatherById/{id}", Name = "DeleteWeatherForecast")]public async Task<ActionResult> Delete(int id){try{var deleted = await _repository.DeleteAsync(id);if (!deleted){return NotFound(new { message = $"ID {id} 不存在" });}return Ok(new { message = "删除成功" });}catch (Exception ex){return StatusCode(500, new { error = "删除数据失败", message = ex.Message });}}}
}
2.1.3.2 实体类代码

前端小写字母,映射到后端需要使用JsonPropertyName保证映射的准确,后端tempC需要使用Column来映射数据库的temp_c

using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;namespace WebApi.Models
{public class WeatherForecast{[JsonPropertyName("id")]public int? Id { get; set; }[JsonPropertyName("city")]public string? City { get; set; }[JsonPropertyName("tempC")][Column("temp_c")]public int TempC { get; set; }[JsonPropertyName("date")]public DateTime Date { get; set; }[JsonPropertyName("description")]public string? Description { get; set; }}
}
2.1.3.3 接口代码
using System.Collections.Generic;
using System.Threading.Tasks;
using WebApi.Models;namespace WebApi.Repositories
{public interface IWeatherRepository{Task<IEnumerable<WeatherForecast>> GetAllAsync();Task<WeatherForecast> GetByIdAsync(int id);Task AddAsync(WeatherForecast forecast);Task<bool> UpdateAsync(WeatherForecast forecast);Task<bool> DeleteAsync(int id);}
}
2.1.3.4 接口实现代码

@是占位符,这些值会在查询执行时替换掉相应的占位符。

using WebApi.Models;
using Npgsql;
using Dapper;namespace WebApi.Repositories
{public class WeatherRepository : IWeatherRepository{private readonly NpgsqlConnection _connection;public WeatherRepository(NpgsqlConnection connection){_connection = connection;}public async Task<IEnumerable<WeatherForecast>> GetAllAsync(){const string sql = "SELECT * FROM weather ORDER BY id ASC";return await _connection.QueryAsync<WeatherForecast>(sql);}public async Task<WeatherForecast> GetByIdAsync(int id){const string sql = "SELECT * FROM weather WHERE id = @Id";return await _connection.QueryFirstOrDefaultAsync<WeatherForecast>(sql, new { Id = id });}public async Task AddAsync(WeatherForecast forecast){const string sql = @"INSERT INTO weather (city, temp_c, date, description)VALUES (@City, @TempC, @Date, @Description)RETURNING id";var id = await _connection.ExecuteScalarAsync<int>(sql, forecast);forecast.Id = id;}public async Task<bool> UpdateAsync(WeatherForecast forecast){const string sql = @"UPDATE weatherSET city = @City, temp_c = @TempC, date = @Date, description = @DescriptionWHERE id = @Id";var rowsAffected = await _connection.ExecuteAsync(sql, forecast);return rowsAffected > 0;}public async Task<bool> DeleteAsync(int id){const string sql = "DELETE FROM weather WHERE id = @Id";var rowsAffected = await _connection.ExecuteAsync(sql, new { Id = id });return rowsAffected > 0;}}
}
2.1.3.5 配置相关代码

包含数据库配置,swagger文档配置,字段映射配置等

public static class StringExtensions
{public static string ToSnakeCase(this string str){return string.Concat(str.Select((c, i) => i > 0 && char.IsUpper(c) ? "_" + c : c.ToString())).ToLower();}
}

using Microsoft.OpenApi.Models;
using Npgsql;
using Dapper;
using WebApi.Repositories;using System.ComponentModel.DataAnnotations.Schema;
using WebApi.Models;// 自定义类型映射器(支持 ColumnAttribute + 智能命名转换)
var typeMapper = new CustomPropertyTypeMap(typeof(WeatherForecast),(type, columnName) =>{// 1. 先尝试通过 [Column("xxx")] 显式匹配var propWithAttribute = type.GetProperties().FirstOrDefault(prop =>{var attribute = prop.GetCustomAttributes(false).OfType<ColumnAttribute>().FirstOrDefault();return attribute?.Name == columnName;});if (propWithAttribute != null)return propWithAttribute;// 2. 再尝试智能匹配(PascalCase -> snake_case)
#pragma warning disable CS8603 // 可能返回 null 引用。return type.GetProperties().FirstOrDefault(prop =>string.Equals(prop.Name.ToSnakeCase(), columnName, StringComparison.OrdinalIgnoreCase));
#pragma warning restore CS8603 // 可能返回 null 引用。});SqlMapper.SetTypeMap(typeof(WeatherForecast), typeMapper);var builder = WebApplication.CreateBuilder(args);// 1. 添加服务配置
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{c.CustomOperationIds(e =>e.ActionDescriptor.AttributeRouteInfo?.Name?? $"{e.ActionDescriptor.RouteValues["controller"]}_{e.ActionDescriptor.RouteValues["action"]}");c.SwaggerDoc("v1", new OpenApiInfo{Title = "Weather API",Version = "v1",Description = "天气预报接口文档",Contact = new OpenApiContact { Name = "开发者", Email = "dev@example.com" }});
});// 2. 添加数据库连接服务(推荐使用配置文件)
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")?? "Host=localhost;Port=5432;Database=gzcDB;Username=postgres;Password=123456";builder.Services.AddSingleton<NpgsqlConnection>(sp =>new NpgsqlConnection(connectionString));// 3. 添加 Dapper 仓储服务
builder.Services.AddScoped<IWeatherRepository, WeatherRepository>();// 4. 添加跨域策略
builder.Services.AddCors(options => {options.AddPolicy("AllowAll", policy => {policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();});
});var app = builder.Build();// 5. 添加中间件
app.UseSwagger();
app.UseSwaggerUI(c =>
{c.SwaggerEndpoint("/swagger/v1/swagger.json", "Weather API v1");c.DisplayOperationId();
});app.UseHttpsRedirection();
app.UseAuthorization();
app.UseCors("AllowAll");// 6. 添加 API 路由
app.MapControllers();
app.Run();

2.2 数据库部分

1. 安装PGSQL数据库

网上安装教程很详细,去官网安装即可

    2. 打开pgAdmin

    要启动数据库不然会报错connection timeout expired

     3. 打开pgAdmin使用查询工具建表

      CREATE TABLE weather (id SERIAL PRIMARY KEY,city TEXT,temp_c INTEGER NOT NULL,date TIMESTAMP NOT NULL,  -- 包含时间部分(如 "2025-06-01 14:30:00")description TEXT
      );

      2.3 前端部分

      2.3.1 通过Vite安装Vue

      可参考其他博主的教程:vue3 + vite 安装配置及项目创建_vite安装-CSDN博客

      2.3.2 页面代码部分

      如图所示,创建项目完后可以贴上代码

      <script setup>
      import { ref, onMounted } from 'vue'
      import * as weatherApi from '../api/weather'// 当前操作的数据对象
      const weatherForecast = ref({id: null,city: '',tempC: '', date: '',description: ''
      })// 搜索用的 id
      const searchId = ref('')// 存储列表数据
      const weatherList = ref([])// 页面加载完成后自动执行
      onMounted(async () => {await loadAll()
      })// 加载所有天气信息
      async function loadAll() {try {const data = await weatherApi.getWeather();weatherList.value = data.map(item => ({...item,date: formatDate(item.date)}));} catch (err) {console.error('加载天气数据失败', err);}
      }
      function handleEdit(item) {weatherForecast.value = {...item,date: formatDate(item.date)};
      }function formatDate(dateStr) {if (!dateStr) return '';const date = new Date(dateStr);const year = date.getFullYear();const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始const day = String(date.getDate()).padStart(2, '0');return `${year}-${month}-${day}`;
      }// 根据 ID 查询
      async function getById() {if (!searchId.value) return alert('请输入 ID')try {const data = await weatherApi.getWeatherById(searchId.value)if (data) {weatherForecast.value = {...data,date: formatDate(data.date)};} else {alert('未找到该记录')}} catch (err) {alert('获取失败')}
      }// 添加天气
      async function add() {if (!weatherForecast.value.city || !weatherForecast.value.tempC) {alert('请填写城市和温度')return}try {const res = await weatherApi.addWeather({...weatherForecast.value,date: formatDate(weatherForecast.value.date)})alert('添加成功')loadAll()resetForm()} catch (err) {alert('添加失败')}
      }// 更新天气
      async function update() {if (!weatherForecast.value.id) {alert('请选择要更新的记录')return}try {await weatherApi.updateWeatherById(weatherForecast.value.id, weatherForecast.value)alert('更新成功')loadAll()} catch (err) {alert('更新失败')}
      }// 删除天气
      async function remove(id) {if (confirm('确定删除?')) {try {await weatherApi.deleteWeatherById(id)alert('删除成功')loadAll()} catch (err) {alert('删除失败')}}
      }// 表单重置
      function resetForm() {weatherForecast.value = {id: null,city: '',tempC: 0,date: formatDate(new Date()),description: ''}
      }
      </script><template><div class="weather-container"><h2>🌤️ 天气预报管理系统</h2><!-- 查询 --><div class="input-group"><input v-model="searchId" placeholder="输入ID" /><button @click="getById">🔍 查询</button></div><!-- 表单 --><div class="form"><div class="form-row"><label>城市:</label><input v-model="weatherForecast.city" /></div><div class="form-row"><label>温度:</label><input v-model.number="weatherForecast.tempC" /></div><div class="form-row"><label>日期:</label><input type="date" v-model="weatherForecast.date" /></div><div class="form-row"><label>描述:</label><input v-model="weatherForecast.description" /></div><div class="form-actions"><button @click="add">➕ 添加</button><button @click="update">🔄 更新</button></div></div><!-- 数据展示 --><div class="list"><table><thead><tr><th>ID</th><th>城市</th><th>温度</th><th>日期</th><th>描述</th><th>操作</th></tr></thead><tbody><tr v-for="item in weatherList" :key="item.id"> <!-- 使用 item.id --><td>{{ item.id }}</td><td>{{ item.city }}</td><td>{{ item.tempC }} ℃</td><td>{{ item.date }}</td><td>{{ item.description }}</td><td><button @click="handleEdit(item)">Edit</button><button @click="remove(item.id)">Delete</button> <!-- 使用 item.id --></td></tr></tbody></table></div></div>
      </template><style scoped>
      .weather-container {max-width: 800px;margin: 20px auto;padding: 20px;border-radius: 8px;background-color: #f9f9f9;box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
      }.input-group {display: flex;gap: 10px;margin-bottom: 20px;
      }.input-group input {flex: 1;padding: 8px;font-size: 14px;
      }.input-group button {padding: 8px 16px;background-color: #007bff;color: white;border: none;cursor: pointer;border-radius: 4px;
      }.form .form-row {display: flex;align-items: center;margin-bottom: 10px;
      }.form .form-row label {width: 80px;font-weight: bold;
      }.form .form-row input {flex: 1;padding: 8px;font-size: 14px;
      }.form-actions {margin-top: 15px;
      }.form-actions button {margin-right: 10px;padding: 10px 20px;border: none;border-radius: 4px;cursor: pointer;
      }.form-actions button:nth-child(1) {background-color: #28a745;color: white;
      }.form-actions button:nth-child(2) {background-color: #ffc107;color: black;
      }.list table {width: 100%;border-collapse: collapse;margin-top: 20px;
      }.list th,
      .list td {padding: 12px;text-align: left;border-bottom: 1px solid #ddd;
      }.list th {background-color: #007bff;color: white;
      }.list button {margin-right: 5px;padding: 6px 10px;border: none;border-radius: 4px;cursor: pointer;
      }.list button:nth-child(1) {background-color: #007bff;color: white;
      }.list button:nth-child(2) {background-color: #dc3545;color: white;
      }
      </style>

      2.3.3 页面接口部分

      import axios from 'axios';
      // 定义统一的 API 前缀
      const API_PREFIX = '/api/WeatherForecast';export async function getWeather() {try {const res = await axios.get(`${API_PREFIX}/getWeather`);console.log(res.data);return res.data;} catch (err) {return await Promise.reject(err);}
      }export async function getWeatherById(id) {try {const res = await axios.get(`${API_PREFIX}/getWeatherById/${id}`);console.log(res.data);return res.data;} catch (err) {return await Promise.reject(err);}
      }export async function addWeather(weatherForecast) {try {const res = await axios.post(`${API_PREFIX}/addWeather`, weatherForecast);console.log(res.data);return res.data;} catch (err) {return await Promise.reject(err);}
      }export async function updateWeatherById(id, weatherForecast) {try {const res = await axios.put(`${API_PREFIX}/updateWeatherById/${id}`, weatherForecast);console.log(res.data);return res.data;} catch (err) {return await Promise.reject(err);}
      }export async function deleteWeatherById(id) {try {const res = await axios.delete(`${API_PREFIX}/deleteWeatherById/${id}`);console.log(res.data);return res.data;} catch (err) {return await Promise.reject(err);}
      }
      

      2.4 实现

      截几张图,可以自己跑通后试试

      三、总结

      我们通过此小项目,跑通前端后端数据库,为将来更深入的学习奠定基础

      相关文章:

      【net6】一文跑通前后端以及数据库,简单的天气系统管理(保姆入门)

      一、前言 使用Vue3为前端&#xff0c;.net6为后端&#xff0c;连接postgreSQL数据库&#xff0c;连通前后端与数据库&#xff0c;实现最基础的天气管理系统的增删改查。 二、内容 目录 一、前言 二、内容 2.1 后端部分 2.1.1 在VS里面使用此模板创建项目 2.1.2 安装下列…...

      宝塔安装的 MySQL 无法连接的情况及解决方案

      宝塔安装的 MySQL 无法连接的情况及解决方案 宝塔面板是一款流行的服务器管理工具&#xff0c;其中集成的 MySQL 数据库有时会出现连接问题。本文详细介绍两种最常见的 MySQL 连接错误&#xff1a;“1130 - Host is not allowed to connect” 和 “1045 - Access denied”&…...

      【iOS】分类、扩展、关联对象

      分类、扩展、关联对象 前言分类扩展扩展和分类的区别关联对象key的几种用法流程 总结 前言 最近的学习中笔者发现自己对于分类、扩展相关知识并不是很熟悉&#xff0c;刚好看源码类的加载过程中发现有类扩展与关联对象详解。本篇我们来探索一下这部分相关知识&#xff0c;首先…...

      计算机网络学习(一)—— OSI vs TCP/IP网络模型

      一、OSI模型&#xff08;开放系统互联参考模型&#xff09; OSI&#xff08;Open Systems Interconnection&#xff09;模型由ISO&#xff08;国际标准化组织&#xff09;在1984年提出&#xff0c;用于标准化网络通信&#xff0c;它将网络通信分为七个层次&#xff1a; 层级名…...

      【MySQL成神之路】MySQL查询用法总结

      MySQL查询语句全面指南 一、基础查询语句 MySQL中select的基本语法形式 select 属性列表 from 表名和视图列表 [where 条件表达式] [group by 属性名[having 条件表达式]] [order by 属性名[asc|desc]] [limit <offset>,row count] 说明&#xff1a; where子句&…...

      攻防世界——Web题 fakebook

      首先测试网站的功能&#xff0c;当我注册一个账号时&#xff0c;发现这里的链接&#xff1a; 点进去看到URL&#xff1a; 感觉no这个地方可以尝试一下sql注入 推测应该是数字型注入 发现果然可以进行sql注入&#xff0c; 最终测得列数应该是4列&#xff0c;但当我尝试sql注入…...

      【Java微服务组件】异步通信P2—Kafka与消息

      欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 目录 引言Kafka与消息生产者发送消息到Kafka批处理发送设计消息的幂等信息确保消息送达acks配置…...

      AI数字人一体机和智慧屏方案:开启智能交互新纪元

      在当今这个信息化飞速发展的时代&#xff0c;AI技术正以前所未有的速度改变着我们的生活方式和工作模式。特别是在人机交互领域&#xff0c;AI数字人的出现不仅极大地丰富了用户体验&#xff0c;也为各行各业提供了前所未有的创新解决方案。本文将重点介绍由广州深声科技有限公…...

      10-码蹄集600题基础python篇

      题目如上&#xff1a; 这题就是ASCII的转换&#xff0c;直接使用ord就可以 下面是代码&#xff1a; def main():#code here# a1,a2input().split(",")# print(f"The ASCII code of {a1} is {ord(a1)}")# print(f"The ASCII code of {a2} is {ord(a2…...

      给几张图片和一段文字,怎么制作成带有语音的视频---php

      想用PHP将图片和文字转换成带有语音的视频&#xff0c;想做自动化的视频生成&#xff0c;比如用于广告、演示或者其他需要多媒体处理的场景。 接下来考虑PHP本身的能力。PHP主要是用于服务器端的脚本语言&#xff0c;不太擅长处理多媒体内容&#xff0c;比如视频和语音合成。所…...

      vue3中RouterView配合KeepAlive实现组件缓存

      KeepAlive组件缓存 为什么需要组件缓存代码展示缓存效果为什么不用v-if 为什么需要组件缓存 业务需求&#xff1a;一般是列表页面通过路由跳转到详情页&#xff0c;跳转回来时&#xff0c;需要列表页面展示上次展示的内容 代码展示 App.vue入口 <script setup lang"…...

      NIFI的处理器:ExecuteGroovyScript 2.4.0

      ExecuteGroovyScript是常用的处理器之一&#xff0c;用于执行GroovyScript脚本。该脚本负责处理传入的流文件&#xff08;例如传输到SUCCESS或删除&#xff09;以及由该脚本创建的任何流文件。如果处理不完整或不正确&#xff0c;会话将被回滚。 属性值-失败处理策略 Failure …...

      安全可控的AI底座:灯塔大模型应用开发平台全面实现国产信创兼容适配认证

      国产信创产品兼容适配认证是为了支持和推动国产信息技术产品和服务的发展而设立的一种质量标准和管理体系。适配认证旨在确保相关产品在安全性、可靠性、兼容性等方面达到一定的标准&#xff0c;以满足政府和关键行业对信息安全和自主可控的需求。 北京中烟创新科技有限公司&a…...

      .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)

      一&#xff1a;背景 1. 讲故事 开局一张表&#xff0c;故事全靠编&#xff0c;为了能够承上启下&#xff0c;先把参数列表放出来。 参数名说明__instance访问非静态方法的实例&#xff08;类似 this&#xff09;。__result获取/修改返回值&#xff0c;要想修改用 ref。__res…...

      Spring Boot 登录实现:JWT 与 Session 全面对比与实战讲解

      Spring Boot 登录实现&#xff1a;JWT 与 Session 全面对比与实战讲解 2025.5.21-23:11今天在学习黑马点评时突然发现用的是与苍穹外卖jwt不一样的登录方式-Session&#xff0c;于是就想记录一下这两种方式有什么不同 在实际开发中&#xff0c;登录认证是后端最基础也是最重要…...

      vscode离线安装组件工具vsix

      1.外网下载vsix 网址为&#xff1a;Open VSX Registry 2.输入需要下载的组件 3.下载组件 4.安装 5.选择安装文件 6.安装完成...

      Vue大数据量前端性能优化策略

      文章目录 前言Vue大数据量前端性能优化策略1. 虚拟列表的使用方式及优势2. 列表和图表的懒加载技术3. Web Worker 在图表数据预处理中的应用4. 图表渲染优化技巧5. 分批渲染技术实现方法&#xff08;如 requestIdleCallback&#xff09;6. 其他可行的 Vue 层优化策略 前言 Vue…...

      Hass-Panel - 开源智能家居控制面板

      文章目录 ▎项目介绍&#xff1a;预览图▎主要特性安装部署Docker方式 正式版Home Assistant Addon方式详细安装方式1. Home Assistant 插件安装&#xff08;推荐&#xff09;2. Docker 安装命令功能说明 &#xff1a;3. Docker Compose 安装升级说明Docker Compose 版本升级 功…...

      iPaaS集成平台技术选型关注哪些指标?

      在数字化转型进程中&#xff0c;企业系统间的数据孤岛问题日益凸显。根据IDC调研&#xff0c;85%的IT决策者将“系统集成效率”列为业务创新的关键瓶颈。iPaaS&#xff08;集成平台即服务&#xff09;凭借其敏捷性、低代码特性和智能化能力&#xff0c;已成为企业构建数字生态的…...

      JavaScript性能优化实战(14):跨端JavaScript性能优化

      在当今多端开发的时代,JavaScript已经突破了浏览器的界限,广泛应用于移动应用、桌面应用、小程序等各类环境。然而,不同平台的运行时环境存在差异,为JavaScript性能优化带来了新的挑战和思考维度。 目录 React Native性能优化最佳实践Electron应用性能优化策略混合应用中J…...

      多通道经颅直流电刺激器产品及解决方案特色解析

      前记 团队在多通道经颅直流电刺激这个技术方向&#xff0c;一路深耕。在服务了不少客户之后&#xff0c;为了方便后续的产品和方案推广。我们弄出来了产品和方案两种形态。标准产品是为了给用户演示以及一些常规的实验使用。方案则是为了满足不同方向的科研用户的需求。这两者相…...

      Quasar 使用 Pinia 进行状态管理

      官方文档&#xff1a;使用 Pinia 进行状态管理 |Quasar 框架 视频教程&#xff1a;quasar框架store-状态管理库pinia介绍_哔哩哔哩_bilibili 使用 Quasar CLI 创建一个新的store quasar new store date --format jsPinia存储模板详解解 基本结构解析 import { defineStore,…...

      计算机网络--第一章(下)

      1.计算机网络的分层结构 1.1 分层结构 网络体系结构描述的是&#xff0c;计算机网络有几层&#xff0c;有什么功能&#xff0c;用的什么协议。 水平方向的关系&#xff0c; 协议&#xff0c;说的是对等实体间通信需要遵守的规则。用于约束&#xff0c;这个约束的方向是水平的。…...

      Veo 3 可以生成视频,并附带配乐

      谷歌最新的视频生成 AI 模型 Veo 3 可以创建与其生成的剪辑相配的音频。 周二&#xff0c;在谷歌 I/O 2025 开发者大会上&#xff0c;谷歌发布了 Veo 3。该公司声称&#xff0c;这款产品可以生成音效、背景噪音&#xff0c;甚至对话&#xff0c;为其制作的视频增添配乐。谷歌表…...

      数据结构核心知识总结:从基础到应用

      数据结构核心知识总结&#xff1a;从基础到应用 数据结构是计算机科学中组织和存储数据的核心方式&#xff0c;直接影响程序的性能和资源利用率。本文系统梳理常见数据结构及其应用场景&#xff0c;帮助读者构建清晰的知识体系。 一、数据结构基础概念 数据结构是数据元素之间…...

      Flannel后端为UDP模式下,分析数据包的发送方式(二)

      发往 10.244.2.5 的数据包最终会经过物理网卡 enp0s3&#xff0c;尽管路由表直接指定通过 flannel.1 发出。以下以 Markdown 格式详细解释为什么会经过 enp0s3&#xff0c;结合 Kubernetes 和 Flannel UDP 模式的背景。 问题分析 在 Kubernetes 环境中&#xff0c;使用 Flanne…...

      超低延迟音视频直播技术的未来发展与创新

      引言 音视频直播技术正在深刻改变着我们的生活和工作方式&#xff0c;尤其是在教育、医疗、安防、娱乐等行业。无论是全球性的体育赛事、远程医疗、在线教育&#xff0c;还是智慧安防、智能家居等应用场景&#xff0c;都离不开音视频技术的支持。为了应对越来越高的需求&#x…...

      改写视频生产流程!快手SketchVideo开源:通过线稿精准控制动态分镜的AI视频生成方案

      Sketch Video 的核心特点 Sketch Video 通过手绘生成动画的形式&#xff0c;将复杂的信息以简洁、有趣的方式展现出来。其核心特点包括&#xff1a; 超强吸引力 Sketch Video 的手绘风格赋予了视频一种质朴而真实的质感&#xff0c;与常见的精致特效视频形成鲜明对比。这种独…...

      Circle宣布Circle Payments Network主网上线

      据 Circle 官方消息&#xff0c;Circle Payments Network 主网正式上线。该网络是一个基于区块链的支付协调协议&#xff0c;允许银行和支付服务提供商使用公共区块链上的 USDC 进行实时结算。 Circle Payments Network 支持企业对企业供应商支付、跨境汇款、资金管理、企业定期…...

      【RabbitMQ】记录 InvalidDefinitionException: Java 8 date/time type

      目录 1. 添加必要依赖 2. 配置全局序列化方案&#xff08;推荐&#xff09; 3. 配置RabbitMQ消息转换器 关键点说明 1. 添加必要依赖 首先确保项目中包含JSR-310支持模块&#xff1a; <dependency><groupId>com.fasterxml.jackson.datatype</groupId>&l…...

      linux 学习之位图(bitmap)数据结构

      bitmap 可以高效地表示大量的布尔值&#xff0c;并且在许多情况下可以提供快速的位操作。 1 定义 enum device_state{DOWN,DOEN_DONE,MAILBOX_READY,MAILBOX_PENDING,STATE_BUILD };DECLARE_BITMAP(state,STATE_BUILD)&#xff1b;相当于》u32 state[BITS_TO_LONGS(4)] BIT…...

      CNN手写数字识别/全套源码+注释可直接运行

      数据集选择&#xff1a; MNIST数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST)。训练集&#xff08;training set&#xff09;由来自250个不同人手写的数字构成&#xff0c;其中50%是高中学生&#xff0c;50%来自人口普查局&…...

      基于springboot+vue网页系统的社区义工服务互动平台(源码+论文+讲解+部署+调试+售后)

      感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统背景 在社会文明程度不断提升、社区治理需求持续深化的大背景下&#xff0c;社区义工服务作为…...

      MBSS-T1:基于模型的特定受试者自监督运动校正方法用于鲁棒心脏 T1 mapping|文献速递-深度学习医疗AI最新文献

      Title 题目 MBSS-T1: Model-based subject-specific self-supervised motion correction forrobust cardiac T1 mapping MBSS-T1&#xff1a;基于模型的特定受试者自监督运动校正方法用于鲁棒心脏 T1 mapping 01 文献速递介绍 心脏T1定量成像&#xff08;Quantitative Car…...

      Google机器学习实践指南(迭代学习机制解析篇)

      &#x1f525; Google机器学习(5)-迭代学习机制解析 Google机器学习实战(5)-深入理解模型训练中的迭代优化过程 一、迭代学习概念 ▲ 核心定义&#xff1a; 在训练机器学习模型时&#xff0c;首先对权重和偏差进行初始猜测&#xff0c;然后反复调整这些猜测&#xff0c;直到…...

      【时时三省】Python 语言----文件

      目录 1,文件打开 2, 文件关闭 3, 文件写入 4, 文件读出 5, 文件定位 6, 文件重命名 7, 复制文件 山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 1,文件打开 file = open(file, mode, buffering, encoding, errors, newline, closefd, opener) 2, 文…...

      WPF···

      设置启动页 默认最后一个窗口关闭,程序退出,可以设置 修改窗体的icon图标 修改项目exe图标 双击项目名会看到代码 其他 在A窗体点击按钮打开B窗体,在B窗体设置WindowStartupLocation=“CenterOwner” 在A窗体的代码设置 B.Owner = this; B.Show(); B窗体生成在A窗体中间…...

      架构图 C4 规范简介

      架构图 C4 规范简介 C4&#xff08;Context, Containers, Components, Code&#xff09;是一种用于软件架构可视化的分层建模方法&#xff0c;由 Simon Brown 提出。它通过四个不同层次的抽象来描述软件系统&#xff0c;适用于不同受众&#xff08;如业务人员、架构师、开发人…...

      运维Web服务器核心知识与实战指南

      一、Web服务器基础概述 &#xff08;一&#xff09;核心定义与功能 Web服务器是互联网的基础设施&#xff0c;负责存储、处理和传输网页内容&#xff0c;通过HTTP/HTTPS协议与客户端交互。其核心功能包括&#xff1a; 请求处理&#xff1a;监听端口&#xff08;默认80/443&a…...

      免费建站系统是什么?如何选择免费建站系统?

      如今&#xff0c;换互联网成为大家生活中必不可少的一部分。对于普通的个人、一些企业、包括一些事业单位&#xff0c;拥有一个高效实用的网站成为展示、宣传、产品介绍的重要途径。但是对于很多用户来说&#xff0c;对于一些没有建站基础的用户来说&#xff1a;建站是一项高门…...

      React---day1

      React 它允许我们只需要维护自己的状态&#xff0c;当状态改变时&#xff0c;React可以根据最新的状态去渲染我们的UI界面 开发React必须依赖三个库&#xff1a; eact&#xff1a;包含react所必须的核心代码react-dom&#xff1a;react渲染在不同平台所需要的核心代码babel&…...

      赋能智慧党建:远眺科技助力党校可视化系统高效落地

      项目背景&#xff1a;智慧党校建设的时代召唤 在数字化浪潮席卷各行各业的今天&#xff0c;传统党校亦面临转型升级的迫切需求。 宁波某地党校&#xff0c;积极响应国家关于推进“智慧党建”的号召&#xff0c;旨在通过引入先进信息技术&#xff0c;打造一个集数据展示、信息…...

      解决使用HBuilder X开发时uView组件不生效的问题

      1.uni-ui 是一个为 uni-app 开发的 UI 组件库&#xff0c;你可以通过 npm 安装它。 在项目的根目录下打开终端&#xff08;可以通过菜单“工具” > “终端”打开&#xff09;&#xff0c;然后运行以下命令来安装 uni-ui&#xff1a; npm install uview-ui2.安装后&#xff…...

      React中 lazy与 Suspense懒加载的组件

      MyHead.jsx console.log(MyHead.jsx); function Head() {return <>hello Head</>; } export default Head;懒加载.jsx // 引入 React 的 useState、lazy 和 Suspense API // lazy 用于懒加载组件&#xff0c;Suspense 用于在加载过程中显示 loading 状态 import …...

      网络学习-利用reactor实现http请求(六)

      一、实现HTTP请求 1、印象里面&#xff0c;总有人说C/C语言不能实现HTTP请求&#xff0c;其实不然。C/C语言完全可以实现HTTP请求。通过对select,poll,epoll等IO多路复用技术的学习以及reactor模式的学习&#xff0c;完全能够实现HTTP请求。 2、webserver 主要解决两个问题 …...

      【东枫科技】usrp rfnoc 开发环境搭建

      作者 太原市东枫电子科技有限公司 &#xff0c;代理销售 USRP&#xff0c;Nvidia&#xff0c;等产品与技术支持&#xff0c;培训服务。 环境 Ubuntu 20.04 依赖包 sudo apt-get updatesudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils …...

      RabbitMQ的其中工作模式介绍以及Java的实现

      文章目录 前文一、模式介绍1. 简单模式2. 工作队列模式3. 广播模式4. 路由模式5. 通配符模式6. RPC模式7. 发布确认模式 二、代码实现1、简单模式2、工作队列模式生产者消费者消费者 1消费者 2 3、广播模式 (Fanout Mode)生产者消费者 4、路由模式 (Direct Mode)生产者消费者 5…...

      Docker 镜像打包到本地

      保存镜像 使用 docker save 命令将镜像保存为一个 tar 文件。命令格式如下&#xff1a; docker save [options] IMAGE [IMAGE...]示例&#xff1a;docker save -o centos.tar centos:latest--output 或 -o&#xff1a;将输出保存到指定的文件中。 加载镜像 如果需要在其他机器…...

      5分钟搭建智能看板:衡石科技自助式BI工具使用教程

      在数据驱动的时代&#xff0c;业务人员需要快速将数据转化为洞察&#xff0c;而非依赖IT团队排队开发报表。衡石科技HENGSHI SENSE的自助式BI工具&#xff0c;通过零代码配置、模板化设计、智能分析三大核心能力&#xff0c;让任何人都能在5分钟内搭建专业级数据看板。本文将手…...

      安卓开发用到的设计模式(1)创建型模式

      安卓开发用到的设计模式&#xff08;1&#xff09;创建型模式 文章目录 安卓开发用到的设计模式&#xff08;1&#xff09;创建型模式1. 单例模式&#xff08;Singleton Pattern&#xff09;2. 工厂模式&#xff08;Factory Pattern&#xff09;3. 抽象工厂模式&#xff08;Abs…...