整合Mybatis(Spring学习笔记十二)

一、导入相关的包

        junit 包        Mybatis包        mysql数据库包        Spring相关的包        Aop相关的包        

        Mybatis-Spring包(现在就来学这个)       

提示jdk版本不一致的朋友记得 jdk8只支持spring到5.x 所以如果导入的spring(spring-webmvc spring-jdbc)大于5.x 就需要降级或者安装jdk17否则就会报错;jdk8跟着我导入的包的版本来是没问题的

配置文件如下:

<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.example</groupId><artifactId>SpringFather</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>SpringSon10</artifactId><packaging>war</packaging><name>SpringSon10 Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!--导入junit支持--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version></dependency><!--导入AOP支持--><!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></dependency><!--导入mysql支持        --><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--导入Mybatis支持        --><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><!--导入Spring支持        --><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><!--Spring操作数据库的话还需要导入一个spring-jdbc 支持    --><!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency><!--Mybatis和Spring整合的包--><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.2</version></dependency><!--导入lombok包好写实体类的时候偷懒--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><!--导入log4j相关依赖--><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies><build><finalName>SpringSon10</finalName><!--解决配置文件无法导出或生效的问题(一般加在父工程)--><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
</project>

二、回忆一下Mybatis怎么实现的

创建实体类

package com.li.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {private int id;private String name;private String pwd;
}

 创建增删改查接口

package com.li.dao;import com.li.pojo.User;import java.util.List;public interface UserMapper {List<User> selectAll();
}

 创建工具类获取sqlSessionFactory

package com.li.utils;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 java.io.IOException;
import java.io.InputStream;public class MybatisUtils {//官网上有三段代码拿来用 工具类的作用就是得到SqlSessionprivate static final SqlSessionFactory sqlSessionFactory;static{try {//获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}//获取SqlSessionpublic static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}

 创建接口Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--上面是头文件不管-->
<!--namespace等于绑定一个对应的Mapper接口 我这里是UserMapper接口-->
<mapper namespace="com.li.dao.UserMapper">
<!--    这里没有写sql语句--><select id="selectAll" resultType="user">select *from mybatis1.user</select>
</mapper>

原来的mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--通过properties标签引入外部配置文件--><properties resource="db.properties"/><!--给实体类取别名--><typeAliases><package name="com.li.pojo"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${urlName}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!--    绑定mapper--><mappers><mapper resource="com/li/dao/UserMapper.xml"/><!--&lt;!&ndash;        &lt;!&ndash;也可以通过class绑定mapper&ndash;&gt;--><!--        <mapper class="com.li.mapper.UserMapper"/>--><!--&lt;!&ndash;        &ndash;&gt;&ndash;&gt;--></mappers></configuration>

和mybatis-config.xml相对应的配置文件

driver=com.mysql.jdbc.Driver
urlName=jdbc:mysql://localhost:3306/mybatis1?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=root

 测试类测试能不能跑通

package com.li.dao;import com.li.pojo.User;
import com.li.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;public class Testgo {@Testpublic void test1(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);for (User user : mapper.selectAll()) {System.out.println(user);}sqlSession.close();}
}

 目录结构

三、Mybatis-Spring

1、什么是Mybatis-spring

2、编写Mybatis-spring的xml配置文件

直接用spring的配置文件格式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"></beans>

  配置数据库连接的数据,相当于Mybatis的连接数据库那一段

    <!--DataSource:使用Spring的数据源替换Mybatis的配置    还可以用c3p0  dbcp  druid--><!--配置数据源,数据源有很多种随便哪一种都可以--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis1?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="root"/></bean>

 相当于这一段

  <environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${urlName}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>

  得到sqlSessionFactory

  <!--得到sqlSessionFactory    --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--这里 ref后面值就是我们上面配置的数据库数据源的连接id值       --><property name="dataSource" ref="dataSource"/><!--这里可以实现Mybatis配置文件里的所有东西,基本上就可以不要mybatis配置文件了,但是有的时候mybatis配置文件还是有一定的作用一般会把取别名和设置放在mybatis的配置文件中去做--><!--绑定Mybatis的配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--也可以注册mapper映射器--><property name="mapperLocations" value="classpath:com/li/dao/UserMapper.xml"/></bean>

        配置文件之前相当于下面这一段

