SpringBoot(One·上)

news2024/11/25 14:34:45

SpringBoot

  • 一、简介
    • 概述
    • Spring Boot特性
    • SpringBoot四大核心
  • 二、SpringBoot项目分析
    • 1、创建第一个案例
      • 结构目录和pom文件
    • 2、Springboot集成mvc
      • Springboot核心配置文件application.properties
      • Springboot核心配置文件application.yml或者application.yaml
        • application.yml
        • application.yaml
      • 两种配置文件同时存在
      • 设置Maven私服仓库
  • 三、多环境开发核心配置文件
    • 多环境配置文件切换(properties)
    • 多环境配置文件切换(yaml/yml)
    • 获取自定义配置(单个值)
    • 获取自定义配置(映射成对象)
  • 四、SprigBoot集成Mybatis
    • 步骤
    • mybatis逆向工程1
    • 案例——springboot集成Mybatis
      • Mapper映射文件存放位置(不在pom文件中指定资源目录)
      • springboot集成mybatis总结
  • 五、 SpringBoot支持事物
    • 前言
    • 添加事务

一、简介

概述

Spring Boot是spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,也可以说Spring Boot可以简化我们SSM框架进行开发的过程

Spring Boot特性

  • 能够快速创建基于Spring的应用程序
  • 能够直接使用java main方法启动内嵌的Tomcat服务器运行SpringBoot程序,不需要部署war包文件
  • 提供约定的starter POM来简化Maven配置,让Maven的配置更加简单
  • 自动化配置,根据项目的Maven依赖配置,SpringBoot自动配置Spring、SpringMVC等
  • 提供了程序的健康检查功能
  • 基本可以完全不使用XML配置文件,采用注解配置

SpringBoot四大核心

  • 自动配置
  • 起步依赖
  • Actuator(检测程序运行状态)
  • 命令行界面

二、SpringBoot项目分析

1、创建第一个案例

1、我这里使用的是阿里云的镜像
在这里插入图片描述

2、勾选需要的起步依赖
在这里插入图片描述

结构目录和pom文件

大体目录:

在这里插入图片描述

resource下的目录结构
在这里插入图片描述

pom中的部分依赖

        <!--Springboot框架的web项目起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--Springboot框架的测试起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
 <!--Springboot框架的打包起步依赖-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>

Springboot的第一个java文件

//SpringBoot项目启动入口类
@SpringBootApplication//springboot核心注解,主要用于开启spring自动配置
public class Springboot001Application {

    public static void main(String[] args) {
        SpringApplication.run(Springboot001Application.class, args);
    }

}

2、Springboot集成mvc

在这里插入图片描述

编写Controller类
必须放在Springboot启动类所在的同级目录或者下级目录

在这里插入图片描述

@Controller
public class IndexController {
    @RequestMapping(value = "/springboot/say")
    @ResponseBody
    public String say(){
        return "nihao";
    }

}

启动并访问
在这里插入图片描述
输出结果:
在这里插入图片描述

Springboot核心配置文件application.properties

设置端口号和上下文根
在这里插入图片描述

# 应用名称
spring.application.name=springboot_003
# 应用服务 WEB 访问端口/设置内嵌Tomcat端口号
server.port=8080

#设置上下文根
server.servlet.context-path=/springboot

测试:
在这里插入图片描述

Springboot核心配置文件application.yml或者application.yaml

application.yml

在这里插入图片描述

添加配置,注意格式

在这里插入图片描述
正确配置:

server:
  port: 8081
  servlet:
    context-path: /

测试:
在这里插入图片描述


application.yaml

在这里插入图片描述
添加配置

server:
  port: 8080
  servlet:
    context-path: /666

测试

在这里插入图片描述

两种配置文件同时存在

在这里插入图片描述
如果两个文件同时存在,优先取的是properties文件内的

设置Maven私服仓库

如果项目出现问题,可以把maven镜像修改成我的(本地)
maven寻找依赖的时候,首先会去本地找,然后再到镜像仓库

<!--修改成阿里云的镜像-->
	<mirror> 
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>

