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

SpringBoot+Vue 简单小文章项目开发全过程

文章目录

  • 一、项目介绍
  • 二、需求设计
  • 三、数据库设计
  • 四、项目构建
    • 项目技术选型:
    • 构建项目说明:
      • 项目架构
      • maven
      • MySQL
      • Redis
  • 五、项目开发:
    • 项目开发思路:
    • 项目开发过程:
      • 1. 导入文件包/新建项目
      • 2. 新建子模块:
        • common模块
        • pojo模块
        • server模块
      • 3. 明确需求,开始开发
      • 4. server模块配置,让项目跑起来:
      • 5. 项目开发开始
      • 6. SpringBoot操作数据库配置
      • 7. 开发功能
      • 8. 增删改查功能开发
      • 9. 登录注册功能开发
      • 10. AOP权限校验
      • 11.前端相关
        • vue.config.js
        • main.js
        • 页面向后端发送请求:
  • 六、总结

一、项目介绍

这是个简单的项目,大概功能就是一个简单的记事本吧,发布文章,查看文章,登录注册。
项目仓库链接:仓库
接下来的文章最好是参考仓库里的代码来读,不要跟着文章敲。文章里面不会手把手带你敲的。

二、需求设计

就是登录注册,文章增删改查吧。

三、数据库设计

很简单得设计了一下,就三张表。一张用户表,一张分类表,一张文章表。
用户表:
id,username,password,name,email,role
分类表:
id,name
文章表:
id,title,content,category_id,user_id

四、项目构建

项目技术选型:

我们这个项目太简单了,就用用SpringBoot来构建项目。

构建项目说明:

项目架构

在这里插入图片描述
我们的项目主要就是3个模块,
common公用模块,公用的东西都在里面。(common模块的东西是照抄苍穹外卖的)
pojo数据模块,很多数据相关的东西就在这里面,比如说数据实体类什么的。
server服务模块,这个模块就是负责提供各种服务了。

maven

maven是一款为Java项目提供构建依赖管理支持的工具。
我们的项目会有很多依赖,这些依赖就得依靠maven了。
而依赖的东西添加的话就可以在pom.xml文件里面加。

MySQL

关系型数据库。所谓的数据持久化,就是将数据存起来,一般就是将数据存在本地。我们前面的数据库设计就是针对的MySQL数据库的设计。

Redis

非关系型数据库。KV存储结构。

五、项目开发:

项目开发思路:

一个字,抄。
要自己写项目,首先你的要去B站找个项目,先抄着,学里面的思路,跟着敲里面的代码,慢慢理解里面代码的功能,不然你想在0基础的情况下从0开始自己写个?做梦!
我前面的那个SpringBoot开发记录就是个例子。我就打算自己写,但是自己不是那么了解流程,不知道自己该做什么,导致我频频出错,项目开发进度贼迟缓,最后这个项目就逐渐搁浅了。是个败笔!
这个项目的开发是我在完成80%苍穹外卖后开始进行的。整个项目的基础文件也是拿的苍穹外卖的。

项目开发过程:

1. 导入文件包/新建项目

