Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

  • 一、快速创建Spring boot项目
  • 二、项目完整目录
  • 三、pom.xml
  • 四、application.yaml
  • 五、实体类
  • 六、mapper
  • 七、IService接口
  • 八、Service实现类
  • 九、配置类
  • 十、枚举
  • 十一、增删改查测试类
  • 十二、服务测试类
  • 十三、分页测试类
  • 十四、枚举测试类
  • 十五、乐观锁测试类

一、快速创建Spring boot项目

在这里插入图片描述

二、项目完整目录

在这里插入图片描述

三、pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.1</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<groupId>com.lovejava.boot</groupId>
	<artifactId>learnjava</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>learnjava</name>

	<properties>
		<java.version>8</java.version>
		<maven.compiler.source>8</maven.compiler.source>
		<maven.compiler.target>8</maven.compiler.target>
	</properties>


	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>



		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>


		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.2</version>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.13</version>
		</dependency>




	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>8</source>
					<target>8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

四、application.yaml

spring:
  application:
    name: learnjava

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.129.88.141:3306/data_entry_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: datasight
    password: datasight123456!A


mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    log-impl: org.apache.ibatis.logging.log4j.Log4jImpl
#  global-config:
#    db-config:
#      table-prefix: t_
#      id-type: AUTO

  type-enums-package: com.lovejava.boot.enums

五、实体类

import com.baomidou.mybatisplus.annotation.*;
import com.lovejava.boot.enums.SexEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@TableName("user")
public class User {

    @TableId(value = "id",type=IdType.AUTO)
    private Long id;

//    @TableField("sname")
    private String name;

    private Integer age;

    private SexEnum sex;

    private String email;

    @TableField("isDeleted")
    @TableLogic
    private Integer isDeleted;

    @Version
    private Integer version;

}

六、mapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lovejava.boot.pojo.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {
}

七、IService接口

IService 是 MyBatis-Plus 提供的一个通用 Service 层接口,它封装了常见的 CRUD 操作,包括插入、删除、查询和分页等。通过继承 IService 接口,可以快速实现对数据库的基本操作,同时保持代码的简洁性和可维护性。

IService 接口中的方法命名遵循了一定的规范,如 get 用于查询单行,remove 用于删除,list 用于查询集合,page 用于分页查询,这样可以避免与 Mapper 层的方法混淆。

import com.baomidou.mybatisplus.extension.service.IService;
import com.lovejava.boot.pojo.User;

public interface UserService extends IService<User> {
}

八、Service实现类

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lovejava.boot.mapper.UserMapper;
import com.lovejava.boot.pojo.User;
import com.lovejava.boot.service.UserService;
import org.springframework.stereotype.Service;


@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

九、配置类

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.lovejava.boot.mapper")
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        // 如果配置多个插件, 切记分页最后添加
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
        return interceptor;
    }
}

十、枚举

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum SexEnum {

    MALE(1,"男"),

    FEMALE(2,"女");

    @EnumValue //将注解所标识的属性的值存储到数据库中
    private Integer sex;
    private String sexName;

}

十一、增删改查测试类

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.lovejava.boot.mapper.UserMapper;
import com.lovejava.boot.pojo.User;
import net.minidev.json.JSONUtil;
import org.junit.jupiter.api.Test;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SpringBootTest
public class MyBatisPlusTest {


    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectList(){
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
        users.forEach(System.out::println);
    }


    @Test
    public void testInsert(){
        User user = new User();
        user.setName("刘备");
        user.setAge(23);
        user.setEmail("fy@qq.com");
        int result = userMapper.insert(user);
        System.out.println("result:"+result);
        System.out.println("id:"+user.getId());
    }

    @Test
    public void testDelete(){
        int result = userMapper.deleteById(1860576442045870081L);
        System.out.println(result);

    }

    //DELETE FROM user WHERE name = ? AND age = ?
    @Test
    public void testDeleteByMap(){
        Map<String,Object> map = new HashMap<>();
        map.put("name","刘备");
        map.put("age",23);
        int result = userMapper.deleteByMap(map);
        System.out.println("result:"+result);

    }

