SpringMvc day1101

ok了家人们,今天我们继续 studying springMvc,let‘me see see

.SSM整合

SpringMVC
Spring
MyBatis
WebConfig
SpringConfigMybatisConfig
SpringMvcSupport
jdbc.properties
表现层
业务层持久层
EmpController
EmpServiceEmpMapper
EmpServiceImp
  • 创建Maven工程,添加依赖
<?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><groupId>com.cjx</groupId><artifactId>SpringMvc_04</artifactId><version>1.0-SNAPSHOT</version><!--  web项目打包方式是war--><packaging>war</packaging><dependencies><!--springMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><!--  spring的事务管理  --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.10.RELEASE</version></dependency><!--  mybatis  --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!--  spring整合mybatis  --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><!--  数据库的驱动包  --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><!--    <dependency>--><!--      <groupId>mysql</groupId>--><!--      <artifactId>mysql-connector-java</artifactId>--><!--      <version>5.1.47</version>--><!--    </dependency>--><!--  连接池  --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope></dependency></dependencies><build><plugins><!--Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><!--访问端口号 --><path>/</path><!--项目访问路径--><uriEncoding>UTF-8</uriEncoding></configuration></plugin></plugins></build></project>
  • 创建数据库和表
CREATE TABLE t_emp(
emp_id INT primary key AUTO_INCREMENT,
emp_name CHAR(100),
emp_salary DOUBLE(10,5)
);
INSERT INTO t_emp(emp_name,emp_salary)
VALUES("张三",200.33);
INSERT INTO t_emp(emp_name,emp_salary)
VALUES("李四",200.44);
INSERT INTO t_emp(emp_name,emp_salary)
VALUES("王五",200.55);
  • db.properties属性文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
  • JdbcConfig配置类
package com.cjx.config;import com.alibaba.druid.pool.DruidDataSource;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;public class JdbcConfig {@Value("${jdbc.driver}")private String driverName;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;//  spring管理第三方的bean 使用方法的返回值交给spring管理@Beanpublic DataSource dataSource(){DruidDataSource dataSource=new DruidDataSource();//数据源需要数据库的连接信息dataSource.setDriverClassName(driverName);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}//Spring事务管理需要的平台事务管理器对象@Beanpublic PlatformTransactionManager platformTransactionManager(DataSource dataSource){DataSourceTransactionManager ds=new DataSourceTransactionManager();ds.setDataSource(dataSource);return  ds;}
}
  • MybatisConfig配置类
package com.cjx.config;import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class MyBatisConfig {//把mybatis交给spring管理@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){SqlSessionFactoryBean ssfb=new SqlSessionFactoryBean();ssfb.setDataSource(dataSource);ssfb.setTypeAliasesPackage("com.cjx.pojo");return ssfb;}//扫描mapper文件 生成mapper代理对象@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc=new MapperScannerConfigurer();msc.setBasePackage("com.cjx.mapper");return msc;}
}
  • SpringConfig配置类
package com.cjx.config;import org.springframework.context.annotation.*;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.EnableTransactionManagement;@Configuration
@ComponentScan(value = "com.cjx",excludeFilters=@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class) )
@PropertySource("classpath:db.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
@EnableTransactionManagement //开启Spring事务管理
public class SpringConfig {
}
  • SpringMvcConfig配置类
package com.cjx.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration
@ComponentScan({"com.cjx.controller","com.cjx.config"})
@EnableWebMvc  //开启springmvc注解支持
public class SpringMvcConfig {
}
  • WebConfig配置类,加载SpringMvcConfig和SpringConfig配置类
package com.cjx.config;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;import javax.servlet.Filter;public class WebConfig extends AbstractDispatcherServletInitializer {//加载springmvc的配置类@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext webApplicationContext= new AnnotationConfigWebApplicationContext();webApplicationContext.register(SpringMvcConfig.class);return webApplicationContext;}//拦截所有的请求@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}//加载spring的配置类@Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext rootApplicationContext=new AnnotationConfigWebApplicationContext();rootApplicationContext.register(SpringConfig.class);return rootApplicationContext;}//解决post中文乱码@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter encodingFilter=new CharacterEncodingFilter();encodingFilter.setEncoding("utf-8");return new Filter[]{encodingFilter};}
}
  • 静态资源放行
package com.cjx.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;//当前类需要设置为配置类,并被扫描加载
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {//当访问/pages/xxxx时候,从/pages目录下查找内容//http://loclahost:8080/js/axios-0.18.0.jsregistry.addResourceHandler("/pages/**").addResourceLocations("/pages/");registry.addResourceHandler("/js/**").addResourceLocations("/js/");registry.addResourceHandler("/css/**").addResourceLocations("/css/");registry.addResourceHandler("/img/**").addResourceLocations("/img/");registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");}
}
  • 创建实体类对象
package com.cjx.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer empId;private String empName;private Double empSalary;
}
package com.cjx.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;@Data
@NoArgsConstructor
@AllArgsConstructorpublic class Result {private int code;//响应状态码private String msg;//响应消息private Object data;//响应数据
}
  • 持久层
