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

SpringBoot学习笔记(项目创建,yaml,多环境开发,整合mybatis SMM)

 一、SpringBoot入门

1.1 SpringBoot概述

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。

Spring程序缺点:配置繁琐,依赖设置繁琐。SpringBoot程序优点:自动装配,起步依赖(简化依赖配置),赋值功能(内置服务器)。

版本管理:以后不需要管版本,只需要告诉是SpringBoot几,就自动将所有最佳组合的版本配合在一起做好。

依赖管理:所有的依赖SpringBoot都已经自动装配好。

起步依赖

starter:SpringBoot中创建项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的。

parent:所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的。

 Springboot简化了SpringMVC的开发: 

 核心功能是靠下面的继承来实现

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.3</version><relativePath/> <!-- lookup parent from repository -->
</parent>

1.2 项目创建与启动

第1步:新建Maven项目(或项目),选择Spring初始化,并配置模块相关信息

注意选择Spring Initializr;Package name后面的后缀要删掉,和Group保持一致;

第2步:选择当前模块需要使用的技术集,勾选Spring Web

第3步:开发控制器类,在java下面创建controller然后新建类BookController,在里面编写代码如下

@RestController
@RequestMapping("/books")
public class BookController {@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println("id ==> "+id);return "hello , spring boot !";}
}

第4步:然后右键下面的文件运行,启动:

1.3 项目.jar包运行

Maven中点击Package会将项目打成一个.jar包:

 

右键.jar包点击Open in 点击Explorer:

在搜索栏中输入cmd,然后输入java -jar,输入一个s然后点击Tab键就可以自动补全,然后点击运行即可:

依赖的是下面的插件:

1.4 配置文件书写格式

想改变端口号:

1. 在application.properties里写入:

server.port=80

 2. 在resources下创建application.yml【主要书写方式】里写入下面代码,注意port:后面有一个空格:

server:port: 80

3. 在application.yaml里写入如下代码:

server:port: 80

自动提示功能消失解决方案:

生效顺序:properties > yml > yaml 

二、yaml

2.1 yaml格式