    //通过多个id实现批量删除
    @Test
    public void testDeleteBatchIds(){
        List<Integer> list = Arrays.asList(1, 2, 3);
        int result = userMapper.deleteBatchIds(list);
        System.out.println("result:"+result);
    }


    @Test
    public void testUpdate(){
        User user = new User();
        user.setId(1860579637015023618l);
        user.setName("刘备");
        user.setEmail("lb@qq.com");
        int result = userMapper.updateById(user);
        System.out.println("result: " + result);
    }

    @Test
    public void testSelectById(){
        List<Long> list = Arrays.asList(1l, 2l, 3l);
        List<User> users = userMapper.selectBatchIds(list);
        users.forEach(System.out::println);

    }

    @Test
    public void testSelectByMap(){
        HashMap<String, Object> map = new HashMap<>();
        map.put("name","诸葛亮");
        map.put("age",20);
        List<User> users = userMapper.selectByMap(map);
        users.forEach(System.out::println);
    }



    @Test
    public void testConditionSelect(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.likeRight("name","刘备")
                .between("age",10,50)
                .isNotNull("email");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }


    @Test
    public void testConditionOrder(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.orderByDesc("age")
                .orderByAsc("id");

        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);

    }

    @Test
    public void deleteCondition(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.isNull("email");
        int result = userMapper.delete(queryWrapper);
        System.out.println("result:" + result);
    }

    @Test
    public void updateCondition(){

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age",20)
                .like("name","刘备")
                .or()
                .isNull("email");

        User user = new User();
        user.setName("诸葛亮");
        user.setEmail("zhugeliang@qq.com");
        int result = userMapper.update(user, queryWrapper);
        System.out.println("result: "+result);
    }


    //UPDATE user SET name=?, email=? WHERE isDeleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))
    @Test
    public void updateCondition2(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name","诸葛亮")
                .and(i -> i.gt("age",20).or().isNull("email"));
        User user = new User();
        user.setName("张飞");
        user.setEmail("zhangfei@qq.com");

        int result = userMapper.update(user, queryWrapper);
        System.out.println("result:"+result);

    }

    //UPDATE user SET name=?,email=? WHERE isDeleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL))
    @Test
    public void updateCondition3(){
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.like("name","诸葛亮")
                .and(i -> i.gt("age",20).or().isNull("email"));
        updateWrapper.set("name","孙权").set("email","sunquan@qq.com");
        int result = userMapper.update(null,updateWrapper);
        System.out.println("result:" + result);

    }

    @Test
    public void selectCondition(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("name","age","email");
        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
        maps.forEach(System.out::println);
    }


    //子查询
    //SELECT id,name,age,email,isDeleted FROM user WHERE isDeleted=0 AND (id IN (select id from user where id < 10))
    @Test
    public void selectCondition2(){

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.inSql("id","select id from user where id < 10");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

    //模拟实际条件
    //SELECT id,name,age,email,isDeleted FROM user WHERE isDeleted=0 AND (age >= ? AND age <= ?)
    @Test
    public void getCondition(){
        String username = "";
        Integer startage = 20;
        Integer endage = 35;

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        if(StringUtils.isNotBlank(username)){
            queryWrapper.like("name",username);
        }
        if(startage!=null){
            queryWrapper.ge("age",startage);
        }
        if(endage!=null){
            queryWrapper.le("age",endage);
        }

        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }


    //SELECT id,name,age,email,isDeleted FROM user WHERE isDeleted=0 AND (age >= ? AND age <= ?)
    @Test
    public void getCondition2(){
        String username = "";
        Integer startage = 20;
        Integer endage = 35;

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(username),"name","孙权")
                .ge(startage!=null,"age",startage)
                .le(endage!=null,"age",endage);

        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void testSelectLambda(){
        String username = "";
        Integer startage = 20;
        Integer endage = 35;
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(username),User::getName,username)
                .ge(startage!=null,User::getAge,startage)
                .le(endage!=null,User::getAge,endage);
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }


    //UPDATE user SET name=?,age=?,email=? WHERE isDeleted=0 AND (age >= ? AND age <= ?)
    @Test
    public void testUpdateLambda(){
        String username = "";
        Integer startage = 20;
        Integer endage = 35;
        LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.like(StringUtils.isNotBlank(username),User::getName,username)
                .ge(startage!=null,User::getAge,startage)
                .le(endage!=null,User::getAge,endage);

        updateWrapper.set(User::getName,"诸葛亮回来了").set(User::getAge,16).set(User::getEmail,"诸葛亮@qq" +
                ".com");
        int result = userMapper.update(null, updateWrapper);
        System.out.println("result: "+result);
    }


    @Test
    public void testOptimisticLocker2(){

        // 线程1
        //1.查询用户信息
        User user1 = userMapper.selectById(2);
        //2.修改用户信息
        user1.setName("马超1");
        user1.setAge(20);
        user1.setEmail("machao1@qq.com");

        //模拟另外一个线程执行了插队操作
        User user2 = userMapper.selectById(2);
        //2.修改用户信息
        user2.setName("马超2");
        user2.setAge(20);
        user2.setEmail("machao2@qq.com");
        userMapper.updateById(user2);

        //如果没有乐观锁就会覆盖插队线程的值
        //可以使用自旋锁来多次尝试提交
        userMapper.updateById(user1);
    }
}