package com.cjx.mapper;import com.cjx.pojo.Emp;
import org.apache.ibatis.annotations.*;import java.util.List;public interface EmpMapper {//根据id查找员工信息@Select("select emp_id empId,emp_name empName,emp_salary empSalary from t_emp where emp_id = #{empId}")public Emp findById(Integer empId);//查询所有员工信息@Select("select emp_id empId,emp_name empName,emp_salary empSalary from t_emp")public List<Emp> findAll();//根据id修改员工信息@Update("update t_emp set emp_name=#{empName},emp_salary=#{empSalary} where emp_id=#{empId}")public Integer updateById(@Param("empName") String empName,@Param("empSalary") Double empSalary,@Param("empId") Integer empId);//根据id删除员工信息@Delete("delete from t_emp where emp_id=#{empId}")public Integer deleteById(Integer empId);//添加一条数据@Insert("insert into t_emp values(null,#{empName},#{empSalary})")public Integer insertEmp(@Param("empName") String empName,@Param("empSalary") Double empSalary);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cjx.mapper.EmpMapper">
<!--    <select id="findById" resultType="Emp">-->
<!--        select emp_id empId,emp_name empName,emp_Salary empSalary from t_emp where emp_id=#{empId}-->
<!--    </select>-->
</mapper>

 以上两种都可以,一个是注释,一个是xml文件

记得建包的时候(在resource文件中要用 com/cjx/mapper)

  • 业务层
package com.cjx.service;import com.cjx.pojo.Emp;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;import java.util.List;public interface EmpService {Emp findEmpById(Integer empId);public List<Emp> findAllEmp();//根据id修改员工信息public Integer updateEmpById(String empName,Double empSalary,Integer empId);//根据id删除员工信息public Integer deleteEmpById(Integer empId);//添加一条数据public Integer insertEmp(String empName,Double empSalary);
}
package com.cjx.service.Impl;import com.cjx.mapper.EmpMapper;
import com.cjx.pojo.Emp;
import com.cjx.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service
@Transactional
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic Emp findEmpById(Integer empId) {return  empMapper.findById(empId);}@Overridepublic List<Emp> findAllEmp() {return empMapper.findAll();}@Overridepublic Integer updateEmpById(String empName,Double empSalary,Integer empId) {return empMapper.updateById(empName, empSalary,empId);}@Overridepublic Integer deleteEmpById(Integer empId) {return empMapper.deleteById(empId);}@Overridepublic Integer insertEmp(String empName,Double empSalary) {return empMapper.insertEmp(empName,empSalary);}
}
  • 表现层
package com.cjx.controller;import com.cjx.pojo.Emp;
import com.cjx.pojo.Result;
import com.cjx.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;@Controller
@RequestMapping("/emp")
public class EmpController {@Autowiredprivate EmpService empService;@RequestMapping("/findById")@ResponseBodypublic Result findById(Integer empId){Emp emp = empService.findEmpById(empId);System.out.println(emp);Result result = new Result(20000,"查询成功",emp);return result;}@RequestMapping("/findAll")@ResponseBodypublic Result findAll(){List<Emp> empList = empService.findAllEmp();Result result = new Result(20000,"查询成功",empList);return result;}@RequestMapping("/updateById")@ResponseBodypublic Result updateById(Integer empId,String empName,Double empSalary){Integer row = empService.updateEmpById(empName,empSalary,empId);Result result = new Result(20000,"查询成功",row);return result;}@RequestMapping("/deleteById")@ResponseBodypublic Result deleteById(Integer empId){Integer row = empService.deleteEmpById(empId);Result result = new Result(20000,"查询成功",row);return result;}@RequestMapping("/insertEmp")@ResponseBodypublic Result insertEmp(String EmpName,Double empSalary){Integer row = empService.insertEmp(EmpName, empSalary);Result result = new Result(20000,"查询成功",row);return result;}
}
  • 页面
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/11/1Time: 11:09To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><input type="button" value="根据Id查询员工信息" onclick="fn01()"/><script src="/js/axios-0.18.0.js"></script><script>function fn01() {axios.get("http://localhost:8080/emp/findById?empId=1").then(function(response){console.log(response.data)});}</script><input type="button" value="查询所有员工信息" onclick="fn02()"/><script src="/js/axios-0.18.0.js"></script><script>function fn02() {axios.get("http://localhost:8080/emp/findAll").then(function(response){console.log(response.data)});}</script><input type="button" value="根据Id修改员工信息" onclick="fn03()"/><script src="/js/axios-0.18.0.js"></script><script>function fn03() {axios.get("http://localhost:8080/emp/updateById?empName=zxs&empSalary=88.88&empId=2 ").then(function(response){console.log(response.data)});}</script><input type="button" value="根据Id删除员工信息" onclick="fn04()"/><script src="/js/axios-0.18.0.js"></script><script>function fn04() {axios.get("http://localhost:8080/emp/deleteById?empId=61").then(function(response){console.log(response.data)});}</script><input type="button" value="添加员工信息" onclick="fn05()"/><script src="/js/axios-0.18.0.js"></script><script>function fn05() {axios.get("http://localhost:8080/emp/insertEmp?empName=james&empSalary=88.88").then(function(response){console.log(response.data)});}</script>
</body>
</html>