YAML(YAML Ain't Marku Language)是一种数据序列化格式。

优点:容易阅读。容易与脚本语言交互。以数据为核心,重数据轻格式。

YAML文件拓展名:.yml(主流)、.yaml

yaml语法规则:

层级关系用冒号结束;以缩进表示层级关系(类似python);在属性后面要添空格;大小写敏感

2.2 yaml数据读取

方法1:使用@Value读取单个数据

方法2:全部封装到nvironment对象

 方法3:自定义对象封装指定数据

三、多环境开发

3.1 配置问题

在.yml和.yaml中按照如下方式书写,可以切换不同的环境,输入profile选第1个就行,输入port选第1个填入端口后即可:

在properties文件中的书写按照如下方式:

 

3.2 命令行启动参数设置

打包之前先执行clean

在后面加上:--spring.profiles.active=环境名 ,可以使用不同的环境启动。

如果想更改启动.jar包的端口也是可以的,只需要在后面加上 : --server.port=端口号。

还可以进行累加,例如下面采用88端口以test的环境启动:

3.3 兼容问题

以maven为主,boot为辅,以maven控制版本,然后让boot加载maven的版本。

假如maven是pro生效,SpringBoot是dev生效,那么最终是用dev:

首先要在Maven中设置多环境,boot中要读取引用Maven中设置的多环境:

 

在打包之前需要导入下面的插件,需要将占位符解析,将<useDefaultDelimiters>里面的值改为true。

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.2.0</version><configuration><encoding>UTF-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration>
</plugin>

3.4 配置文件分类

IDEA的resources下的config里的配置文件优先级是第3级:

 

在jar包目录下写一个配置文件,可以覆盖IDEA里的配置文件,优先级是第2级:

还可以在jar包目录下写一个config配置文件,是第1级:

四、SpringBoot整合MyBatis实现增删改查

 4.1 Spring整合mybatis

第1步:新建项目。新建全新项目,注意更改依赖:

第2步:连接数据库。更改.properties的配置文件文件后缀为.yml,书写jdbc配置:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_dbusername: rootpassword: 111111

第3步:设置实体类。创建domain-Book,在里面写入实体类:

第4步:创建接口。创建dao-BookDao数据层接口,写SQL语句

@Mapper
public interface BookDao {@Select("select * from tb_brand where id = #{id}")public Book getById(Integer id) ;
}

— — — — — — 知识加油站 — — — — — —

@Mapper注解用于标记一个接口作为MyBatis的Mapper接口。它告诉MyBatis框架将该接口识别为一个Mapper,并自动生成实现该接口的代理对象。当使用@Mapper注解标记接口后,MyBatis将会自动为该接口生成实现类,它会根据接口方法上的注解来动态构建相应的SQL语句,并执行数据库操作。

@ContextConfiguration注解用于指定Spring应用程序上下文的配置信息,以加载和初始化Spring容器。classes属性可以指定一个或多个配置类,用于加载Spring容器中的bean。

— — — — — — — — — — — — — — — — 

5. 测试。在测试类中编写测试方法:

@ContextConfiguration(classes = SsmMybatisApplication.class)
@SpringBootTest
class SsmMybatisApplicationTests {@Autowiredprivate BookDao bookDao;@Testvoid contextLoads() {Book byId = bookDao.getById(1);System.out.println(byId);}
}

6. 可以指定数据源,导入依赖,然后再.yml文件中指定type

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version>
</dependency>

 

4.2 增

在dao — BookDao接口中添加如下方法:

@Insert("insert into tb_brand(brand_name,company_name,ordered,description,status)"+"values(#{brand_name},#{company_name},#{ordered},#{description},#{status})")
public void add(Brand book);

4.3 删

注意:等号右边的#{ID}只是一个占位符,会根据传入的ID值,被替换为具体的值,因此不一定要与实体类中的id取一样的变量名。等号左边的id是数据库中的字段id,因此名称一定要匹配。

@Delete("delete from tb_brand where id = #{ID}")
public void delete(int ID);

4.4 改

SQL语句书写复杂,不适合用注解,因此要用XML配置文件,配置方法如下:

第1步:在 java — com — itheima — dao的BookDao接口里写入如下方法:

public void update(Brand brand);

第2步:在resources下创建mybatis-config.xml文件。在resources下创建mapper包,创建BookMapper.xml。


第3步:主配置文件(mybatis-config.xml)模板如下(setting中是开启驼峰命名):

<?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><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
</configuration>

第4步:接口映射文件(Mapper.xml 文件包含了SQL语句)模板如下:

注意要修改如下几个地方:1. namespace要更改为接口的全路径。2. <update id="update">这里第一个update要根据增删改查的不同更换为不同操作词汇 3. <update id="update">这里第二个update要替换为接口中的方法名

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.dao.BookDao"><!--查询--><update id="update" >update tb_brand<set><if test="brand_name != null and brand_name !='' ">brand_name = #{brand_name},</if><if test="company_name != null and company_name !='' ">company_name = #{company_name},</if><if test="ordered != null ">ordered = #{ordered},</if><if test="description != null and description !='' ">description = #{description},</if><if test="status != null  ">status = #{status},</if></set>where  id = #{id};</update>
</mapper>

注意2个点:第一个update tb_brand后面是用<set>标签来修改值,第二个test里面写的是实体类的变量名,第三个在</set>后还要写where语句用于确定要修改的数据。

第5步:加载配置文件。在.yml文件中指定指定mybatis全局配置文件和接口映射文件位置(注意这里的相对路径从.yml文件所在的resources下开始):

mybatis:config-location: classpath:mybatis-config.xmlmapper-locations: classpath:mapper/*.xml

config-location 用于指定MyBatis的全局配置文件的路径。mapper-locations 用于指定Mapper XML文件的路径。

第6步:编写测试方法:

@ContextConfiguration(classes = SsmMybatisApplication.class)
@SpringBootTest
class SsmMybatisApplicationTests {@Autowiredprivate BookDao bookDao;@Testvoid contextLoads() {String companyName = "彭德科技有限公司";int id = 1;Brand brand = new Brand();brand.setCompany_name(companyName);brand.setId(id);bookDao.update(brand);}
}

4.5 查

@Select("select * from tb_brand where id=#{id}")
public Brand select(int id);

五、实现网页端与数据库连接

事先说明6点注意事项:

1、右上角的小图标,只能用于测试修改静态页面的样式,实际和数据库的关联不能通过这种方式进行。

2、如果想测试动态页面的效果,与数据库关联,必须通过启动类启动(启动类是带有main方法的),要注意选择Current File进行启动,否则可能启动方式可能受前面测试影响。

3、注意启动类必须同controller、dao等一系列的包在同一个目录下,启动类的上面不能有其它包,如果不在同一目录下可能导致扫描不到controller中的资源路径:

也可以通过注解将controller包扫描的方式解决:

@SpringBootApplication(scanBasePackages = "com.itheima.controller")

4、如果想访问前端界面,只需要将webapp视为根目录,相当于localhost这一级,然后想要访问具体的静态资源,只需要输入webapp后面的路径即可:

比如ADSS.html在wewbapp目录下,于是只需要在localhost:8081后面输入/ADSS.html即可访问该静态资源:

 

5、动态资源比如跳转路径访问路径,一般存放在controller目录下,注意controller包需要与启动类在同一个层次目录下:

访问数据只需要输入@RequestMapping里的地址即可直接访问:

6、实际网站部署还要注意跨域问题,一般在启动类上添加CrossOrigin注解:@CrossOrigin(origins = "http://localhost:请求端口号")

5.1 实时显示数据库数据

实现思路:ajax发送请求到controller层,controller层负责查询数据库并返回结果给ajax,ajax将结果赋值给显示变量,Vue根据变量中的值对结果进行显示,最终我们能看到网页上的数据。

重点技术原理:

1. 数据显示问题:

在vue的表格中有一个 :data="xxx"的字样,其中xxx就是数据源,这个数据源会在data()的return中被定义(例如在这里数据源都是tableData,在tableData中不需要定义具体的字段,因为这些字段在tostring函数中都会带有):

   

数据源一般是JSON格式,JSON数据有一个特点,最外层用 [ ] 符号进行包裹,在内层每一个数据都用 { } 符号进行包裹,vue表格会自动提取数据库字段的key,然后去匹配每个单元格的prop="xxx",如果key和xxx匹配上,就将这个key对应的value显示到prop所在单元格的位置。

2.请求发送:

mounted简单理解就是:在挂载完成,即Vue初始化成功,HTML页面渲染成功之后执行的钩子函数。

mounted详细解释如下:mounted是Vue实例生命周期钩子函数之一。mounted函数会在Vue实例被创建并且挂载到DOM元素(DOM元素指的是文档对象模型)上之后立即调用。函数的作用是在Vue实例挂载(指的是将Vue实例与一个实际的DOM元素关联起来,使其能够在该DOM元素内部进行渲染)完成后执行一些初始化操作或请求数据。

下面代码的含义是:在Vue初始化完成,HTML页面渲染成功后,发送get请求到/api/data路径请求动态资源,返回一个response,然后取出data域中的数据赋值给tableData。

3.请求应答:

请求会根据@RequestMapping中的路径找到controller包下具体的类或方法,可以根据请求方式不同调用不同的方法(在该例中使用get请求方式对应@GetMapping方法,调用getData方法,getData通过调用dao层下的bookDao中的select方法与数据库进行连接,查询后返回List结果集),结果被返回到请求的发送方。

实现步骤:

第1步:编写动态请求响应类:在启动类同父目录下创建controller包,在包下创建DataController类,添加@RestController、@RequestMapping("")等注解。在类中实例化dao层的BookDa要加上@Autowired注解;然后编写方法注意返回的结果和调用dao层中的方法,记得加上@GetMapping等注解:

@RestController
@RequestMapping("/api/data")
public class DataController {@Autowiredprivate BookDao bookDao;@GetMappingpublic List<Brand> getData(){System.out.println(bookDao.select());return bookDao.select();}
}

— — — — — — 知识加油站 — — — — — —

@RestController注解:是将一个类标记为处理HTTP请求的控制器,并且自动将方法返回的对象转换为JSON或XML格式的响应体,发送给客户端。

— — — — — — —  — — — — — — — — —

第2步:编写ajax请求,在new Vue下写入如下代码:

mounted(){axios.get("/api/data").then(response=>{this.tableData = response.data;})
},

第3步:修改启动类,写入如下代码:

@CrossOrigin(origins = "http://localhost:8081")
@SpringBootApplication(scanBasePackages = "com.itheima.controller")
@MapperScan("com.itheima.dao")
public class AdsSdemoApplication {public static void main(String[] args) {SpringApplication.run(AdsSdemoApplication.class, args);}
}

5.2 删除(单条,多条)

第1步:dao层下的BookDao接口中定义delete方法,实现从数据库中删除单条数据:

@Delete("delete from tb_brand where id = #{id}")
public void delete(int id);

第2步:在controller层下定义请求路径,传入参数,执行dao层删除方法:

@DeleteMapping("delete/{id}")
public void deleteData(@PathVariable("id") int id){bookDao.delete(id);
}

— — — — — — 知识加油站 — — — — — —

1. @PathVariable注解:是Spring MVC框架中的一个注解,用于从URL路径中获取变量的值并将其绑定到方法的参数上。比如:请求地址:@GetMapping("/users/{ID}") 方法:public User getUserById(@PathVariable Long id) 。那么注解会将{ID}最终被替换的值赋值给参数id。

2. slot - scope="scope":slot-scope是一个特殊的属性,用于在父组件中向子组件传递数据。slot-scope="scope"定义了一个名为scope的变量,用于接收父组件传递的数据。

3. row是表示一个数据表格中的某一行的数据对象。scope可以理解为整张数据表格中的全体数据对象。

4.<template>标签:是Vue.js中用于定义组件模板的容器

— — — — — — —  — — — — — — — — —

‘第3步:添加触发事件,调用methods中的方法。在这里触发事件是点击删除按钮,传入的参数是所点删除按钮所属的数据对象。这里的方法名是deleteSingle。

<template slot-scope="scope"><el-button type="danger" plain size="mini" @click="deleteSingle(scope.row)">删除</el-button><el-button type="warning" plain @click="updateVisible = true" size="mini">修改</el-button>
</template>

— — — — — — 知识加油站 — — — — — —

.then( )被用于处理成功的HTTP响应(服务器成功处理了客户端发出的HTTP请求,并返回了预期的响应)。

response是.then()方法中的一个参数,表示从服务器返回的响应数据

— — — — — — —  — — — — — — — — —

第4步:向后端服务器发送请求,删除数据,同时刷新页面。

methods: {/*删除单条*/deleteSingle(row){axios.delete('/api/delete/'+row.id).then(()=>{axios.get("/api/select").then(response => {  /*刷新页面*/this.tableData = response.data;})})},
}