十二、服务测试类

import java.util.ArrayList;
import java.util.List;

@SpringBootTest
public class MyBatisPlusServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void testGetCount(){
        int count = userService.count();
        System.out.println("总记录数: "+count);
    }

    @Test
    public void testInsertBatch(){

        List<User> list = new ArrayList<>();
        for (int i = 1; i<= 10; i++){
            User user = new User();
            user.setName("fy"+i);
            user.setAge(20+i);
            user.setEmail("fy"+i+"qq.com");
            list.add(user);
        }
        boolean b = userService.saveBatch(list);
        System.out.println("操作结果:"+b);

    }


}

十三、分页测试类

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lovejava.boot.mapper.UserMapper;
import com.lovejava.boot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MybatisPlusPluginsTest {

    @Autowired
    private UserMapper userMapper;


    @Test
    public void testSelectPage(){

        Page<User> page = new Page<>(1,1);
        userMapper.selectPage(page,null);
        page.getRecords().forEach(System.out::println);
        System.out.println(page.getTotal());
    }



    //SELECT COUNT(*) FROM user WHERE isDeleted = 0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
    @Test
    public void testSelectConditionPage(){
        Page<User> page = new Page<>(1,1);

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.likeRight("name","刘备")
                .between("age",10,50)
                .isNotNull("email");

        userMapper.selectPage(page,queryWrapper);

        System.out.println(page);

        System.out.println(page.getTotal());
        System.out.println(page.getRecords());
        System.out.println(page.getPages());
        System.out.println(page.hasNext());
        System.out.println(page.hasPrevious());

    }
}

十四、枚举测试类

import com.lovejava.boot.enums.SexEnum;
import com.lovejava.boot.mapper.UserMapper;
import com.lovejava.boot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MyBatisPlusEnumTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test(){
        User user = new User();
        user.setName("admin");
        user.setAge(23);
        user.setSex(SexEnum.MALE);
        user.setEmail("admin@qq.com");

        int result = userMapper.insert(user);
        System.out.println("result:" + result);

    }
}

十五、乐观锁测试类

实体类添加字段:

    @Version
    private Integer version;

添加乐观锁插件

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.lovejava.boot.mapper")
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        // 如果配置多个插件, 切记分页最后添加
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
        return interceptor;
    }
}