其实这一步很简单的,我们只需要新建一个目录(文件夹),然后用IDEA打开这个目录,再在里面复制粘贴我们的总pom.xml文件就行了。当然你也可以新建一个项目,再打开项目中的pom.xml文件,将我们的pom.xml文件的内容复制粘贴上
其实我们的这些pom.xml文件也都是苍穹外卖的,你要是照着敲过一次项目,那么你就会对这个流程有一个深刻的了解。
总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><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.3</version></parent><artifactId>CodeHome</artifactId><groupId>com.codehome</groupId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><properties><mybatis.spring>2.2.0</mybatis.spring><druid>1.2.1</druid><pagehelper>1.3.0</pagehelper><lombok>1.18.20</lombok><fastjson>1.2.76</fastjson><commons.lang>2.6</commons.lang><aliyun.sdk.oss>3.10.2</aliyun.sdk.oss><knife4j>3.0.2</knife4j><aspectj>1.9.4</aspectj><jjwt>0.9.1</jjwt><jaxb-api>2.3.1</jaxb-api><poi>3.16</poi><spring-boot-starter-mail>2.7.3</spring-boot-starter-mail></properties><dependencyManagement><dependencies><!-- mybatis依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring}</version></dependency><!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok}</version></dependency><!-- fastjson依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson}</version></dependency><!-- commons-lang依赖 --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>${commons.lang}</version></dependency><!-- druid依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid}</version></dependency><!-- pagehelper依赖 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper}</version></dependency><!-- knife4j依赖 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j}</version></dependency><!-- aspectj依赖 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${aspectj}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj}</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt}</version></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun.sdk.oss}</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>${jaxb-api}</version></dependency><!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi}</version></dependency><!--微信支付--><dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4.8</version></dependency><!--邮箱服务--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>${spring-boot-starter-mail}</version></dependency></dependencies></dependencyManagement></project>

2. 新建子模块:

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

common模块

这个模块的文件我就是照搬苍穹外卖的了。这个一个公共模块,里面的东西都还是很通用的。

pojo模块

这个模块的作用就是放项目涉及到的一些实体类。按规范来的话分为dto(查询实体类,前端传过来的数据类),entity(实体类,对应数据库里的表的实体类),vo(返回实体类,返回给前端的数据类)。按照实际情况设置。

server模块

这个就是我们的功能模块了。后端的功能就在这个模块里使用。

3. 明确需求,开始开发

按照我们前面的需求设计和数据库来整。
先看数据库:
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
看到数据库是这样的了,我们就可以开始写pojo模块的entity部分:
entity的类要和表里的字段对应
Category类:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Category {private Integer id;private String name;
}

Paper类:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Paper {private Integer id;private String title;private String content;private Integer categoryId;private Long userId;
}

Users:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Users implements Serializable {private Long id;private String username;private String password;private String name;private String email;private Integer role;
}

好了entity实体类就好了。

4. server模块配置,让项目跑起来:

进行配置:

  1. 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>com.codehome</groupId><artifactId>CodeHome</artifactId><version>1.0-SNAPSHOT</version></parent><groupId>com.codehome.server</groupId><artifactId>server</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--springboot 启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>compile</scope></dependency><!-- mysql和mybatis相关依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><!--redis相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><optional>true</optional></dependency><!--分页查询依赖--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId></dependency><!--lombok相关依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--swagger相关依赖--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency><!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency><!--邮箱服务--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>com.codehome.common</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><dependency><groupId>com.codehome.pojo</groupId><artifactId>pojo</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency></dependencies><packaging>jar</packaging><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--这里写上main方法所在类的路径--><configuration><mainClass>com.codehome.server.CodeHomeApplication</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
  1. yml文件配置
    yml文件
# 配置项目的端口
server:port: 8083 

启动类:

@SpringBootApplication
@Slf4j
@ComponentScan(basePackages = {"com.codehome.server","com.codehome.common","com.codehome.pojo"})
public class CodeHomeApplication {public static void main(String[] args) {SpringApplication.run(CodeHomeApplication.class, args);log.info("代码芝士,启动!");}
}

配置类:

/*** 配置类,注册web层相关组件*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {/*** 通过knife4j生成接口文档* @return*/@Beanpublic Docket docket() {ApiInfo apiInfo = new ApiInfoBuilder().title("代码芝士后端接口文档").version("1.0").description("代码芝士后端接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.codehome.server.controller")).paths(PathSelectors.any()).build();return docket;}/*** 设置静态资源映射* @param registry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}/*** 消息转换器*/protected void extendMessageConverters(List<HttpMessageConverter<?>> converters){log.info("开始扩展消息转换器");MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();converter.setObjectMapper(new JacksonObjectMapper());converters.add(0,converter);}
}

这样基础就实现了。项目应该就可以跑起来了。

5. 项目开发开始