三、多环境开发核心配置文件

多环境配置文件切换(properties)

一般情况我们的环境有:1开发环境 、2 测试环境、3 准生产环境 4 生产环境
有时候我们会在不同的环境对项目进行操作。但每个环境的配置不一样,比如IP端口、数据库等等。如果我们通过单一的配置文件进行反复的修改,会显得很麻烦。因此我们需要使用使用多环境开发模式对配置文件进行切换。


步骤:
1️⃣ 首先创建所需要的开发环境配置文件
在这里插入图片描述
我这里有dev:开发、product:生产、ready:准生产环境。你也可以根据自己的需求进行添加

下面是各个配置文件的详细内容
Dev:

#开发环境
# 应用名称
spring.application.name=springboot-properties-yal-yaml
# 应用服务 WEB 访问端口
server.port=8080
server.servlet.context-path=/dev

product:

#生产环境
server.port=9090
server.servlet.context-path=/product

ready:

#准生产环境
server.port=8082
server.servlet.context-path=/ready

test:

#测试环境
server.port=8081
server.servlet.context-path=/test

2️⃣我们还需要一个核心配置文件——application.properties
我们需要在这个文件里面激活需要的具体的环境配置文件
在这里插入图片描述

里面具体的操作:
使用spring.profiles.active激活我们想要使用的配置文件,“=”号后面只需要填写application-后面且,properties前面的内容。注意格式标准

#springboot主核心配置文件
#激活使用的配置文件
spring.profiles.active=dev

这是我们使用的是dev开发环境,开发环境的端口号是8080,此时我们启动程序查看日志在这里插入图片描述
此时我们可以看到已经成功的切换到了开发环境,端口是8080

我们在换一个环境试试:换一个测试环境test,同样我们需要在核心配置文件里去激活

#springboot主核心配置文件
#激活使用的配置文件
spring.profiles.active=test

启动程序并查看日志
在这里插入图片描述
我们可以看到成功切换了


多环境配置文件切换(yaml/yml)

基本步骤和properties的配置相差不大

1️⃣
首先创建所需要的配置文件,这里我就只举一个例子了

dev
在这里插入图片描述
配置内容:

#开发环境
server:
  port: 8080
  servlet:
    context-path: /dev

2️⃣创建一个核心配置文件,这里的核心配置文件不是以.properties结尾的,而是以.yaml结尾的
在这里插入图片描述
激活配置文件

spring:
  profiles:
    active: dev

启动程序查看结果
在这里插入图片描述

OK


获取自定义配置(单个值)

比如我们在配置文件中定义了数据
然后我们需要在外部获取

1️⃣我们首先在外部定义好数据


school.name=Sichuan Dachuan Middle School
websit=http://www.scdczx.en

2️⃣然后我们通过@Value注解来获取数据

@Controller
public class IndexController {
    @Value("${school.name}")
    private String schoolName;

    @Value("${websit}")
    private String websit;

    @RequestMapping(value = "/say")
    @ResponseBody
    public String say(){
        return "msg:"+schoolName+":"+websit;
    }
}

运行结果:

在这里插入图片描述


获取自定义配置(映射成对象)

1️⃣首先我们也设置好数据源

school.name=四川省达川中学
school.master=ObjectMan
school.websit=http://www.scdczx.en

2️⃣使用@ConfigurationProperties(prefix = “”) 进行数据注入prefix的值为前数据源名称的前缀

@Component//将此类交给Spring容器管理
@ConfigurationProperties(prefix = "school")
public class School {
    private String name;

    private String master;

    private String websit;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMaster() {
        return master;
    }

    public void setMaster(String master) {
        this.master = master;
    }

    public String getWebsit() {
        return websit;
    }

    public void setWebsit(String websit) {
        this.websit = websit;
    }
}

获取对象

@Controller
public class IndexController {
    @Autowired
    private School school;
    
