SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第一天)Mybatis的学习

news2024/11/23 17:08:20

SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第一天)Mybatis的学习

一、当前的主流框架介绍(这就是后期我会发出来的框架学习)

Spring框架

Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的,其主要优势之一就是分层架构。Spring提供了更完善的开发环境,可以为POJO(Plain Ordinary Java Object,普通Java对象)对象提供企业级的服务。


Spring MVC框架

​ Spring MVC是一个Web开发框架,可以将它理解为Servlet。在MVC模式中,Spring MVC作为控制器(Controller)用于实现模型与视图的数据交互,是结构最清晰的。

Spring MVC框架采用松耦合、可插拔的组件结构,具有高度可配置性,与其他的MVC框架相比,具有更强的扩展性和灵活性。


MyBatis框架

​ MyBatis 是Apache的一个开源项目iBatis,2010年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis ,2013年11月MyBatis又被迁移到Github。

MyBatis是一个优秀的持久层框架,它可以在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM(Object/Relation Mapping,即对象关系映射)实现。MyBatis封装性要低于Hibernate,但它性能优越、简单易学,在互联网应用的开发中被广泛使用。


Spring Boot 框架

​ Spring Boot 框架是 Pivotal 团队基于 Spring 开发的全新框架,其设计初衷是为了简化 Spring 的配置,使用户能够构建独立运行的程序,提高开发效率。

Spring Boot 框架本身并不提供 Spring 框架的核心特性及扩展功能,它只是用于快速、敏捷地开发新一代基于 Spring 框架的应用,同时它还集成了大量的第三方类库(如Jackson、JDBC、Redis 等),使用户只需少量配置就能完成相应功能。


Spring Cloud 框架

Spring Cloud 是一系列框架的有序集合为开发人员构建微服务架构提供了完整的解决方案,它利用Spring Boot 的开发便利性巧妙地简化了分布式系统的开发。例如,配置管理、服务发现、控制总线等操作,都可以使用 Spring Boot 做到一键启动和部署。可以说,Spring Cloud 将 Spring Boot 框架进行了再封装,屏蔽掉了复杂的配置和实现原理,具有简单易懂、易部署和易维护等特点。


那么开始今天的主题MyBatis的学习

二、什么是MyBatis?

MyBatis是一个支持普通SQL查询、存储过程以及高级映射的半自动化持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,使用简单的“XML”或“注解”进行配置和原始“映射”,将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。

PS:(名词解释)

  1. XML(可扩展标记语言): XML 是一种标记语言,用于描述数据的结构和内容。它被广泛用于数据的存储、交换和表示。XML 使用标签来标识数据的不同部分,并使用元素、属性和文本来组织数据。XML 具有可扩展性,允许用户定义自己的标签和数据结构。由于其通用性和可扩展性,XML 在 Web 开发、数据传输、配置文件等领域都有广泛应用
  2. 注解(Annotation): 注解是一种元数据(metadata),可以应用于代码中的类、方法、字段等元素。**它们不会直接影响程序的执行,但可以提供额外的信息给编译器、解释器、工具和其他程序。在 Java 中,注解是以 @ 符号为前缀的特殊标记。**注解可以用于提供编译时的指示、运行时的处理、文档生成等。常见的 Java 注解包括 @Override表明是方法重写、@FunctionalInterface函数式接口、@Nullable表明元素可以为null、@Autowired 用于标记字段、构造器或方法,表示自动装配(自动注入)该组件 等(后面我会发一个常见注解的说明)
  3. 映射(Mapping):在编程中,映射通常指的是将一个数据或对象关联到另一个数据或对象的过程。这可以是不同数据结构之间的对应关系,比如数据库表的列与对象属性的对应关系,或者是 URL 路径与控制器方法的对应关系。在数据库中,对象-关系映射(ORM)指的是将数据库表映射到面向对象的类的过程。在 Web 开发中,URL 路由映射指的是将请求的 URL 映射到相应的处理程序或方法上。

​ MyBatis框架是一个ORM(Object/Relation Mapping,即对象关系映射)框架所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。ORM框架的工作原理可以通过一张图来展示。在这里插入图片描述