开发server模块。
这里就要讲一讲controller层,service层,mapper层。
controller层:
controller层里放Controller类,通俗的来讲,Controller类的作用就是接收前端请求数据和返回信息的。
如这样:
我们在前端就可以通过向http://localhost:8083/api/paper/add发送带参数的Post请求来实现添加文章功能。
在这里插入图片描述

service层:
这个层主要负责的就是业务功能的实现了。写接口,实现接口。
在这里插入图片描述
mapper层:
这个层负责操作数据库里的内容。
在这里插入图片描述

6. SpringBoot操作数据库配置

Spring操作数据库一般可以通过MyBatis,MyBatisPlus来。
这里我们就需要进行一些配置了。
1.在pom.xml文件里配置。前面复制粘贴已经整好了。
2.在yml文件里配置:

spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/codehomebase?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: root # 这里用你自己的账号密码password: 123456mybatis:#mapper配置文件mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.codehome.pojo.entityconfiguration:#开启驼峰命名map-underscore-to-camel-case: true

配置完成后,应该怎么操作数据库呢?
很简单,我们可以整一个Mapper类
在这里插入图片描述
像这样就可以操作数据库了。具体内容可以看后面。

7. 开发功能

首先我们再看看我们的后端需求有哪些:
在这里插入图片描述
一般都是先进行登录注册功能的开发,但老实说,登录注册还是有点难度的,我们就先从文章的增删改查开始开发。

8. 增删改查功能开发

首先我们就要在controller层创建对应的controller类:
在这里插入图片描述
然后就是在service层创建对应的service接口,以及serviceImpl实现类:
在这里插入图片描述
在这里插入图片描述
再然后就是在mapper层创建Mapper类了:
在这里插入图片描述
建好后,项目结构大概是这样的:
在这里插入图片描述
开发CategoryController类:
这里就讲个大概,详情请看源码。
在类名上面:
@RestController是controller层必须加的注解
@RequestMapping("/***")就是请求路径的写法

在类中各个方法上面:
@PostMapping("/add")这个就是请求方式,有PostMapping,GetMapping,PutMapping等等

这里的@Api,@ApiOperation是接口文档相关的东西,详情可以查看
接口文档

@RestController
@RequestMapping("/api/category")
@Api(tags = "分类管理")
public class CategoryController {@Autowired  //自动装配注解public CategoryService categoryService;@PostMapping("/add")@ApiOperation("保存分类数据")public Result add(@RequestBody CategoryDTO categoryDTO){Category category  = Category.builder().name(categoryDTO.getName()).build();categoryService.save(category);return Result.success("新建成功");}

顺承下去,CategoryController有了后就得要去写CategoryService接口,在CategoryServiceImpl类中实现它们的功能。
在这里插入图片描述
大概就是这样,要注意加上@Service注解:
在这里插入图片描述
然后就开发mapper层的CategoryMapper:
关于Mapper,我们可以直接在上面写注解,也可以使用xml文件

@Mapper
public interface CategoryMapper {@Select("select * from category where name = #{name}")Category getCategoryByName(String name);void insert(Category category);@Delete("delete from category where id = #{id}")void deleteById(Integer id);void update(Category category);@Select("select * from category where id = #{id}")Category getById(Integer id);@Select("select * from category")List<Category> list();
}

在这里插入图片描述
有了上面的这些解释,大家就可以想想文章增删改查怎么写了。基本上都一样,大差不差的。

9. 登录注册功能开发

这里就得要参考登陆注册功能开发

10. AOP权限校验

参考AOP简单的权限校验

11.前端相关

这就很简单了,前端的内容无非就是向后端发送请求得到返回数据,更加返回的数据再在页面上进行渲染显示。
vue需要配置的部分:

vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,lintOnSave: false,devServer: {proxy: {'/api': {target: 'http://localhost:8083/api/',changeOrigin: true,pathRewrite: {'^/api': ''}}}},})
main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'const app = createApp(App);const axiosInstance = axios.create({baseURL: '/api' // 代理前缀,对应vue.config.js中的配置
});app.config.globalProperties.$axios = axiosInstance;app.use(store).use(router).mount('#app')
页面向后端发送请求:
// 获取数据const getData = async () => {const token = localStorage.getItem('token');try {//以下就是一个带token的请求的发送方式const res = await axios.get('/api/category/list', {headers: {token: `${token}`,}});console.log(paperData.value);} catch (error) {alert("权限不足")}}