    @RequestMapping(value = "/say")
    @ResponseBody
    public String say(){
        return "学校:"+school.getName()+" "+"校长:"+school.getMaster()+" "+"学校官网:"+school.getWebsit();
    }

四、SprigBoot集成Mybatis

步骤

1、添加mybatis依赖
2、添加Oracle驱动
3、使用Mybatis提供的逆向工程生成实体bean,映射文件,dao接口

        <!--MySQL数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--MyBatis整合SpringBoot框架起步依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

mybatis逆向工程1

我们可以通过配置文件和插件来自动生成我们需要的模块

插件

            <!--mybatis 代码自动生成插件-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <!--配置文件的位置-->
                    <configurationFile>GeneratorMapper.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>

配置文件(在项目根目录创建)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 指定连接数据库的 JDBC 驱动包所在位置,指定到你本机的完整路径 -->
    <classPathEntry location="D:\work_sduty\resource\mysql-connector-java-8.0.20.jar"/>
    <!-- 配置 table 表信息内容体,targetRuntime 指定采用 MyBatis3 的版本 -->
    <context id="tables" targetRuntime="MyBatis3">
        <!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- 配置数据库连接信息 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/dunv?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;nullCatalogMeansCurrent=true"
                        userId="root"
                        password="654321">
        </jdbcConnection>
        <!-- 生成 model 类,targetPackage 指定 model 类的包名, targetProject 指定
        生成的 model 放在 eclipse 的哪个工程下面-->
        <javaModelGenerator targetPackage="com.dunv.study.model"
                            targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="false"/>
        </javaModelGenerator>
        <!-- 生成 MyBatis 的 Mapper.xml 文件,targetPackage 指定 mapper.xml 文件的
        包名, targetProject 指定生成的 mapper.xml 放在 eclipse 的哪个工程下面 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources/">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- 生成 MyBatis 的 Mapper 接口类文件,targetPackage 指定 Mapper 接口类的包
        名, targetProject 指定生成的 Mapper 接口放在 eclipse 的哪个工程下面 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.dunv.study.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 数据库表名及对应的 Java 模型类名 -->
        <table tableName="t_student" domainObjectName="Student"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

运行:
在这里插入图片描述

我们可以看到已经生成了
在这里插入图片描述

关于生成的Mapper映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dunv.study.mapper.StudentMapper">
  <resultMap id="BaseResultMap" type="com.dunv.study.model.Student">
    <!--id 标签只能修改主键字段-->
    <!--result 除了主键以外的字段-->
    <!--
      column 数据库中的字段名称
      property映射对象的属性名称
      jdbcType 列中数据库字段的类型(可省略不写)
    -->

    <!--
      resultMap作用:
        1.当数据库中字段名称与实体类对象的属性名称不一致时,可以进行转换
        2.当查询的结果没有一个对应表的时候,可以自定义一个结果集来映射查询结果
    -->
    <!--
      数据库表字段名称 实体对象属性名称
      name              name
      age                age

    -->

    <!--
      如果数据库中字段名称由多个单词构成,通过Mybatis逆向工程生成的对象属性
      会按照驼峰命名法规则生成属性名称
      其中:数据库中字段名称由多个单词的时候必须使用_下划线
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="age" jdbcType="INTEGER" property="age" />
  </resultMap>

  <!--
  sql语句片段,将公共的部分抽取出来
  通过include标签引用
  -->
  <sql id="Base_Column_List">
    id, name, age
  </sql>

  <!--
  使用java.lang.Integer可以规避判断"" ,只需判断是否为null
  -->
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from t_student
    where id = #{id,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from t_student
    where id = #{id,jdbcType=INTEGER}
  </delete>