5.3 修改

5.4 新增

5.5 查询

六、SpringBoot整合

6.1 整合junit

首先要搞清楚什么是要写的,什么是不要写的。大家写得一样的是不用写的。

首先在java下面创建BookService接口:

public interface BookService {public void save();
}

然后在service下面创建impl包,然后再impl包下面创建BookServiceImpl类,写入如下代码:

@Service
public class BookServiceImpl implements BookService {@Overridepublic void save() {System.out.println("book service is running ...");}
}

在测试类里写入如下代码:

 

只需要加入@Autowired注解,把要测试的资源注入进去,然后直接使用即可:

@SpringBootTest
class Demo4ApplicationTests {@Autowiredprivate BookService bookService;@Testvoid contextLoads() {bookService.save();}
}

在java类下面的这个类相当于配置类:

 ’

会自动加载同层目录下的文件,如果不在同层目录,就需要自己指定:

6.2 基于SpringBoot整合实现SSM

1. 新建一个项目,同上:

2. 导入druid坐标,编写配置类.yml格式,同上:

3. config包可以删掉,dao包中的BookDao要加一个@Mapper注解,其余不变:

 

4. 编写测试类;复制静态页面放在static页面下:

5. 启动java下的启动类:

即可正常展示:

七、心得总结

7.1 学习复盘