在这里插入图片描述

六、总结

大概就是这样了。总之就是要多抄,多总结。总结下来的东西才是你自己的。加油!
在这里插入图片描述

相关文章:

SpringBoot+Vue 简单小文章项目开发全过程

文章目录 一、项目介绍二、需求设计三、数据库设计四、项目构建项目技术选型:构建项目说明:项目架构mavenMySQLRedis 五、项目开发&#xff1a;项目开发思路&#xff1a;项目开发过程&#xff1a;1. 导入文件包/新建项目2. 新建子模块&#xff1a;common模块pojo模块server模块…...

如何将发明原理应用于产品设计的概念阶段?

众所周知&#xff0c;产品设计的概念阶段是创意孵化的关键时期&#xff0c;它决定了产品的方向、定位及核心卖点。在这一阶段&#xff0c;将发明原理融入其中&#xff0c;能够极大地拓宽思维边界&#xff0c;激发前所未有的设计灵感。具体步骤如深圳天行健企业管理咨询公司下文…...

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件

vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件&#xff0c;不仅如此&#xff0c;还有设定其他应用打开相应的文件&#xff0c;比如chrome打开html。插件食用方法也比较简单&#xff0c;安装后&#…...

AutoDL下huggingface下载模型位置问题

AutoDL系统盘只有30G&#xff0c;数据盘有50G且可扩容&#xff0c;模型及数据集空间通常较大&#xff0c;为节省系统盘空间&#xff0c;我们将文件都存储于数据盘&#xff0c;在运行的代码最前端&#xff08;一定要在最前面&#xff09;添加 import os os.environ[HF_HOME] /…...

SpringBoot基础(一):快速入门

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 目录 一、SpringBoot简介二、快速入门三、SpringBoot核心组件1、parent1.1、spring-boot-starter-parent1.2、spring-boot-dependencies 2、starter2.1、spring-boot-starter-web2.2、spring-boot-starter2.3、…...

使用Weka进行数据挖掘与机器学习

在当前大数据时代&#xff0c;数据挖掘与机器学习已经成为了不可或缺的技术。而Weka是一个非常流行的机器学习软件&#xff0c;它提供了一整套的机器学习算法和数据处理工具。Weka不仅支持命令行操作和GUI&#xff0c;还提供了Java API&#xff0c;非常适合Java开发者进行数据挖…...

定时器知识点

#视频教程&#xff1a; 11.TIM定时中断 CSDN教程 知识点&#xff1a; 1.时钟源选择图 ![[Pasted Image 20240802103525_114.png]] 基本定时器 2个功能 &#xff1a;只能定时中断和主模式触发DAC的功能 知识点 1.时基单元&#xff1a;预分配器&#xff08;PSC&#xff09;、…...

桌面日历还能这样玩?这个日历太酷了吧!秒变桌面记事本!

大家应该有经常看日历的习惯&#xff0c;每个人都有不同的日历需求。特别是一些节假日&#xff0c;重要节日时候&#xff0c;大家看日历的频次就比较高了&#xff0c;如何选一款好用的日历&#xff1f;我们给大家展示一款非常不错的桌面日历&#xff0c;看下你喜不喜欢&#xf…...

基于深度学习的太阳暗条检测(2020年以来)

A universal method for solar filament detection from Hα observations using semi-supervised deep learning A&A, 686, A213 (2024) A universal method for solar filament detection from Hα observations using semi-supervised deep learning (aanda.org) ABS…...

【吊打面试官系列-Elasticsearch面试题】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

大家好&#xff0c;我是锋哥。今天分享关于 【Elasticsearch 在部署时&#xff0c;对 Linux 的设置有哪些优化方法?】面试题&#xff0c;希望对大家有帮助&#xff1b; Elasticsearch 在部署时&#xff0c;对 Linux 的设置有哪些优化方法? 面试官 &#xff1a;想了解对 ES 集…...