乐观锁实现

    @Test
    public void testOptimisticLocker2(){

        // 线程1
        //1.查询用户信息
        User user1 = userMapper.selectById(2);
        //2.修改用户信息
        user1.setName("马超1");
        user1.setAge(20);
        user1.setEmail("machao1@qq.com");

        //模拟另外一个线程执行了插队操作
        User user2 = userMapper.selectById(2);
        //2.修改用户信息
        user2.setName("马超2");
        user2.setAge(20);
        user2.setEmail("machao2@qq.com");
        userMapper.updateById(user2);

        //如果没有乐观锁就会覆盖插队线程的值
        //可以使用自旋锁来多次尝试提交
        userMapper.updateById(user1);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java基础面试题笔记(基础篇)

网上始终找不到令自己满意的面试题&#xff0c;所以我打算自己整理面试题&#xff0c;从简单的到难的&#xff0c;尽量简单准确描述回答降低大家理解和背的难度&#xff0c;有错误或者有更好的回答请在评论回复我&#xff0c;感谢大家。 什么是java&#xff1f; 回答&#xff…

编译 LLVM 源码,使用 Clion 调试 clang

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 1. LLVM 简介 LLVM 是一个开源的编译器基础架构&#xff0c;最初由 Chris Lattner 于 2000 年在伊利诺伊大学开发&#xff0c;后来成为一个广泛应用于编译器和…

[代码随想录打卡Day22] 理论基础 77. 组合 216.组合总和III 17.电话号码的字母组合

理论基础 有递归就有回溯。回溯搜索是一种纯暴力搜索算法。我们一层一层递归到最底层收获结果&#xff0c;比如下面我们最后一层1操作之后&#xff0c;我们只有撤销这个操作回退到上一个节点才能遍历该层的其他节点&#xff0c;这个回退撤销操作就是回溯。 回溯法&#xff0…

大模型工程化部署:使用FastChat部署基于OpenAI API兼容大模型服务

FastChat是加州大学伯克利分校LM-SYS发布的一个用于训练、服务和评估基于大型语言模型的聊天机器人的开放平台。 项目地址&#xff1a;https://github.com/lm-sys/FastChat.git 其核心功能包括&#xff1a; 最先进 LLM 模型的权重、训练代码和评估代码。 带有 WebUI 和与 Op…

102.【C语言】数据结构之用堆对数组排序

0.前置知识 向上调整: 向下调整: 1.对一个无序的数组排升序和降序 排升序问题 建大根堆还是小根堆? 错误想法 由小根堆的定义:树中所有的父节点的值都小于或等于孩子节点的值,这样排出来的数组时升序的,建小根堆调用向上调整函数即可(把画圈的地方改成<即可) arr未…

彻底理解微服务的作用和解决方案

一.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c;通常说微服务好会和单体项目进行比较&#xff0c;通常情况下微服务都是从单体项目拆分而来的&#xff0c;但是对于有些大型公司&#xff0c;不差钱&…

Harbor安装、HTTPS配置、修改端口后不可访问?

Harbor安装、HTTPS配置、修改端口后不可访问&#xff1f; 大家好&#xff0c;我是秋意零。今天分享Harbor相关内容&#xff0c;安装部分可完全参考官方文档&#xff0c;写的也比较详细。 安装Harbor 官方文档&#xff1a;https://goharbor.io/docs/2.12.0/install-config/ …

表单校验规则

这里简单记录下vue使用表单时候&#xff0c;给表单添加校验规则&#xff0c;直接上代码 <script setup>import { ref } from vue// 定义表单对象const form ref({account: ,password: ,agree: true})// 定义表单验证规则const rules {account: [{required: true, mess…

spf算法、三类LSA、区间防环路机制/规则、虚连接

1.构建spf树&#xff1a; 路由器将自己作为最短路经树的树根根据Router-LSA和Network-LSA中的拓扑信息,依次将Cost值最小的路由器添加到SPF树中。路由器以Router ID或者DR标识。广播网络中DR和其所连接路由器的Cost值为0。SPF树中只有单向的最短路径,保证了OSPF区域内路由计管不…

电子电气架构 -- ASIL D安全实现策略

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

【Unity ShaderGraph实现流体效果之Function入门】

Unity ShaderGraph实现流体效果之Node入门&#xff08;一&#xff09; 前言Shader Graph NodePosition NodeSplit NodeSubtract NodeBranch Node 总结 前言 Unity 提供的Shader Graph在很大程度上简化了开发者对于编写Shader的工作&#xff0c;只需要拖拽即可完成一个视觉效果…

uniop触摸屏维修eTOP40系列ETOP40-0050

在现代化的工业与商业环境中&#xff0c;触摸屏设备已成为不可或缺的人机交互界面。UNIOP&#xff0c;作为一个知名的触摸屏品牌&#xff0c;以其高性能、稳定性和用户友好性&#xff0c;广泛应用于各种自动化控制系统、自助服务终端以及高端展示系统中。然而&#xff0c;即便如…

SpringMVC——简介及入门

SpringMVC简介 看到SpringMVC这个名字&#xff0c;我们会发现其中包含Spring&#xff0c;那么SpringMVC和Spring之间有怎样的关系呢&#xff1f; SpringMVC隶属于Spring&#xff0c;是Spring技术中的一部分。 那么SpringMVC是用来做什么的呢&#xff1f; 回想web阶段&#x…

小白学多线程(持续更新中)

1.线程池技术 1.JDK中的线程池 JDK中创建线程池有一个最全的构造方法&#xff0c;里面七个参数如上所示。 执行流程分析&#xff1a; 模拟条件&#xff1a;10个核心线程数&#xff0c;200个最大线程数&#xff0c;阻塞队列大小为100。 当有小于十个任务要处理时&#xff0c…

UNity将脚本中的文本提示显示在编辑器中

正常情况下我们创建了一个脚本然后挂载到一个对象上只能看到这样的一个面板 如果我们想在编辑器里面添加一段提示就可以这样做 [Header("玩家的基本信息")] 然后就能在编辑器窗口中看到添加的提示了 注意&#xff1a;当参数少的时候确实没必要这样做&#xff0c;但…

数据结构 (8)线性表的应用——一元多项式的表示及应用

一、一元多项式的定义 一元多项式是代数学研究的基本对象之一&#xff0c;可以表示为&#xff1a; P_n(x) p_0 p_1x p_2xn 其中&#xff0c;p_0, p_1, ..., p_n 是数域 F 中的数&#xff0c;n 是非负整数&#xff0c;x 是变量。 二、一元多项式的线性表表示 在计算机中&…

【山大9009算法题】2015-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 线性表使用公式化描述方式存储。编写一个函数&#xff0c;从一给定的线性表A中删除值在x ~ y&#xff08;x到y&#xff0c;x<y&#xff09;之间的所有元素&#xff0c;要求以较高的效率来实现。提示&#…

【Mac】VMware Fusion Pro 安装 CentOS 7

1、下载镜像 CentOS 官网阿里云镜像网易镜像搜狐镜像 Mac M1芯片无法直接使用上述地址下载的最新镜像&#xff08;7.9、9&#xff09;&#xff0c;会一直卡在安装界面&#xff08;在 install 界面按 enter 回车无效&#xff09;&#xff0c;想要使用需要经过一系列操作&#…

机器学习周志华学习笔记-第5章<神经网络>

机器学习周志华学习笔记-第5章<神经网络> 卷王&#xff0c;请看目录 5模型的评估与选择5.1 神经元模型5.2 感知机与多层网络5.3 BP(误逆差)神经网络算法 5.4常见的神经网络5.4.1 RBF网络&#xff08;Radial Basis Function Network&#xff0c;径向基函数网络&#xff0…

MT8768/MTK8768安卓核心板性能参数_联发科安卓智能模块开发方案

MT8768安卓核心板 是一款采用台积电12nm FinFET制程工艺的智能手机芯片。MT8768核心板不仅提供所有高级功能和出色体验&#xff0c;同时确保智能终端具备长电池寿命。该芯片提供了一个1600x720高清(20:9比例)分辨率显示屏&#xff0c;排除了清晰度和功耗之间的平衡问题。该芯片…