  <insert id="insert" parameterType="com.dunv.study.model.Student">
    insert into t_student (id, name, age
      )
    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
      )
  </insert>

  <!--
  prefix:首拼接
  suffix:尾拼接
  suffixOverrides: 去除多余的逗号
   -->
  <insert id="insertSelective" parameterType="com.dunv.study.model.Student">
    insert into t_student
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="name != null">
        name,
      </if>
      <if test="age != null">
        age,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="id != null">
        #{id,jdbcType=INTEGER},
      </if>
      <if test="name != null">
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null">
        #{age,jdbcType=INTEGER},
      </if>
    </trim>
  </insert>

  <update id="updateByPrimaryKeySelective" parameterType="com.dunv.study.model.Student">
    update t_student
    <set>
      <if test="name != null">
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null">
        age = #{age,jdbcType=INTEGER},
      </if>
    </set>
    where id = #{id,jdbcType=INTEGER}
  </update>

  <update id="updateByPrimaryKey" parameterType="com.dunv.study.model.Student">
    update t_student
    set name = #{name,jdbcType=VARCHAR},
      age = #{age,jdbcType=INTEGER}
    where id = #{id,jdbcType=INTEGER}
  </update>
</mapper>

案例——springboot集成Mybatis

1、准备好实体类、mapper接口、mapper映射文件(由GeneratorMapper.xml使用mybatis逆向工程生成)

2、创建service层以及其实现层
在这里插入图片描述

service

package com.dunv.study.service;

import com.dunv.study.model.Student;

/**
 * @author ZS
 * @Description
 * @date 2022/11/29 13:48
 */
public interface StudentService {
    /**
     * 根据学生ID查询详情
     * @param id
     * @return
     */
    Student queryStudentById(Integer id);
}

serviceImpl

为StudentServiceImpl 添加@Service注解

package com.dunv.study.service.impl;

import com.dunv.study.mapper.StudentMapper;
import com.dunv.study.model.Student;
import com.dunv.study.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author ZS
 * @Description
 * @date 2022/11/29 13:49
 */
@Service //为StudentServiceImpl 添加@Service注解
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentMapper studentMapper;

    @Override
    public Student queryStudentById(Integer id) {
        Student student = studentMapper.selectByPrimaryKey(id);
        return student;
    }
}

2、创建控制层的StudentController

package com.dunv.study.controller;

import com.dunv.study.model.Student;
import com.dunv.study.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author ZS
 * @Description
 * @date 2022/11/29 13:45
 */

@Controller
public class StudentController {
    @Autowired
    private StudentService studentService;


    @RequestMapping(value = "/student")
    @ResponseBody
    public Object student(Integer id){
        Student student = studentService.queryStudentById(id);
        return student;
    }
}

3、为mapper接口添加mapper扫描

package com.dunv.study;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author 28259
 */
@SpringBootApplication
@MapperScan("com.dunv.study.mapper")//开启扫描mapper接口的包以及子目录
class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

4、在pom.xml的build中指定文件夹为resource

        <!--手动指定文件夹为resource-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>

5、运行并访问

数据库信息
在这里插入图片描述

查询结果

在这里插入图片描述

Mapper映射文件存放位置(不在pom文件中指定资源目录)

1、把mapper.xml映射文件放到resource/mapper目录下
在这里插入图片描述

2、在核心配置文件application.properties中指定

#设置数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dunv?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
spring.datasource.username=root
spring.datasource.password=654321

#指定mybatis映射文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml

3、运行并访问
在这里插入图片描述

springboot集成mybatis总结

1️⃣Springboot集成Mybatis

  • 添加mybatis依赖,Mysql/Oracle驱动
  • 使用Mybatis提供的逆向工程生成实体bean,映射文件,DAO接口

2️⃣Springboot集成mybatis,最主要的两个注解是@Mapper和@MapperScan

  • @Maper 需要在每一个Mapper接口类上添加,作用扫描dao/mapper接口
  • @MapperScan是在SpringBoot启动入口类添加的,它是扫描所有得1包

3️⃣关于映射文件存放的位置
1、将Mapper接口和Mapper映射文件存放到src.mian/java同一目录下,
还需要在pom文件中手动指定资源文件夹的路径resource

2、将Mapper接口和Mapper映射文件分开存放,需要在核心配置文件中指定mapper映射文件存放的位置

五、 SpringBoot支持事物

前言

事物是一个完整的功能,也叫一个完整的业务
事物只跟什么SQL语句有关系?(DML【数据操纵语言】:增、删、改)


上面说了,事物是一个完整的业务,里面包含了多个执行单元。由于事物的一致性原则——这些执行单元要么全部执行,要么全不执行