待写...

7.2 面试真题

1. springboot优点,技术选型原因,为什么不用其他框架?为什么要使用SpringBoot做开发?与传统的开发有什么不一样的?

2. spring boot中的控制反转?

3. SpringBoot的启动类上要加什么注解?这个注解的原理?SpringBoot的启动原理?

4. Spring Boot的自动装配流程?SpringBoot自动配置原理?

5. SpringbootApplication是如何实现依赖注入的?

6. springboot框架url映射过程?

7. 聊聊Springboot与SpringCloud的区别?

8. 在Spring boot的一个请求中,如何实现并发?

9. Springboot如何开发一个http接口?

10. return model过程?

7.3 常见问题

1. 如果端口号没能更改成功,要检查启动的是否是正确的项目:

2. 如果因为中文导致无法打包或者乱码的按下面方式处理:

3. 无法注入依赖 / 无法访问配置的Bean

在Test类上加上:@ContextConfiguration(classes = 配置类.class)

相关文章:

SpringBoot学习笔记(项目创建,yaml,多环境开发,整合mybatis SMM)

一、SpringBoot入门 1.1 SpringBoot概述 SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。 Spring程序缺点&#xff1a;配置繁琐&#xff0c;依赖设置繁琐。SpringBoot程序优点&#xff1a;自动装配&#xff0c…...