(这段加粗文字如果简单理解的话,那就是可以把Java中的数据类型自动转换识别成数据库的数据类型

当使用ORM框架将Java中的基本数据类型映射到数据库时,通常的映射规则如下:
  1. byte --> TINYINT
  2. short --> SMALLINT
  3. int --> INT
  4. long --> BIGINT
  5. float --> FLOAT
  6. double --> DOUBLE
  7. boolean --> BIT(对于MySQL和SQL Server等数据库),BOOLEAN(对于PostgreSQL等数据库)
  8. char --> CHAR(通常用于存储单个字符) String --> VARCHAR(通常用于存储字符串)

不同的数据库系统可能有不同的数据类型名称,因此在特定的数据库中可能会略有差异。此外,ORM框架也允许进行自定义配置,以适应不同的数据库需求。

此外,还有一些其他特殊类型,例如日期和时间类型,也可以在ORM中进行映射,比如:

  • java.util.Date 或 java.time.LocalDate --> DATE
  • java.util.Time 或 java.time.LocalTime --> TIME
  • java.util.Date 或 java.time.LocalDateTime --> DATETIME 或 TIMESTAMP

​ 上面这些就是我们学习Java常见的8种基本数据类型在数据库中的通用映射规则。但具体的映射规则可能会因不同的ORM框架或数据库而有所区别,因此在实际开发中,还是得根据实际情况和需求进行相应的配置和调整。

​ 了解完MyBatis的基本概念之后,我们就该到了如何使用MyBatis?想要使用首先就得引入,简单来说就是搭建MyBatis的开发环境。


三、如何搭建MyBatis的开发环境?

搭建环境的步骤如下:

  1. 创建工程后引入相关依赖。(本地lib导入jar包或者Pom.xml写入依赖信息,Maven方式导入)

  2. 数据库准备(就是指创建好准备链接的数据库) 。 比如:MySQL Oracle PostgreSQL

  3. 编写数据库连接信息配置文件(db.properties 、database.properties、dbconfig.properties

    、jdbc.properties都是指同一个文件,也就是数据库连接信息配置文件)

  4. 编写核心配置文件和映射文件。

​ 一般来说都不会自己去写,只有少部分会需要我们去写。大部分的都是可以去网上下载模板然后自己修改一下基本信息就可以用了。

引入依赖(Maven方式引入需要联网)➡编写配置文件(数据库连接信息配置文件、MyBatis核心配置文件)➡

这里简单讲解一下吧,方便理解。

①引入相关依赖的代码

<!--Pom文件编写依赖引入 只展示了其中一个依赖-- >
<dependencies>
    <!-- MySQL Connector Java 引入java链接MySQL的依赖 -->
    <dependency>
        <groupId>mysql</groupId> <!-- 依赖名 -->
        <artifactId>mysql-connector-java</artifactId> <!-- 组件名 ID -->
        <version>8.0.11</version> <!-- 版本号 -->
    </dependency>
    <!-- 其他依赖项 -->
    ...<!--尝试模仿并写出其他项依赖引入,写不出也可以去我资源找对应的文件下载,都是敲好的-->
</dependencies>

③db.properties文件

//db.properties文件

# MySQL数据库驱动程序类名
mysql.driver=com.mysql.cj.jdbc.Driver

# MySQL数据库连接URL,指定主机、端口、数据库名称和其他参数
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false

# MySQL数据库用户名
mysql.username=root

# MySQL数据库密码
mysql.password=root

④mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 加载 db.properties 文件 -->
    <properties resource="db.properties"/>

    <environments default="development">
        <!-- 设置开发环境 -->
        <environment id="development">
            <!-- 使用 JDBC 事务管理器 -->
            <transactionManager type="JDBC"/>
            
            <!-- 使用 POOLED 数据源 -->
            <dataSource type="POOLED">
                <!-- 指定数据库驱动程序 -->
                <property name="driver" value="${mysql.driver}" />
                <!-- 指定数据库连接 URL -->
                <property name="url" value="${mysql.url}" />
                <!-- 指定数据库用户名 -->
                <property name="username" value="${mysql.username}" />
                <!-- 指定数据库密码 -->
                <property name="password" value="${mysql.password}" />
            </dataSource>
        </environment>
    </environments>
</configuration>

​ 使用POOLED数据源的意思是:它表示使用连接池数据源,“POOLED” 是Maven配置文件中 <dataSource> 配置项的一个属性值

​ 连接池是一组预先创建并管理的数据库连接。当应用程序需要与数据库进行交互时,它可以从连接池中获取一个可用的数据库连接,执行操作完成后再将连接放回连接池,而不是每次都创建和关闭连接。这种方式可以提高性能和效率,避免了频繁创建和销毁数据库连接的开销。

​ 具体到这个配置文件中,<dataSource type="POOLED"> 指定了使用 POOLED 数据源类型。通过这个配置,Maven将会根据数据库连接信息和连接池配置参数,创建一个连接池数据源供应用程序使用。这样,在应用程序需要进行数据库操作时,它可以从这个连接池中获取连接,而不是每次都重新创建新的连接,从而提高性能和效率。

​ 到这里环境就已经搭建好了。


四、编写MyBatis入门程序

​ ①:数据库准备➡②:pojo类编写➡③:mapper文件(sql语句)编写➡④:mybatis-config文件中添加mapper文件resources的地址➡⑤:编写测试类。


​ 首先要准备好一个要链接的数据库,编写好数据设计语句,设计表的同时呢,插入俩条语句进去,这样方便我们后续测试。记得若是链接的数据库有改变,那么我们前面的数据库链接信息配置文件也需要修改,就是db.properties。

​ 首先我们要新建实体类上面也有提到的pojo包(普通JAVA对象),这里的话就要与数据库的表字段一一对应,这样才能映射过去。一般来说一个表对应一个类,也就是一个对象。

​ 如下图:我们采用的PasswordMS表中的结构如下:

在这里插入图片描述

那么我们的pojo包下的成员变量应该是这样子定义的:

在这里插入图片描述

​ 字段名和变量名一一对应。不要忘了生成Getter和Setter方法,因为我们的访问修饰符是private私有的,那么如果不开放公共的方法来设置或获取变量的值,这样的话会导致只有在类的内部能够访问到,所以不能忘记嗷,这也是面向对象的设计原则之一,也是封装的基本特征,合理开放,合理暴露。

​ 编写一下Mapper.xml,里面编写sql语句,动态sql语句,这里我们要针对一下数据库表的关系,然后去对java对象进行一个映射,关系有一对一、一对多等。越复杂的sql编写,需要注意的点就越多。

​ 编写mapper,需要在标签对里面

在这里插入图片描述

编写mapping文件路径配置,在mybatis-config.xml中下。这样mybatis才能够识别我们的mapper文件,才能够使用映射语句,不会导致出错。

在这里插入图片描述

因为我们前面引入了Junit测试依赖,那么就简单编写一下测试类吧,看看我们编写的Mapper接口能不能正常映射到数据库。

//PasswordMSTest.java
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import pojo.PasswordMS;

import java.io.IOException;
import java.io.Reader;
import java.util.List;


class PasswordMSTest {
    private Logger logger= Logger.getLogger(PasswordMSTest.class);
    @org.junit.jupiter.api.Test
    void getUid() {
        //读取文件名:
        String resources="mybatis-config.xml";

        //创建流
        Reader reader = null;
        try{
            reader = Resources.getResourceAsReader(resources);
        }catch (IOException e){
            e.printStackTrace();
        }
        //初始化mybatis数据库,创建SqlSessionFactory类的实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建SqlSession实例

        SqlSession session = sqlSessionFactory.openSession();
        
        //传入参数查询,返回结果
        PasswordMS passwordMS = session.selectOne("findById",1);
        logger.info("姓名:"+passwordMS.getAccount()+",密码:"+passwordMS.getPassword()+",网站:"+passwordMS.getWebsiteName());
        //关闭session
        session.close();
    }

    @org.junit.jupiter.api.Test
    void getAllItem() {
        //读取文件名:
        String resources="mybatis-config.xml";

        //创建流
        Reader reader = null;
        try{
            reader = Resources.getResourceAsReader(resources);
        }catch (IOException e){
            e.printStackTrace();
        }
        //初始化mybatis数据库,创建SqlSessionFactory类的实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建SqlSession实例

        SqlSession session = sqlSessionFactory.openSession();
        //传入参数查询,返回结果
        List<PasswordMS> passwordMS = session.selectList("findAll");
        for(PasswordMS s:passwordMS){
        logger.info("id:"+s.getId()+",账号:"+s.getAccount()+",密码:"+s.getPassword()+",网站名:"+s.getWebsiteName()+",网站网址:"+s.getWebsiteURL()+",网站缩略图:"+s.getWebsiteImage()+",账号描述:"+s.getAccountDescription());
        //关闭session
            // }
        session.close();
    }
}
}

这里的代码逻辑用讲么?如果是有学过java基础和java高级编程的,应该代码逻辑都是能看懂得。

这里可以推荐看看我发的学习记录,基本上有看完,都是可以理解的。

输出结果如下图:

在这里插入图片描述

与数据库中写入的完全一致,若是出现NUll值,可能就是pojo类编写不正确,没有字段名和变量名一直,其次可能是映射类型不对等,认真往上翻看看嗷。

PS:关于findAll的sql映射语句需要自己在PasswordMSMapper.xml中编写完成嗷


Mybatis的工作原理:

*在这里插入图片描述

MyBatis框架在操作数据库时,大体经过了8个步骤。下面结合MyBatis工作原理图对每一步流程进行详细讲解,具体如下。

(1)MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。

(2)加载映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。

(3)构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。

(4)创建会话对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

(5)创建执行器:会话对象本身不能直接操作数据库,MyBatis底层定义了一个Executor接口用于操作数据库,执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存地维护。

(6)封装SQL信息:SqlSession内部通过执行器Executor操作数据库,执行器将待处理的SQL信息封装到MappedStatement对象中。

(7)操作数据库:根据动态生成的SQL操作数据库。

(8)输出结果映射:执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。


总结

​ 这是第一天对SSM框架的学习,先初识Mybatis,了解什么是半自动化持久层框架、映射、pojo、连接池连接数据源等。想要跟着学习的可以去我的资源里面找对应的文件下载,我的md文件也会发上去,项目文件会上传可以自己跟着学习一下。上面的只是简单的俩个查询的例子,可以自己完善一下增删改查的实例。

作者:Stevedash

发表于:2023年8月20日 21点45分

注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。

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

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

相关文章

【2023最新爬虫】用python爬取知乎任意问题下的全部回答

老规矩&#xff0c;先上结果&#xff1a; 爬取了前200多页&#xff0c;每页5条数据&#xff0c;共1000多条回答。&#xff08;程序设置的自动判断结束页&#xff0c;我是手动break的&#xff09; 共爬到13个字段&#xff0c;包含&#xff1a; 问题id,页码,答主昵称,答主性别,…

Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的Bufferlist序列功能的技术背景CameraExplorer如何查看相机Bufferlist功能在BGAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过BGAPI SDK…

文件同步工具rsync

文章目录 作用特性安装命令服务端启动增加安全认证及免密登录 实时推送源服务器配置结合inotify实现实时推送 参数详解 学些过程中遇到的问题 作用 rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步&#xff0c;支持本地复制&#xff0c;或…

05有监督学习——神经网络

线性模型 给定n维输入&#xff1a; x [ x 1 , x 1 , … , x n ] T x {[{x_1},{x_1}, \ldots ,{x_n}]^T} x[x1​,x1​,…,xn​]T 线性模型有一个n维权重和一个标量偏差: w [ w 1 , w 1 , … , w n ] T , b w {[{w_1},{w_1}, \ldots ,{w_n}]^T},b w[w1​,w1​,…,wn​]T,b 输…

Elasticsearch 处理地理信息

1、GeoHash ​ GeoHash是一种地理坐标编码系统&#xff0c;可以将地理位置按照一定的规则转换为字符串&#xff0c;以方便对地理位置信息建立空间索引。首先要明确的是&#xff0c;GeoHash代表的不是一个点而是一个区域。GeoHash具有两个显著的特点&#xff1a;一是通过改变 G…

7-6 统计字符出现次数

分数 20 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写程序&#xff0c;统计并输出某给定字符在给定字符串中出现的次数。 输入格式&#xff1a; 输入第一行给出一个以回车结束的字符串&#xff08;少于80个字符&#xff09;&#xff1b;第二行输入一个…

Android JNI系列详解之JNI、NDK环境搭建和编译工具安装

本文主要介绍JNI、NDK环境变量的搭建&#xff0c;以及CMake工具的安装和ndk-build工具的安装。 一、JNI环境 JNI属于Java中的一部分&#xff0c;所以只需要搭建Java环境就有了JNI的环境&#xff0c;安装Java的环境可以网上查找教程&#xff0c;很多的安装JDK的博客。我电脑是安…

检测输电线上的鸟巢,用SSD结合HSV色彩空间滤波器相结合的检测方法--论文中图还少一张,欠点意思

Detection of Bird Nests on Power Line Patrol Using Single Shot Detector Abstract 电力塔上鸟巢的存在对输电线路的安全稳定构成了威胁。近年来&#xff0c;利用无人机探测输电线路上的鸟巢已成为电力巡检的重要任务之一。图像处理方法从计算机视觉向功率图像识别的迁移日…

MySQL数据库第十四课--------sql优化---------层层递进

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

Git问题:解决“ssh:connect to host github.com port 22: Connection timed out”

操作系统 Windows11 使用Git IDEA 连接方式&#xff1a;SSH 今天上传代码出现如下报错&#xff1a;ssh:connect to host github.com port 22: Connection timed out 再多尝试几次&#xff0c;依然是这样。 解决 最终发现两个解决方案&#xff1a;&#xff08;二选一&#xf…

GEEMAP 中如何拉伸图像

图像拉伸是最基础的图像增强显示处理方法&#xff0c;主要用来改善图像显示的对比度&#xff0c;地物提取流程中往往首先要对图像进行拉伸处理。图像拉伸主要有三种方式&#xff1a;线性拉伸、直方图均衡化拉伸和直方图归一化拉伸。 GEE 中使用 .sldStyle() 的方法来进行图像的…

js 的正则表达式(二)

1.正则表达式分类&#xff1a; 正则表达式分为普通字符和元字符。 普通字符&#xff1a; 仅能够描述它们本身&#xff0c;这些字符称作普通字符&#xff0c;例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。 元字符&#xff1a; 是一些具有特殊含…

最新ChatGPT网站程序源码+AI系统+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

情报与GPT技术大幅降低鱼叉攻击成本

邮件鱼叉攻击&#xff08;spear phishing attack&#xff09;是一种高度定制化的网络诈骗手段&#xff0c;攻击者通常假装是受害人所熟知的公司或组织发送电子邮件&#xff0c;以骗取受害人的个人信息或企业机密。 以往邮件鱼叉攻击需要花费较多的时间去采集情报、深入了解受…

STM32 F103C8T6学习笔记10:OLED显示屏GIF动图取模—简易时钟—动图手表的制作~

今日尝试做一款有动图的OLED实时时钟&#xff0c;本文需要现学一个OLED的GIF动图取模 其余需要的知识点有不会的可以去我 STM32 F103C8T6学习笔记 系列专栏自己查阅把&#xff0c;闲话不多&#xff0c;直接开肝~~~ 文章提供源码&#xff0c;测试工程下载&#xff0c;测试效…

架构设计之考虑高并发场景优化的衡量指标

衡量指标 对于性能优化来说&#xff0c;衡量的指标有很多&#xff0c;大体上可以分为&#xff1a;性能指标、响应时间、并发量、秒开率和正确性等。我们可以使用下图来表示这些衡量指标。 接下来&#xff0c;我们就分别说明下这些衡量指标。 性能指标 性能指标又可以包含&am…

Python数据挖掘——应用toad包中的detect函数进行描述性统计

大数据时代的到来&#xff0c;使得很多工作都需要进行数据挖掘&#xff0c;从而发现更多有利的规律&#xff0c;或规避风险&#xff0c;或发现商业价值。比如在支付领域&#xff0c;通过挖掘商户的交易数据&#xff0c;分析商户是否有欺诈、盗刷、赌博、套现等风险。对于有风险…

【Django】Task4 序列化及其高级使用、ModelViewSet

【Django】Task4 序列化及其高级使用、ModelViewSet Task4主要了解序列化及掌握其高级使用&#xff0c;了解ModelViewSet的作用&#xff0c;ModelViewSet 是 Django REST framework&#xff08;DRF&#xff09;中的一个视图集类&#xff0c;用于快速创建处理模型数据的 API 视…

深度学习基本理论

1、MLP、FCN、DNN三者的关系&#xff1f; 多层感知器MLP&#xff0c;全连接网络&#xff0c;DNN三者的关系&#xff1f;三者是不是同一个概念&#xff1f; FCN&#xff1a;Fully Connected Neural Network&#xff0c;全连接神经网络&#xff0c;也称为密集连接神经网络&#…

活动预告l 第二届硬件敏捷开发与验证方法学研讨会

2023年8月23日至25日&#xff0c; 2023 RISC-V中国峰会将在北京香格里拉饭店举办。本届峰会采用“主会议主题活动展览展示同期活动”的会议组织方式&#xff0c;将邀请RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇。作为本届RISC-V中国峰会的…