我们以数据修改为例

    public int updateStudentById(Student student) {

        //修改成功
        int i = studentMapper.updateByPrimaryKey(student);

        //失败
        int a = 10/0;
        return i;
    }

在上面的方法中,就可以把这个方法看成是一个事务,里面包含了两个执行单位

  • int i = studentMapper.updateByPrimaryKey(student);
  • int a = 10/0;

第二个 int a = 10/0 肯定会报错

现在我们要把数据库里面的哈哈修改成啦啦,如果不添加事务,我们可以看看结果是什么样的。
在这里插入图片描述

我们可以看到页面上报错了
在这里插入图片描述

后端控制台也报错了,正是第二个错误

在这里插入图片描述

此时我们再看数据库
在这里插入图片描述
数据被修改了!,也就是说int i = studentMapper.updateByPrimaryKey(student);执行成功了,但是int a = 10/0执行失败了。这违反了事务的一致性原则

此时我们应该添加事务

添加事务

在对应的业务上添加 @Transactional(Springboot2.0以上)注解即可,这样就不会保持事务的一致性原则

    @Transactional
    @Override
    public int updateStudentById(Student student) {

        //修改成功
        int i = studentMapper.updateByPrimaryKey(student);

        //失败
        int a = 10/0;
        return i;
    }
}

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

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

相关文章

Allegro削铜皮详细操作指导

Allegro削铜皮详细操作指导 Allegro可以编辑任意形状的铜皮,下面介绍几种削铜皮的方式 任意形状,shape-manual Void/cavity-Polygon 鼠标左键点击铜皮,铜皮会被亮起来 画出需要的形状 完成后如下图 方形shape-manual Void/cavity-Rectangular 同样的选择铜皮,画出需要…

通过 js 给元素添加动画样式animation属性 ,以及 perspective 属性探究

学习关键语句: js添加动画效果 js控制元素animation属性 写在前面 在制作组件的过程中呢 , 突然觉得这个动画啊应该由用户来决定到底是个啥样 , 但是怎么让用户操作这一步呢 ? 总不能让用户自己去写 css keyframe 吧 , 所以便有了这篇文章 , 同时 , 这篇文章的下半部分我们会…

Python+Selenium:Google patent数据爬取

准备工作,已搭建Python环境,安装Selenium pip install selenium -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 步骤1: 根据Chrome版本下载ChromeDriver 下载链接地址: ChromeDriver - WebDriver for Chrome - Downloads 如在帮助——>关于Ch…

车道线检测-lanedet

源码&#xff1a;https://github.com/Turoad/lanedet 这是一个常见的检测网络整合版本&#xff0c;目前包括的检测网络有&#xff1a; 模型论文介绍 SCNN&#xff0c;RESA论文介绍&#xff0c;UFLD介绍&#xff0c;laneNet|其它相关模型&#xff0c;LaneATT介绍 数据集介绍…

机器学习之归一化

机器学习之归一化1.目的1.1损失函数求解问题1.2 归一化目的2. 归一化2.1 最大值最小值归一化2.2 标准化1.目的 1.1损失函数求解问题 线性回归Loss函数梯度公式 参数含义θ\thetaθ函数参数α\alphaα学习率xjix^i_{j}xji​x:数据集&#xff0c;i:样本&#xff0c;j:特征 【数…

OPengl学习(二)——opengl环境搭建

文章目录0、 概念/准备1、VSOpengl快速添加手动编译2、QT中使用opengl1.pro配置文件2.引入头文件 继承QGLWidget3.实现三个主要函数3、引用0、 概念/准备 opengl官网地址 1、OpenGL 函数库相关的 API 有核心库&#xff08;gl&#xff09;&#xff0c;实用库&#xff08;glu&a…

自动化状态监测和工业4.0解决方案-Softing uaGate SI

某公司为其注塑和反应/挤出系统采用了uaGate SI网关技术并实行了开放且独立于平台的OPC UA标准&#xff0c;以用于设备状态自动化监控&#xff0c;这有助于提高产量并避免机器停机。 自动化状态监测提高了产量并且可避免机器停机。为了将其设备控制系统与IT系统相连接起来&…