Linux内核分析:输入输出,字符与块设备 31-35

CPU 并不直接和设备打交道,它们中间有一个叫作设备控制器(Device Control Unit)的组件,例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。这些控制器就像代理商一样,它们知道如何应对硬盘、鼠标、键盘、显示器的行为。 输入输出设备我们大致可以分为两类…...

Linux抓包工具tcpdump

一、介绍 tcpdump是一个抓包工具&#xff0c;用于实时捕获和分析网络流量。它通常在unix和linux操作系统上使用。tcpdump能够捕获流经网络接口的数据包&#xff0c;并显示或保存它们以供进一步分析。它提供有关每个数据包的详细信息&#xff0c;包括源IP地址、目标IP地址、使用…...

Qt消息机制和事件

事件 事件是由Qt或者系统在不同时刻发出的,当敲下鼠标,或者按下键盘,或者当窗口需要重新绘制的时候,就会发出一个相应的事件,一些操作由用户的操作发出,一些则由系统自动发出,如系统定时器事件等。 Qt 中所有事件类都继承于 QEvent。 在事件对象创建完毕后, Qt 将这个…...

LeetCode-739-每日温度-单调栈

题目描述&#xff1a;给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 题目…...

MyBatis中当实体类中的属性名和表中的字段名不一样,怎么办

方法1&#xff1a; 在mybatis核心配置文件中指定&#xff0c;springboot加载mybatis核心配置文件 springboot项目的一个特点就是0配置&#xff0c;本来就省掉了mybatis的核心配置文件&#xff0c;现在又加回去算什么事&#xff0c;总之这种方式可行但没人这样用 具体操作&…...

Flutter框架和原理剖析

Flutter是Google推出并开源的跨平台开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过Dart语言开发Flutter应用&#xff0c;一套代码同时运行在ios和Android平台。不仅如此&#xff0c;flutter还支持web、桌面、嵌入应用的开发。flutter提供了丰富的组件、接口&…...

NFS:使用 Ansible 自动化配置 NFS 客户端服务端

考试顺便整理博文内容整理涉及使用 Ansible 部署 NFS 客户端和服务端理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃…...

IntelliJ IDEA使用——Debug操作

文章目录 版本说明图标和快捷键查看变量计算表达式条件断点多线程调试 版本说明 当前的IntelliJ IDEA 的版本是2021.2.2&#xff08;下载IntelliJ IDEA&#xff09; ps&#xff1a;不同版本一些图标和设置位置可能会存在差异&#xff0c;但应该大部分都差不多。 图标和快捷键…...

uniapp项目实践总结(十八)自定义多列瀑布流组件

导语&#xff1a;有时候展示图片等内容&#xff0c;会遇到图片高度不一致的情况&#xff0c;这时候就不能使用等高双列或多列展示了&#xff0c;这时候会用到瀑布流的页面布局&#xff0c;下面就一起探讨一下瀑布流的实现方法。 目录 准备工作原理分析实战演练案例展示 准备工…...

Ubuntu 22.04LTS + 深度学习环境安装全流程

一、 CUDA Toolkit 安装 1. 选择需要安装的版本(下载地址) 2. 选择自己的系统版本获取下载地址和安装指令 3. 运行安装指令进行安装 wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo sh cuda_12.2.…...

【lesson7】git的介绍及使用

文章目录 什么是gitgit的历史git使用在gitee上创建仓库git clone HTTPS地址git add .git add 文件名git commit “日志”git pushgit loggit rm 文件名git statusgit pull 什么是git git是版本控制器&#xff0c;那么什么是版本控制器呢&#xff1f; 下面讲个故事为大家讲解一…...

Keepalived+LVS高可用集群