.SpringMVC的统一异常处理

5.1 统一异常处理概述

系统中异常包括两类:编译时异常和运行时异常
RuntimeException ,前者通过捕获异常从而获取异常信息,
后者主要通过规范代码开发、测试通过手段减少运行时异常的
发生。
系统的 DAO Service 出现都通过 throws Exception 向上抛
出。所有的异常均抛出到表现层进行处理。表现层处理异常,
每个方法中单独书写,代码书写量巨大且意义不强,使用 AOP
思想进行解决。

5.2 项目异常处理代码实现

package com.cjx.exception;import com.cjx.pojo.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvice
public class ProjectException{@ExceptionHandler(Exception.class)public Result doException(Exception e){Result result = new Result(20000,"页面走丢了",null);return result;}}

5.3 自定义异常处理

package com.cjx.exception;public class GlobalNullException extends RuntimeException{public GlobalNullException() {}public GlobalNullException(String message) {super(message);}
}
package com.cjx.exception;import com.cjx.pojo.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvice
public class ProjectException{@ExceptionHandler(Exception.class)public Result doException(Exception e){Result result = new Result(20000,"页面走丢了",null);return result;}@ExceptionHandler(GlobalNullException.class)public Result doGlobalNullException(GlobalNullException e){Result result = new Result(400001, "李xxx来处理异常了", null);return result;}
}

ok家人们明天见byebye

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

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

相关文章

关于基于 GA102 核心的显卡及主要参数

基于 GA102 核心的显卡的主要参数&#xff1a; 主要用途 高端游戏, 专业图形处理 高端游戏, 专业图形处理 高端游戏, 专业图形处理 高端游戏, 专业图形处理 专业图形处理, 数据中心 数据中心, AI 计算 解释 CUDA 核心数&#xff1a;更多的 CUDA 核心意味着更强的并行计算能力。…

C++ 多态 (详解)

多态的概念 通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。举个栗子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&#xff1b;学生买票时&#xff0c;是半价…

雷池社区版新版本功能防绕过人机验证解析

前两天&#xff0c;2024.10.31&#xff0c;雷池社区版更新7.1版本&#xff0c;其中有一个功能&#xff0c;新增请求防重放 更新记录&#xff1a;hhttps://docs.waf-ce.chaitin.cn/zh/%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95 仔细研究了这个需求&#xff0c;…

省级-社会保障水平数据(2007-2022年)

社会保障水平是一个综合性的概念&#xff0c;它不仅涉及到一个国家或地区的社会保障制度覆盖范围&#xff0c;还包括了提供的保障种类与水平&#xff0c;以及这些制度在满足公民基本生活需求方面的能力。 2007-2022年省级-社会保障水平数据.zip资源-CSDN文库https://download.…

如何搭建汽车行业AI知识库:定义+好处+方法步骤

在汽车行业&#xff0c;大型车企面临着员工众多、价值链长、技术密集和知识传播难等挑战。如何通过有效的知识沉淀与应用&#xff0c;提升各部门协同效率&#xff0c;快速响应客户咨询&#xff0c;降低销售成本&#xff0c;并开启体系化、可持续性的知识管理建设&#xff0c;成…

【C++篇】数据之林:解读二叉搜索树的优雅结构与运算哲学

文章目录 二叉搜索树详解&#xff1a;基础与基本操作前言第一章&#xff1a;二叉搜索树的概念1.1 二叉搜索树的定义1.1.1 为什么使用二叉搜索树&#xff1f; 第二章&#xff1a;二叉搜索树的性能分析2.1 最佳与最差情况2.1.1 最佳情况2.1.2 最差情况 2.2 平衡树的优势 第三章&a…

如何在Linux下部署自己的ZFile开源网盘