package com.li.utils;
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 java.io.IOException;
import java.io.InputStream;public class MybatisUtils {//官网上有三段代码拿来用 工具类的作用就是得到SqlSessionprivate static final SqlSessionFactory sqlSessionFactory;static{try {//获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}//获取SqlSessionpublic static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}

配置文件下面那两段相当于mybatis核心配置文件中的配置之类的(有一一对应的property 设置)

 方式一:得到sqlSession 在mybatis-spring中叫sqlSessionTemplat     来调用方法

一、通过org.mybatis.spring.SqlSessionTemplate得到sqlSessionT

二、构造器注入sqlSessionFactory

  <!--得到sqlSession,在mybatis-spring中叫sqlSessionTemplat可以简答的理解她两就是一个意思--><!--这里需要给SqlSessionTemplate注入一个参数    --><bean id="sqlSessionT" class="org.mybatis.spring.SqlSessionTemplate"><!--这里只能用构造器注入,因为没有set方法        --><constructor-arg index="0" ref="sqlSessionFactory"/></bean>

 在mybatis中我们在配置文件中就可以写sql语句,但是这里链接Spring了之后配置是面向对象的,需要创建一个实现类来写sql语句

package com.li.dao;import com.li.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;import java.util.List;public class UserMapperImpl implements UserMapper{//之前我们所有的操作都是用sqlSession来执行,现在我们用sqlSessionTemplat来执行的//使用spring需要注入,需要有set方法,spring万物皆注入private SqlSessionTemplate sqlSessionTemplate;public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {this.sqlSessionTemplate = sqlSessionTemplate;}@Overridepublic List<User> selectAll() {//这里的操作就是和拿到SqlSession之后拿mapper的方法是一样的UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);return  mapper.selectAll();}
}

 

 写完类之后就需要在配置文件中注入

 <!--注入写的拿到写sql语句的类--><bean id="userMapper" class="com.li.dao.UserMapperImpl"><!--得到sqlSessionTempla--><property name="sqlSessionTemplate" ref="sqlSessionTempla"/></bean>

 方式二:得到sqlSession 在mybatis-spring中叫sqlSessionTemplat     来调用方法

编写是西安类

package com.li.dao;import com.li.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;import java.util.List;public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {@Overridepublic List<User> selectAll() {//因为实现类集成了SqlSessionDaoSupport,可以直接getSqlSession()得到SqlSessionreturn getSqlSession().getMapper(UserMapper.class).selectAll();}
}

 spring-dao.xml注入实现类

    <!--第二种实现方式:    注入实现类来执行增删改查方法    --><bean id="userMapper2" class="com.li.dao.UserMapperImpl2"><!--方式二相对于方式一不需要下面这段代码<bean id="sqlSessionT" class="org.mybatis.spring.SqlSessionTemplate">这里只能用构造器注入,因为没有set方法<constructor-arg index="0" ref="sqlSessionFactory"/></bean>--><!--但是需要注入一个 sqlSessionFactory  因为实现类的父类需要  --><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>

 

配置完成之后我们来写测试类测试

package com.li.dao;import com.li.pojo.User;
import com.li.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Testgo {@Testpublic void test1(){//        SqlSession sqlSession = MybatisUtils.getSqlSession();
//
//        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//
//        for (User user : mapper.selectAll()) {
//            System.out.println(user);
//        }
//
//        sqlSession.close();ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");//下面的userMapper就是spring-dao.xml最后注入的bean标签的id名称UserMapper mapper = context.getBean("userMapper", UserMapper.class);for (User user : mapper.selectAll()) {System.out.println(user);}}
}

完整的spring-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!--DataSource:使用Spring的数据源替换Mybatis的配置    还可以用c3p0  dbcp  druid--><!--这里相当于配置连接数据库--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis1?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="root"/></bean><!--得到sqlSessionFactory    --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--这里 ref后面值就是我们上面配置的数据库来连接的id值       --><property name="dataSource" ref="dataSource"/><!--这里可以实现Mybatis配置文件里的所有东西,基本上就可以不要mybatis配置文件了,但是有的时候mybatis配置文件还是有一定的作用一般会把取别名和设置放在mybatis的配置文件中去做--><!--绑定Mybatis的配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--也可以注册mapper映射器--><property name="mapperLocations" value="classpath:com/li/dao/UserMapper.xml"/></bean><!--得到sqlSession,在mybatis-spring中叫sqlSessionTemplat可以简答的理解她两就是一个意思--><!--这里需要给SqlSessionTemplate注入一个参数    --><bean id="sqlSessionT" class="org.mybatis.spring.SqlSessionTemplate"><!--这里只能用构造器注入,因为没有set方法        --><constructor-arg index="0" ref="sqlSessionFactory"/></bean><!--注入写的拿到写sql语句的类--><bean id="userMapper" class="com.li.dao.UserMapperImpl"><!--得到sqlSessionTemplate--><property name="sqlSessionTemplate" ref="sqlSessionT"/></bean></beans>

需要注意的是UserMapper的配置文件不能把里面的sql语句部分删除,要不然会报

Invalid bound statement (not found)  的错

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--上面是头文件不管-->
<!--namespace等于绑定一个对应的Mapper接口 我这里是UserMapper接口-->
<mapper namespace="com.li.dao.UserMapper">
<!--    这里没有写sql语句--><select id="selectAll" resultType="user">select *from mybatis1.user</select>
</mapper>

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

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

相关文章

第1章:芯片及引脚介绍

芯片及引脚介绍 1&#xff1a; 芯片介绍1.1&#xff1a;芯片系列1.2 &#xff1a;STM32F103C8T6型号的介绍 2&#xff1a;引脚2.1&#xff1a;寄存器2.2&#xff1a;最小系统板 3&#xff1a;最小系统板的引脚3.1&#xff1a;特殊引脚3.2&#xff1a;普通引脚3.3&#xff1a;最…

BoostCompass —— 搜索引擎

文章目录 一、项目简介二、Boost库简介1. 简介2. Boost 库的特点 三、项目主要模块1. 网页内容获取&#xff0c;数据预处理模块2. 建立正排索引和倒排索引&#xff0c;项目核心模块3. 编写 http_server 模块&#xff0c;进行网络开放 四、项目功能预览1. 项目文件预览2. 项目执…

java自动化测试学习-03-06java基础之运算符

运算符 算术运算符 运算符含义举例加法&#xff0c;运算符两侧的值相加ab等于10-减法&#xff0c;运算符左侧减右侧的值a-b等于6*乘法&#xff0c;运算符左侧的值乘以右侧的值a*b等于16/除法&#xff0c;运算符左侧的值除以右侧的值a/b等于4%取余&#xff0c;运算符左侧的值除…

开启短剧盈利新模式:短剧CPS分销系统开发助力创作者与分销商共赢

在数字内容蓬勃发展的今天&#xff0c;短剧以其独特的魅力迅速占领了市场的一席之地。短剧以其紧凑的剧情、精彩的演绎&#xff0c;吸引了大量用户的关注和喜爱。然而&#xff0c;如何在短剧市场中实现商业价值的最大化&#xff0c;一直是业内关注的焦点。为此&#xff0c;我们…

个人品牌打造IP孵化运营培训教程架构课件

【资料持续更新&#xff0c;以防走丢】 个人品牌打造IP孵化运营培训教程架构课件 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 个人品牌运营合集 &#xff08;完整资料包含以下内容&#xff09;目录 详细的个人IP运营方案&#xff1a; 1. 确定个人定位和…

【Linux】进程控制之进程程序替换

目录 前言 替换的原理 替换函数 记忆技巧 函数使用 execl execlp execv execvp execle execvpe 调用其它语言的程序 模拟实现一个shell 前言 关于本文可以先去看看上一篇【Linux】进程控制详解-CSDN博客可以更好的理解这里的内容 学完本篇文章&#xff0c;你就…

浅聊什么是Redis?

需求&#xff1a;MySQL面临大量的查询&#xff0c;即读写操作&#xff0c;因此类比CPU&#xff0c;给数据加缓存&#xff0c;Redis诞生。应用程序从MySQL查询的数据&#xff0c;在Redis设置缓存&#xff08;记录在内存中&#xff0c;无需IO操作&#xff09;&#xff0c;后再需要…

【吊打面试官系列】Redis篇 - 使用过 Redis 分布式锁么,它是什么回事?

大家好&#xff0c;我是锋哥。今天分享关于 【使用过 Redis 分布式锁么&#xff0c;它是什么回事&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 使用过 Redis 分布式锁么&#xff0c;它是什么回事&#xff1f; 先拿 setnx 来争抢锁&#xff0c;抢到之后&#…

2.Swift基础控件:图标文字按钮

Swift图标标题按钮 一、自定义IconTitleButton类 import Foundation/* 枚举 设置 图片的位置 */ enum ButtonImagePosition : Int {case imageTop 0case imageLeftcase imageBottomcase imageRight } extension UIButton {/**type &#xff1a;image 的位置Space &#xff1…

leetcode代码记录(买卖股票的最佳时机

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股…

蓝桥-时间显示

目录 题目链接 代码 题目链接 1.时间显示 - 蓝桥云课 (lanqiao.cn) 代码 #include <bits/stdc.h> using namespace std;int main() {long long x;cin>>x;int h,m,s;x x / 1000 % (3600*24); // 毫秒化秒&#xff0c;并且保留最后一天的时间h x / 3600; //求得…

第四百四十三回

文章目录 1. 概念介绍2. 思路与方法2.1 整体思路2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义Action菜单"相关的内容&#xff0c;本章回中将介绍如何获取屏幕相关参数.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

Qtxlsx第三方库的安装和使用

本文仅作为一个记录&#xff0c;安装QtXlsx方便操作excel&#xff0c;主要参考了这篇博文&#xff1a;https://blog.csdn.net/u014779536/article/details/111769792 1&#xff0c;下载安装Perl脚本Strawberry Perl for Windows&#xff0c;默认安装strawberry-perl-5.30.0.1-…

程序·人生

诡异之极 2024.03.12 清新环境&#xff08;股票代码002573&#xff09;委托卖出 20000股&#xff0c;委托价4.58&#xff0c;当日最高价4.57 2024.03.11 清新环境&#xff08;股票代码002573&#xff09;委托卖出 20000股&#xff0c;委托价4.55&#xff0c;当日最高价4.54 …

汉明码检错与纠错的结论(hamming code)

假如一组二进制数据为101&#xff0c;另外一组为111&#xff0c;那么显然把第一组的第二位数据0改成1就可以变成第二组数据111&#xff0c;所以两组数据的汉明距离就为1 简单点说&#xff0c;汉明距离就是一组二进制数据变成另一组数据所需的步骤数&#xff08;它表示两个相同长…

策略模式图

策略模式 小小的图解 主要的三个角色 Strategy—抽象策略角色ConcreateStrategy—具体策略角色Context—上下文角色 封装了对具体策略的调用可以使用set的依赖注入也可以使用构造方法 核心是上下文角色 只要调用上下文角色就行&#xff0c;实现解耦 策略 工厂 将上下文角…

深入理解MP4视频文件裁剪原理[下下]

深入理解MP4视频文件裁剪原理[上] 深入理解MP4视频文件裁剪原理[中] 深入理解MP4视频文件裁剪原理[下] 深入理解MP4视频文件裁剪原理[下下] 3.22 stco box* stco box记录了每个chunk在MP4文件中的偏移量。如下图24: 图24 这里的offset指的是chunk的起始位置相对于整个MP4文…

Pytoch安装记录

使用pycharm 1、CUDA的安装 官网&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 选择对应的版本 选择对应的版本进行下载&#xff1a; 有3个多G cuda的安装需要注意&#xff0c;如果没有安装vs&#xff0c;则需要选择自定义安装&#xff0c;在自定义的安装中取消 安…

【系统架构师】-系统可靠性分析与设计

1、可靠性与可用性区别 1、系统可靠性&#xff1a;系统在规定时间内及规定的环境下&#xff0c;完成规定功能的能力&#xff0c;即系统无故障运行的概率 2、系统可用性&#xff1a;在某个给定时间点上系统能够按照需求执行的概率。 可靠性分为软件、硬件可靠性 2、可靠性指标…

观察者模式 C++

&#x1f442; Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 &#x1f33c;前言 &#x1f33c;描述 &#x1f382;问题 &#x1f4aa;解决方案 &#x1f232;现实场景 代码 场景1 -- 报纸发行 场景 解释 代码 场景2 -- 气象资料发布 场景3 -- 过红绿灯 &#x…