目录 一、keepalived介绍&#xff1a; 二、keepalived工具介绍&#xff1a; &#xff08;1&#xff09;管理 LVS 负载均衡软件&#xff1a; &#xff08;2&#xff09;支持故障自动切换&#xff1a; &#xff08;3&#xff09;实现 LVS 负载调度器、节点服务器的高可用性&…...

AK 9.12 百度Java后端研发B卷 笔试

T1(博弈论) #include <bits/stdc.h>#define endl \nusing namespace std;typedef long long LL;const int N 1e5 10;int n, m, t;void solve() {cin >> n >> m; t n m - 2;if(t & 1) cout << "Yes" << endl;else cout <&l…...

使用Python和XPath解析动态JSON数据

JSON动态数据在Python中扮演着重要的角色&#xff0c;为开发者提供了处理实时和灵活数据的能力。Python作为一种强大的编程语言&#xff0c;提供了丰富的工具和库来处理动态JSON数据使得解析和处理动态JSON数据变得简单和高效。例如&#xff0c;使用内置的json模块&#xff0c;…...

记录一个iOS实现视频分片缓存拖拽快进不能播放的问题

代码现状 首先来看一下我们将视频数据塞给请求的代码 - (void)finishLoadingWithLoadingRequest:(IdiotResourceTask *)task {// printf("哈哈执行到这里执行到到这里\n");printf("哈哈哈数量数量%ld\n", self.taskList.count);//填充信息task.loadingRe…...

如何解决 503 Service Temporarily Unavailable?

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…...

keil报错:Flash Download failed - Could not load file‘..\..\Output\Template.axf

keil报错&#xff1a;Flash Download failed - Could not load file’…\Output\Template.axf&#xff0c;如下图所示&#xff1a; 原因是很多.h文件没有定义位置&#xff0c;可以按照下图操作&#xff1a; 而且&#xff0c;如果是想使用压缩包&#xff0c;那一定要关闭keil后…...

从一到无穷大 #16 ByteSeries,思考内存时序数据库的必要性

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 引言 在[3]中我基于Gorilla讨论了时序数据库设置cache的可行性&#xff0c;最后得出结论&…...

分支和远程仓库

分支 查看分支 git branch -v 创建分支 git branch 分支名 切换分支 git checkout 分支名 合并分支 git merge 分支名 把指定的分支合并到当前分支上 查看当前所有远程地址别名&#xff1a; git remote -v 起别名&#xff1a; git remote add 别名 远程地址推送本地分支上的…...

编译原理 —— 编译器

文章目录 编译原理阶段词法分析器语法分析器语义分析器中间代码生成器代码优化器代码生成器 编译原理阶段 编译器分为9个阶段来将我们所编写的高级代码编译为计算机可执行的机器码 源程序词法分析器语法分析器语义分析器中间代码生成器独立于机器的代码优化器代码生成器依赖于…...

Python灰帽编程——错误异常处理与面向对象

文章目录 错误异常处理与面向对象1. 错误和异常1.1 基本概念1.1.1 Python 异常 1.2 检测&#xff08;捕获&#xff09;异常1.2.1 try except 语句1.2.2 捕获多种异常1.2.3 捕获所有异常 1.3 处理异常1.4 特殊场景1.4.1 with 语句 1.5 脚本完善 2. 内网主机存活检测程序2.1 scap…...

【每日一题】154. 寻找旋转排序数组中的最小值 II

154. 寻找旋转排序数组中的最小值 II - 力扣&#xff08;LeetCode&#xff09; 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到&#xff1…...

Linux中如何获取输入设备(如触摸屏、按键等)的事件信息

Linux中如何获取输入设备&#xff08;如触摸屏、按键等&#xff09;的事件信息 在Linux中&#xff0c;可以使用getevent命令来获取输入设备&#xff08;如触摸屏、按键等&#xff09;的事件信息。如果你想在C程序中获取输入设备事件&#xff0c;可以使用以下步骤&#xff1a; …...

Java学习day05:排序,选择、冒泡、快速、二分、杨辉三角

声明&#xff1a;该专栏本人重新过一遍java知识点时候的笔记汇总&#xff0c;主要是每天的知识点题解&#xff0c;算是让自己巩固复习&#xff0c;也希望能给初学的朋友们一点帮助&#xff0c;大佬们不喜勿喷(抱拳了老铁&#xff01;) Java学习day05&#xff1a;排序&#xff0…...

Mybatis的mapper.xml批量插入、修改sql

今天要有个功能&#xff0c;要进行一批数据的插入和修改&#xff0c;为了不频繁调用数据库&#xff0c;所以想到了批量插入和修改&#xff0c;因为从毕业后&#xff0c;就没写过批量插入和批量修改&#xff0c;所以在这里记录一下&#xff0c;避免后续再遇到忘记怎么写了 批量…...

Centos7部署单机版MongoDB

目录 Centos7部署单机版MongoDBMongoDB介绍数据模型索引分布式高可用性查询语言驱动和社区用途缺点 下载并解压安装包创建相关文件夹和文件编辑mongod.conf文件启动mongodb创建管理员用户终止MongoDB服务配置自启动服务关闭SELinux编辑自启动服务文件mongodb服务命令 Centos7部…...

Docker实战-第一章欢迎来到Docker世界

Docker基础 什么是Docker docker是包括一个命令行程序、后台守护进程和一组远程服务&#xff0c;它简化了安装、运行、发布和删除软件的工作。docker实现的基础是UNIX的容器技术。所以在docker出世之前已经有容器的概念&#xff0c;而且像谷歌一类公司也在探索自己的容器&…...

初识C语言——详细入门一(系统性学习day4)

目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍&#xff1a; 特点&#xff1a; 基本构成&#xff1a; 二、认识C语言程序 标准格式&#xff1a; 简单C程序&#xff1a; 三、基本构成分类详细介绍 &#xff08;1&#xff09;关键字 &#xff08;2&#xf…...

python 学习笔记(6)—— Flask 、MySql

目录 Flask 1、起步 2、渲染项目的首页 3、处理无参数的 GET 请求 4、处理有 query 参数的 GET 请求 6、处理 params 参数的 get 请求 6、处理 application/json 类型请求体的 POST 请求 7、根据参数渲染模板页面 8、上传文件 数据库操作&#xff08;mysql&#xff0…...

江桥网站建设/网站排名前十

虽然去年就自学过Java&#xff0c;也写过Android。但是最近又爆出很多问题&#xff0c;很多细节问题&#xff0c;很多基础问题。这让我再次意识到基础的重要性。问题一&#xff1a;子类何时调用父类的构造方法如果你之前问我&#xff0c;我肯定会说&#xff0c;super的时候。。…...

做网站不赚钱了/app制作一个需要多少钱

题目&#xff1a;子线程循环10次&#xff0c;接着主线程循环100次&#xff0c;接着又回到子线程循环10次&#xff0c;接着再回到主线程100次&#xff0c;如此循环50次&#xff0c;请写出程序。 1 public class TraditionalThreadSynchronized2 {2 public static void main(…...

做网站推广的方法有哪些/java培训班

案例介绍&#xff1a; 我们在日常生活中&#xff0c;经常与朋友们玩猜数字的游戏&#xff0c;非常的有趣。现在我们通过java把这个猜数字游戏编写出来。 猜数字案例是要完成什么样的功能呢&#xff1f;顾名思义&#xff0c;这个游戏就是你出个数字、我来猜。 游戏操作如下&…...

怎么查看网站的友情链接/现在什么app引流效果好

原因&#xff1a; 数据库table和插入语句的字符编码不匹配或者数据库table的编码不支持中文 解决方案&#xff1a; 修改table中的字符编码为&#xff1a;utf-8(或gbk,gb2312) 在代码中链接数据库时&#xff0c;连接字符串后面加上?characterEncodingutf8&#xff0c;例如jdbc:…...

网站建设英文术语/全网营销系统1700元真实吗

微博账户被盗赞或被动加关注的问题&#xff0c;可能很多用户都遇到过&#xff0c;每天都会发现自己的账户莫名其妙关注或点赞了几十个营销号、广告号、明星号的微博&#xff0c;挨个取消被盗的关注和赞&#xff0c;竟然成了日常最主要的微博操作&#xff0c;很多用户对此感到不…...

推广是什么/seo关键词查询工具

Jmeter测试结果分析这一篇&#xff0c;我打算分成上下两部分。上篇&#xff0c;主要讲述如何使用jmeter中Assertion对结果进行简单的分类&#xff1b;下篇&#xff0c;主要讲述的是当我们拿到测试结果后&#xff0c;我们应该如何去看待这些测试结果。 用过LoadRunner的人都知道…...