MySQL·C/C++访问数据库

目录 准备工作 测试是否安装成功 C/C语言访问 官方文档 接口介绍使用 mysql_init() mysql_close() 补充1&#xff1a;makefile编写 mysql_real_connect() 测试1&#xff1a;编译链接 mysql_query() 测试2&#xff1a;SQL语句测试 改 增 删 查 错误1&#x…...

python.tkinter设计标记语言(渲染2-渲染器)

TOC 前言 本文仅作为笔记记录。 在前文中&#xff0c;我们通过标记意义解释生成了带有明确渲染要求的参数组&#xff0c;以<title>为例&#xff0c;我们获取了title, level两个明确的渲染标记&#xff0c;这一部分由Tin标记解释器完成&#xff0c;不需要编写者花费过多…...

Cadence学习笔记 Day0 Cadence17.4环境安装

当然是选择“吴法安装” 直接跟着吴川斌博客的方法来就可以了&#xff0c;这里大致记录一下我的安装步骤&#xff1a; 安装许可证管理器破解许可证管理器安装软件以及补丁破解软件 获取 直接放出链接&#xff1a;吴川斌的博客 下载得到&#xff1a; 一、安装许可证管理器&am…...

k8s创建secret并在container中获取secret

k8s创建secret并在container中获取secret 本文使用的deployment和service与我的上一篇文章一样。link也放在下面了&#xff0c;如果不懂什么事deployment和service&#xff0c;可以先看我的上一篇文章。 k8s使用kustomize来部署应用 下面我们将通过创建secret开始。secret是我…...

Leetcode每日一题之仅仅反转字母(C++)

在学习之余对于知识的巩固也尤为重要&#xff0c;不论难度高低&#xff0c;都会对代码的理解有所加深&#xff0c;下面我们开始练习 思路解析 关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的&#xff0c;这里用到的知识就是关于 s…...

PDF预览:利用vue3-pdf-app实现前端PDF在线展示

目录 PDF预览&#xff1a;利用vue3-pdf-app实现前端PDF在线展示 一、vue3-pdf-app组件介绍及其优点 1、vue3-pdf-app是什么 2、作用与场景 3、类似的插件 二、项目初始化与依赖安装 1、初始化Vue3项目 2、安装依赖 三、集成vue3-pdf-app插件 1、引入插件 2、配置组件…...

【OpenCV C++20 学习笔记】拉普拉斯(Laplace)二阶求导-边缘检测

拉普拉斯二阶求导 原理拉普拉斯算子(Laplacian Operator) API实例 原理 在OpenCV中&#xff0c;Sobel算法可以对图片中的值求一阶导数&#xff0c;从而计算出图片中的边缘线。其原理如下面的示意图&#xff1a; 那么&#xff0c;如果再求一次导数的&#xff0c;即求二阶导数&…...

MySQL的下载和安装步骤

一、数据库概述 我们先来了解三个概念&#xff1a;数据库、数据库管理系统、SQL。 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Management System (DBMS)SQL操…...

Java国际版同城服务美容美发到店服务上门服务系统

&#x1f30d;全球美妆新风尚&#xff01;国际版同城服务&#xff0c;美容美发一键享 &#x1f3d9;️【国际视野&#xff0c;同城便捷】&#x1f3d9;️ 在这个全球化的时代&#xff0c;美丽不再受地域限制&#xff01;国际版同城服务系统&#xff0c;将全球顶尖的美容美发资…...

硬件模拟的基本原理

具体来说&#xff0c;这种设计方法减少了集成电路 (IC) 设计和开发的设计迭代次数&#xff0c;并且广泛适用于所有电力电子设计。我详细介绍了我在快速上市 IC 开发方面的经验&#xff0c;并将该方法与其他旨在缩短产品开发时间的技术进行了对比。 产品开发流程 图 1&#xff…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...