ZFile 项目介绍 ZFile是一个功能强大、灵活的开源网盘系统&#xff0c;为用户提供安全便捷的文件存储和共享方案。 项目概述 ZFile由ZFile, Inc.开发和维护&#xff0c;基于Docusaurus构建。其用户友好的界面支持多种文件存储和共享功能&#xff0c;并具备高度的可定制性和扩…

平替、超越Jira?18 个最佳 Jira 替代方案【开源+免费+付费】

Jira 是一种流行的项目管理工具&#xff0c;被团队广泛用于跟踪和管理他们的任务、问题和项目。 打个不太恰当的比喻&#xff0c;Jira &#xff0c;她就是项目管理家的单反。 如果您正在寻找 Jira 的替代方案&#xff0c;本文介绍了 18个最重要的 Jira 替代方案&#xff0c;可以…

Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解

title: Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解 date: 2024/11/5 updated: 2024/11/5 author: cmdragon excerpt: nitro:build:public-assets 是 Nuxt 3 中的一个生命周期钩子,在复制公共资产之后调用。该钩子使开发者能够在构建 Nitro 服务器之前,对…

02_CC2530 + LED流水灯

CC2530 LED流水灯 前言 ​ 在搭建ZigBee定位系统前&#xff0c;先通过几个基础案例熟悉CC2530的一些外设和寄存器编程方式。CC2530基础篇由LED流水灯(按键控制启停、定时器中断方式)、定时器与Delay_ms延时函数、Uart串口通信三章组成。 按键控制启停–通用I/O中断 硬件电…

无线模块的最佳搭档:天线全面选型指南

在无线通信领域&#xff0c;天线的选择至关重要。它不仅影响信号的覆盖范围和传输质量&#xff0c;还直接关系到系统的整体性能。在众多无线模块中&#xff0c;找到合适的天线可以最大化其潜力&#xff0c;确保稳定和高效的数据传输。 在设计适用于射频系统的无线收发设备时&a…

产品思维笔记(一):打造用户喜爱的产品by Marty Cagan

全文摘要 《启示录&#xff1a;打造用户喜爱的产品》是由美国著名产品经理Marty Cagan所著&#xff0c;他曾经是eBay最出色的产品经理之一&#xff0c;也是Google X实验室的创始人之一。在这本书中&#xff0c;他分享了自己的经验和教训&#xff0c;帮助读者更好地理解如何打造…

推荐一款功能强大的电影格式转换器:Total Movie Converter

Coolutils Total Movie Converter(电影格式转换器)是一款可以将超清或者高清蓝光的视频电影进行格式转换的工具&#xff0c;高质量速度快操作简单就是软件最大的亮点&#xff0c;它可以转换几乎所有流行的视频编解码器。 基本简介 Coolutils Total Movie Converter 也可以使视…

掌声响起来——不确定性人工智能与高斯云方法的应用

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

P11232 [CSP-S 2024] 超速检测

P11232 [CSP-S 2024] 超速检测 难度&#xff1a;普及/提高。 考点&#xff1a;二分、贪心。 题意&#xff1a; 题意较长&#xff0c;没有题目大意&#xff0c;否则你也大意。 主干道长度为 L L L&#xff0c;有 n n n 辆车&#xff0c;看做左端点为 0 0 0&#xff0c;第 …

JSP九大内置对象和四大作用域

get和post区别&#xff1a; 比较项 get post 缓存 可以 不可以 收藏为书签 可以 不可以 数据长度 有限制&#xff08;URL 的最大长度是 2048 个字符&#xff09; 无限制 编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multi…

【java batik_使用BATIK解析SVG生成PNG图片】

矢量图的介绍及应用场景 矢量图是什么意思&#xff1f; 矢量图&#xff0c;也称为向量图&#xff0c;英文名字是Vector graphics。 矢量图是一种基于矢量的图形&#xff0c;由一系列的线段和曲线组成。由数学公式和算法生成的。这意味着矢量图可以在任何分辨率下清晰地显示&…

针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法

论文标题&#xff1a;Combinative Model Compression Approach for Enhancing 1D CNN Efficiency for EIT-based Hand Gesture Recognition on IoT Edge Devices 中文标题&#xff1a;针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法 作者信息&a…

0.STM32F1移植到F0的各种经验总结

1.结构体的声明需放在函数的最前面 源代码&#xff1a; /*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructu…

【AIGC】ChatGPT提示词Prompt高效编写技巧:逆向拆解OpenAI官方提示词

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;OpenAI官方提示词的介绍OpenAI官方提示词的结构与组成如何通过分析提示词找到其核心组件 &#x1f4af;OpenAI官方提示词分析案例一&#xff1a;制定教学计划案例二&…