最小生成树(Prim算法与Kruskal算法)

一、什么是最小生成树 一个连通图的生成树是一个极小的连通子图&#xff0c;它含有图中全部的n个顶点&#xff0c;但只有足以构成一棵树的n&#xff0d;1条边。我们把构造连通网的最小代价生成树称为最小生成树。 例如下图中①、②、③都是左侧图的生成树&#xff0c;但③是构…

k8s的亲和调度

k8s的亲和调度 出于高效通信等需求&#xff0c;偶尔需要把一些Pod对象组织在相近的位置(同一节点、机架、区域或地区等)&#xff0c;例如应用程序的Pod及其后端提供数据服务的Pod等&#xff0c;我们可以认为这是一类具有亲和关系的Pod对象。 理想的实现方式是允许调度器把第一个…

[附源码]计算机毕业设计springboot高校流浪动物领养网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2022.11.28总结

今天写了条件查询 虽然思路上还说是比较顺&#xff0c;但是还是写了一晚上&#xff0c;因为老是在细节上出现bug&#xff0c;改了好久&#xff0c;踩了好几个坑。 首先大概是因为组件不是确定的&#xff0c;我把ref属性绑定在router-view上&#xff0c;导致我获取不到条件选择…

c++类型转换

目录 1.隐式类型转换和强制类型转换 2.隐式类型转换带来的危险 3.c提供的标准类型转换关键字 4.总结 1.隐式类型转换和强制类型转换 c语言的类型转换可以分为隐式类型转换和强制类型转换。 #include<iostream>using namespace std;int main() {double a 3.14;int …

医疗保健行业的福音是对话式AI吗?

导读对话式AI可以对医疗保健行业产生重大影响&#xff0c;且在许多领域已经产生了影响。如果使用得当&#xff0c;对话式AI可以提高操作效率和临床结果&#xff0c;并减轻医护人员的工作量。 对话式AI技术开启了数字患者护理的新时代。 患者可以随时访问其需要的数据&#xff…

Ubuntu 18.04 + CUDA 11.3.0 + CUDNN 8.2.1 + Anaconda + Pytorch 1.10

Xshell远程连接进行Ubuntu的Pytorch配置写在最前面参考Xshell常用命令Ubantu检查系统的各项配置查看ubuntu系统的版本信息和gcc版本查看Linux的内核版本和系统是多少位的验证机器是否具有n卡各种配置&#xff08;建议不要省略&#xff09;安装vim增加pip镜像源禁用nouveau开启S…

[附源码]计算机毕业设计springboot高校学生摄影作品展示平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

app与小程序的区别【开发小程序】

app与小程序&#xff0c;两者有什么区别呢&#xff1f;很多公司在开发app或是开发小程序上比较纠结&#xff0c;二选一不止究竟选哪个好&#xff0c;当然有财力的公司可能会两者都开发。那么下面说说app与小程序的区别是什么&#xff0c;好让大家更好地二选一。 app与小程序的…

单商户商城系统功能拆解39—分销应用—分销等级

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

2022小美赛数学建模ABCD赛题思路分析 - 认证杯

一、竞赛信息 考虑到美国大学生数学建模竞赛即将举行&#xff0c;近几年国内院校参加美赛的热情一直比较高涨&#xff0c;去年参赛规模已经突破了30000支队&#xff0c;但是由于美赛需要用英文书写论文&#xff0c;中文和英文的语法和思维差异比较明显&#xff0c;另外美赛参赛…

解决 Android WebView 多进程导致App崩溃

应用场景 应用内有两个位置用到WebView加载页面&#xff0c;具体处理逻辑不能通用。分别扩展了WebView了。应用内独立页面使用Fragment来展示,(采用单Activity架构&#xff09;。应用提供切换语言功能。 问题猜想 一、WebView内核bug 具体路径&#xff1a; 进入app–>设…

[附源码]SSM计算机毕业设计校园征兵及退役复原管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…