基于Angular+BootStrap+SpringBoot简单的购物网站

目录

一、项目结构图

二、目录结构解析

后端 (Spring Boot)

前端 (Angular)

三、技术栈

四、具体功能实现

五、数据库设计

六、后端实现

1. 设置Spring Boot项目

2. 数据库实体类

3. 创建Repository

4. 创建Service层

5. 创建Controller层

七、前端实现(Angular)

1、创建 Angular 服务层  

2、创建 Angular 路由配置

3、配置文件

4、用户登录与注册

5、商品浏览与添加购物车

6、订单管理与收货地址

7、后台管理系统

八、部署与测试


一、项目结构图

/shopping-website
├── /backend (Spring Boot 项目)
│   ├── /src
│   │   ├── /main
│   │   │   ├── /java
│   │   │   │   ├── /com
│   │   │   │   │   ├── /example
│   │   │   │   │   │   ├── /shopping
│   │   │   │   │   │   │   ├── /config              # 配置文件,如Spring Security等
│   │   │   │   │   │   │   ├── /controller          # 控制器,处理API请求
│   │   │   │   │   │   │   ├── /entity              # 实体类,映射数据库表
│   │   │   │   │   │   │   ├── /exception           # 异常处理类
│   │   │   │   │   │   │   ├── /repository          # 数据访问层(JPA)
│   │   │   │   │   │   │   ├── /security            # 安全配置,Spring Security配置
│   │   │   │   │   │   │   ├── /service             # 业务逻辑层
│   │   │   │   │   │   │   └── /util                # 工具类
│   │   │   │   │   │   ├── /resources
│   │   │   │   │   │   │   └── application.yml      # 配置文件,数据库连接等
│   │   │   │   │   │   └── /static
│   │   └── /test
│   ├── /pom.xml                                       # Maven 配置文件,包含所有依赖
│
├── /frontend (Angular 项目)
│   ├── /src
│   │   ├── /app
│   │   │   ├── /components                           # 公共组件
│   │   │   │   ├── /login
│   │   │   │   ├── /register
│   │   │   │   ├── /product-list
│   │   │   │   ├── /cart
│   │   │   │   └── /order
│   │   │   ├── /services                             # 服务层,处理API请求
│   │   │   │   ├── /auth.service.ts
│   │   │   │   ├── /product.service.ts
│   │   │   │   ├── /cart.service.ts
│   │   │   │   ├── /order.service.ts
│   │   │   ├── /guards                               # 路由守卫
│   │   │   │   └── /auth.guard.ts
│   │   │   ├── /models                               # 数据模型类
│   │   │   │   ├── /user.ts
│   │   │   │   ├── /product.ts
│   │   │   │   ├── /order.ts
│   │   │   └── /app.module.ts                        # Angular 主模块
│   │   ├── /assets                                   # 静态资源(图片、字体等)
│   │   └── /environments                            # 环境配置文件
│   ├── /angular.json                                 # Angular 配置文件
│   ├── /package.json                                 # Node.js 配置文件
│   └── /tsconfig.json                               # TypeScript 配置文件
│
└── README.md                                          # 项目说明文件

二、目录结构解析

后端 (Spring Boot)

  • /src/main/java/com/example/shopping/config

    • SecurityConfig.java:Spring Security 配置类,设置权限控制。
    • PaymentConfig.java:支付接口配置类(集成支付宝、微信支付等)。
  • /controller
    处理HTTP请求的Controller类,通常负责接收前端请求、调用服务层逻辑并返回数据。例如:

    • UserController.java:处理用户注册、登录请求。
    • ProductController.java:处理商品展示、商品查询等请求。
    • OrderController.java:处理订单相关请求,订单创建、查询、状态更新等。
  • /entity

    • User.java:用户实体类。
    • Product.java:商品实体类。
    • Order.java:订单实体类,包含订单的各个字段,如商品、用户、支付状态等。
  • /repository

    • UserRepository.java:操作用户数据的JPA接口。
    • ProductRepository.java:操作商品数据的JPA接口。
    • OrderRepository.java:操作订单数据的JPA接口。
  • /security

    • UserDetailsServiceImpl.java:用户认证服务,实现UserDetailsService接口,加载用户信息。
  • /service

    • UserService.java:处理用户逻辑,包含注册、登录等业务逻辑。
    • ProductService.java:商品逻辑处理,处理商品的添加、修改、查询等。
    • OrderService.java:订单管理,处理订单的创建、支付、发货等业务。
    • PaymentService.java:支付相关的服务,集成支付宝、微信支付等接口。
  • /util

    • PaymentUtil.java:支付工具类,封装与第三方支付平台交互的工具方法。
    • OrderUtil.java:订单处理工具类,包含生成订单号、处理订单状态等功能。

前端 (Angular)

  • /components

    • login/:登录组件,提供用户登录界面和逻辑。
    • register/:注册组件,提供用户注册界面和逻辑。
    • product-list/:商品列表组件,展示商品信息。
    • cart/:购物车组件,展示购物车中的商品,支持修改商品数量和删除商品。
    • order/:订单组件,展示订单信息和订单管理功能。
  • /services

    • auth.service.ts:认证服务,处理用户的登录、注册、权限检查等操作。
    • product.service.ts:商品服务,提供与商品相关的API调用。
    • cart.service.ts:购物车服务,提供购物车操作功能。
    • order.service.ts:订单服务,提供订单创建、查询、支付等功能。
  • /guards

    • auth.guard.ts:路由守卫,用于保护用户路由,确保未登录用户无法访问需要登录的页面。
  • /models

    • user.ts:用户模型类,定义用户的数据结构。
    • product.ts:商品模型类,定义商品的数据结构。
    • order.ts:订单模型类,定义订单的数据结构。
  • /app.module.ts:主模块,包含Angular应用的模块配置,声明所有组件、服务和路由。

三、技术栈

  • 前端:Angular + Bootstrap
  • 后端:Spring Boot + Spring Security + JPA + MySQL
  • 数据库:MySQL

四、具体功能实现

  1. 用户管理(登录、注册、权限控制)

    • 前端:使用 Angular 路由守卫和服务实现登录、注册和角色管理。
    • 后端:通过 Spring Security 配置用户权限,确保不同角色用户的不同访问权限。
  2. 支付功能(支付宝、微信支付等)

    • 后端:集成支付宝和微信支付接口,处理支付请求、支付回调等。
    • 前端:在订单确认页面显示支付二维码(支付宝、微信支付),并处理支付回调。
  3. 商品管理和购物车

    • 后端:提供商品的增删改查接口,支持用户浏览商品,添加到购物车。
    • 前端:购物车组件提供购物车的管理功能,支持增加、删除商品和修改商品数量。
  4. 订单管理(创建、支付、发货)

    • 后端:管理订单的创建、支付、发货等流程,处理订单状态的更新。
    • 前端:用户可以查看自己的订单,并进行支付和查看订单详情。管理员可以查看所有订单并发货。
  5. 后台管理

    • 后端:管理员角色可以访问商品管理、订单管理、用户管理等功能。
    • 前端:管理界面提供商品、订单、用户管理的后台页面。

五、数据库设计

  • 用户表:用于存储用户信息。
  • 角色表:用于存储用户角色(如管理员、普通用户等)。
  • 商品表:用于存储商品信息。
  • 订单表:用于存储订单信息。
  • 订单项表:用于存储每个订单中的商品项。
  • 购物车表:用于存储用户的购物车商品。
  • 支付表:用于记录支付信息(与支付宝、微信等支付集成相关)。
  1. User (用户表)

    CREATE TABLE `user` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',`username` VARCHAR(100) NOT NULL UNIQUE COMMENT '用户名',`password` VARCHAR(255) NOT NULL COMMENT '用户密码',`email` VARCHAR(255) DEFAULT NULL COMMENT '邮箱',`phone` VARCHAR(15) DEFAULT NULL COMMENT '手机号',`address` TEXT DEFAULT NULL COMMENT '收货地址',`status` TINYINT(1) DEFAULT 1 COMMENT '状态 1-启用 0-禁用',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
    

  2. Role(角色表)

    CREATE TABLE `role` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '角色ID',`role_name` VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称',`description` VARCHAR(255) DEFAULT NULL COMMENT '角色描述',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
    
  3. user_role(用户角色关联表)

    CREATE TABLE `user_role` (`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',`role_id` BIGINT(20) NOT NULL COMMENT '角色ID',PRIMARY KEY (`user_id`, `role_id`),CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,CONSTRAINT `fk_role` FOREIGN KEY (`role_id`) REFERENCES `role`(`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
    
  4. product(商品表)

    CREATE TABLE `product` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '商品ID',`name` VARCHAR(255) NOT NULL COMMENT '商品名称',`description` TEXT DEFAULT NULL COMMENT '商品描述',`price` DECIMAL(10, 2) NOT NULL COMMENT '商品价格',`stock` INT(11) NOT NULL DEFAULT 0 COMMENT '商品库存',`category_id` BIGINT(20) DEFAULT NULL COMMENT '商品类别ID',`image_url` VARCHAR(255) DEFAULT NULL COMMENT '商品图片URL',`status` TINYINT(1) DEFAULT 1 COMMENT '商品状态 1-上架 0-下架',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
    
  5. order(订单表)

    CREATE TABLE `order` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',`total_price` DECIMAL(10, 2) NOT NULL COMMENT '订单总价',`status` ENUM('PENDING', 'PAID', 'SHIPPED', 'DELIVERED', 'CANCELLED') NOT NULL DEFAULT 'PENDING' COMMENT '订单状态',`shipping_address` TEXT NOT NULL COMMENT '收货地址',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`payment_method` VARCHAR(50) DEFAULT NULL COMMENT '支付方式',`payment_status` ENUM('PENDING', 'SUCCESS', 'FAILED') NOT NULL DEFAULT 'PENDING' COMMENT '支付状态',CONSTRAINT `fk_user_order` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
    
  6. order_item(订单项表)
    CREATE TABLE `order_item` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '订单项ID',`order_id` BIGINT(20) NOT NULL COMMENT '订单ID',`product_id` BIGINT(20) NOT NULL COMMENT '商品ID',`quantity` INT(11) NOT NULL DEFAULT 1 COMMENT '商品数量',`unit_price` DECIMAL(10, 2) NOT NULL COMMENT '商品单价',CONSTRAINT `fk_order` FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE,CONSTRAINT `fk_product` FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单项表';
    
  7. cart(购物车表)
    CREATE TABLE `cart` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '购物车ID',`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',`product_id` BIGINT(20) NOT NULL COMMENT '商品ID',`quantity` INT(11) NOT NULL DEFAULT 1 COMMENT '商品数量',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',CONSTRAINT `fk_user_cart` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE,CONSTRAINT `fk_product_cart` FOREIGN KEY (`product_id`) REFERENCES `product`(`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车表';
    
  8. payment(支付表)
    ​
    CREATE TABLE `payment` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '支付ID',`order_id` BIGINT(20) NOT NULL COMMENT '订单ID',`payment_method` ENUM('ALIPAY', 'WECHAT', 'CREDIT_CARD') NOT NULL COMMENT '支付方式',`payment_status` ENUM('PENDING', 'SUCCESS', 'FAILED') NOT NULL DEFAULT 'PENDING' COMMENT '支付状态',`payment_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '支付时间',`transaction_id` VARCHAR(255) DEFAULT NULL COMMENT '交易流水号',`amount` DECIMAL(10, 2) NOT NULL COMMENT '支付金额',CONSTRAINT `fk_order_payment` FOREIGN KEY (`order_id`) REFERENCES `order`(`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付表';​
  9. 商品类别表 category(可选)

    CREATE TABLE `category` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '类别ID',`name` VARCHAR(255) NOT NULL COMMENT '类别名称',`description` TEXT DEFAULT NULL COMMENT '类别描述',`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品类别表';
    
  10. 触发器(可选)

    在某些情况下,你可能需要一些触发器来自动更新库存或记录日志。

    DELIMITER $$CREATE TRIGGER update_stock_after_order_insert
    AFTER INSERT ON `order_item`
    FOR EACH ROW
    BEGINUPDATE `product`SET `stock` = `stock` - NEW.quantityWHERE `id` = NEW.product_id;
    END$$DELIMITER ;
    

六、后端实现

1. 设置Spring Boot项目

首先,创建一个Spring Boot项目,集成Spring Web, Spring Data JPA, Spring Security。

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- Spring Security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Thymeleaf for templates --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
</dependencies>

2. 数据库实体类

  • User.java
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;private String email;private String role;  // ROLE_USER, ROLE_ADMIN// getters and setters
}
  • Product.java                                                                                                                      
@Entity
public class Product {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String description;private double price;private int stock;// getters and setters
}

  • Cart.java
    @Entity
    public class Cart {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToOneprivate User user;@ManyToOneprivate Product product;private int quantity;// getters and setters
    }
    
  • Order.java
    @Entity
    public class Order {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToOneprivate User user;private double totalPrice;private String status;  // PENDING, COMPLETEDprivate String address;private LocalDateTime createTime;@OneToMany(mappedBy = "order")private List<OrderItem> orderItems;// getters and setters
    }
    
  • OrderItem.java
    @Entity
    public class OrderItem {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@ManyToOneprivate Order order;@ManyToOneprivate Product product;private int quantity;private double price;// getters and setters
    }
    

3. 创建Repository

@Repository
public interface UserRepository extends JpaRepository<User, Long> {Optional<User> findByUsername(String username);
}@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}@Repository
public interface CartRepository extends JpaRepository<Cart, Long> {List<Cart> findByUser(User user);
}@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {List<Order> findByUser(User user);
}

4. 创建Service层

  • UserService.java
    @Service
    public class UserService {@Autowiredprivate UserRepository userRepository;public User register(User user) {// 处理密码加密return userRepository.save(user);}public User login(String username, String password) {// 密码验证逻辑return userRepository.findByUsername(username).orElse(null);}
    }
    
  • ProductService.java
    @Service
    public class ProductService {@Autowiredprivate ProductRepository productRepository;public List<Product> getAllProducts() {return productRepository.findAll();}public Product getProduct(Long id) {return productRepository.findById(id).orElse(null);}public Product addProduct(Product product) {return productRepository.save(product);}
    }
    

5. 创建Controller层

  • UserController.java
    @RestController
    @RequestMapping("/api/user")
    public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")public ResponseEntity<User> register(@RequestBody User user) {return ResponseEntity.ok(userService.register(user));}@PostMapping("/login")public ResponseEntity<User> login(@RequestParam String username, @RequestParam String password) {User user = userService.login(username, password);if (user == null) {return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);}return ResponseEntity.ok(user);}
    }
    
  • ProductController.java
    @RestController
    @RequestMapping("/api/products")
    public class ProductController {@Autowiredprivate ProductService productService;@GetMappingpublic List<Product> getAllProducts() {return productService.getAllProducts();}@GetMapping("/{id}")public Product getProduct(@PathVariable Long id) {return productService.getProduct(id);}
    }
    
  • CartController.java
    @RestController
    @RequestMapping("/api/cart")
    public class CartController {@Autowiredprivate CartRepository cartRepository;@PostMapping("/add")public ResponseEntity<Cart> addToCart(@RequestBody Cart cart) {return ResponseEntity.ok(cartRepository.save(cart));}@GetMapping("/list")public List<Cart> getCartItems(@RequestParam Long userId) {return cartRepository.findByUser(new User(userId));}
    }
    

七、前端实现(Angular)

1、创建 Angular 服务层  

auth.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../environments/environment';@Injectable({providedIn: 'root'
})
export class AuthService {private baseUrl = `${environment.apiBaseUrl}/api/user`;constructor(private http: HttpClient) {}register(user: any): Observable<any> {return this.http.post(`${this.baseUrl}/register`, user);}getUserByUsername(username: string): Observable<any> {return this.http.get(`${this.baseUrl}/${username}`);}
}

2、创建 Angular 路由配置

app-routing.module.ts 中配置路由,指向用户注册和商品展示页面。

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { RegisterComponent } from './register/register.component';
import { ProductListComponent } from './product-list/product-list.component';const routes: Routes = [{ path: 'register', component: RegisterComponent },{ path: 'products', component: ProductListComponent },{ path: '', redirectTo: '/register', pathMatch: 'full' }
];@NgModule({imports: [RouterModule.forRoot(routes)],exports: [RouterModule]
})
export class AppRoutingModule {}

3、配置文件

确保在前端项目中配置了 API 基本路径和其他环境配置。比如,在 environments/environment.ts 中配置:

export const environment = {production: false,apiBaseUrl: 'http://localhost:8080'
};

4、用户登录与注册

  • 使用Angular表单来处理用户输入。
    register.component.tsimport { Component } from '@angular/core';
    import { AuthService } from '../services/auth.service';@Component({selector: 'app-register',templateUrl: './register.component.html',styleUrls: ['./register.component.css']
    })
    export class RegisterComponent {user = {username: '',password: '',email: '',phone: '',address: ''};constructor(private authService: AuthService) {}register() {this.authService.register(this.user).subscribe(response => {console.log('User registered successfully!', response);}, error => {console.error('Error registering user', error);});}
    }
    

  • 与后端的/api/user/register/api/user/login接口交互。

5、商品浏览与添加购物车

  • 显示商品列表(调用/api/products接口)。product.service.ts
    import { Injectable } from '@angular/core';
    import { HttpClient } from '@angular/common/http';
    import { Observable } from 'rxjs';
    import { environment } from '../environments/environment';@Injectable({providedIn: 'root'
    })
    export class ProductService {private baseUrl = `${environment.apiBaseUrl}/api/products`;constructor(private http: HttpClient) {}addProduct(product: any): Observable<any> {return this.http.post(`${this.baseUrl}/add`, product);}getProduct(id: number): Observable<any> {return this.http.get(`${this.baseUrl}/${id}`);}
    }
    

    product-list.component.ts

    import { Component, OnInit } from '@angular/core';
    import { ProductService } from '../services/product.service';@Component({selector: 'app-product-list',templateUrl: './product-list.component.html',styleUrls: ['./product-list.component.css']
    })
    export class ProductListComponent implements OnInit {products: any[] = [];constructor(private productService: ProductService) {}ngOnInit(): void {this.productService.getProduct(1).subscribe(data => {this.products = [data];});}
    }
    

  • 添加商品到购物车(调用/api/cart/add接口)。

6、订单管理与收货地址

  • 用户下单,提交购物车中的商品到订单接口。
  • 用户管理自己的订单和收货地址。

7、后台管理系统

  • 管理员可以增、删、改商品,查看所有用户和订单。

八、部署与测试

  1. 配置Spring Boot与数据库连接。
  2. 在MySQL中创建数据库并运行Spring Boot应用。
  3. 使用Angular构建前端并与后端API交互。

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

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

相关文章

鱼眼相机模型-MEI

参考文献&#xff1a; Single View Point Omnidirectional Camera Calibration from Planar Grids 1. 相机模型如下&#xff1a; // 相机坐标系下的点投影到畸变图像// 输入&#xff1a;相机坐标系点坐标cam 输出&#xff1a; 畸变图像素点坐标disPtvoid FisheyeCamAdapter::…

Spring Boot 实战:基于 Validation 注解实现分层数据校验与校验异常拦截器统一返回处理

1. 概述 本文介绍了在spring boot框架下&#xff0c;使用validation数据校验注解&#xff0c;针对不同请求链接的前端传参数据&#xff0c;进行分层视图对象的校验&#xff0c;并通过配置全局异常处理器捕获传参校验失败异常&#xff0c;自动返回校验出错的异常数据。 2. 依赖…

20241125复盘日记

昨日最票&#xff1a; 南京化纤 滨海能源 广博股份 日播时尚 众源新材 返利科技 六国化工 丰华股份 威领股份 凯撒旅业 华扬联众 泰坦股份 高乐股份高均线选股&#xff1a; 理邦仪器高乐股份日播时尚领湃科技威领股份资金最多的票&#xff1a; 资金攻击最多的票&#xff1a; …

STM32WB55RG开发(5)----监测STM32WB连接状态

STM32WB55RG开发----5.生成 BLE 程序连接手机APP 概述硬件准备视频教学样品申请源码下载参考程序选择芯片型号配置时钟源配置时钟树RTC时钟配置RF wakeup时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_A…

游戏引擎学习第23天

实时代码编辑功能的回顾 当前实现的实时代码编辑功能已经取得了显著的成功&#xff0c;表现出强大的性能和即时反馈能力。该功能允许开发者在修改代码后几乎立即看到变化在运行中的程序中体现出来&#xff0c;极大提升了开发效率。尽管目前的演示内容较为简单&#xff0c;呈现…

ARM CCA机密计算安全模型之概述

安全之安全(security)博客目录导读 目录 1、CCA的要素 2、CCA平台 2.1 CCA 系统安全域 2.2 监控安全域 2.3 领域管理安全域 3、与系统平台安全服务的关系 3.1 安全配置 3.2 平台认证 1、CCA的要素 高层次的 CCA 架构如下图中概述。 在硬件层面,CCA 系统安全域包括可…

2024 java大厂面试复习总结(一)(持续更新)

10年java程序员&#xff0c;2024年正好35岁&#xff0c;2024年11月公司裁员&#xff0c;记录自己找工作时候复习的一些要点。 java基础 hashCode()与equals()的相关规定 如果两个对象相等&#xff0c;则hashcode一定也是相同的两个对象相等&#xff0c;对两个对象分别调用eq…

【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境

目录 使用Anaconda创建R语言虚拟环境1. 安装Anaconda2. 创建R语言虚拟环境 Pycharm配置R语言1. 安装Pycharm2. R Language for IntelliJ插件 参考 使用Anaconda创建R语言虚拟环境 1. 安装Anaconda Anaconda的安装可参见另一博客-【Python环境管理工具】Anaconda安装及使用教程…

系统设计时应时刻考虑设计模式基础原则

目录 :star2:单一职责原则 (Single Responsibility Principle, SRP):star2:开放-封闭原则 (Open-Closed Principle, OCP):star2:依赖倒转原则 (Dependency Inversion Principle, DIP):star2:里氏代换原则 (Liskov Substitution Principle, LSP):star2:迪米特原则 (Law of Demet…

Spring 中的 ProxyFactory 创建代理对象

一、jdk 动态代理 和 cglib动态代理 简单介绍 1.jdk动态代理 public interface AService {public String serviceA(String param);public String serviceAA(String param); } public interface BService {public String serviceB(String param);public String serviceBB(Str…

FreeRTOS之链表源码分析

文章目录 前言一、结构体1、链表List_t2、链表项xLIST_ITEM3、头节点xMINI_LIST_ITEM4、链表示意图 二、函数分析1、初始化函数vListInitialise2、初始化链表项vListInitialiseItem3、链表尾部添加节点vListInsertEnd4、按序插入节点vListInsert5、删除节点uxListRemove 总结 前…

【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…

Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程

clc clear% 定义输入变量 x linspace(0,2,10000);% 定义网络的层参数 inputSize 1; layers [featureInputLayer(inputSize,Normalization"none")fullyConnectedLayer(10)sigmoidLayerfullyConnectedLayer(1)sigmoidLayer]; % 创建网络 net dlnetwork(layers);% 训…

51单片机-独立按键与数码管联动

独立键盘和矩阵键盘检测原理及实现 键盘的分类&#xff1a;编码键盘和非编码键盘 键盘上闭合键的识别由专用的硬件编码器实现&#xff0c;并产生键编码号或键值的称为编码键盘&#xff0c;如&#xff1a;计算机键盘。靠软件编程识别的称为非编码键盘&#xff1b;在单片机组成…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的&#xff0c;最近优化下无线网络&#xff0c;说新的设备用华为的&#xff0c;然后我是直到要部署的当天才知道用华为设备的&#xff0c;就很无语了&#xff0c;一点准备没有&#xff0c;以下为这次的实际操作记录吧&…

浅谈网络 | 传输层之TCP协议

目录 TCP 包头格式TCP 的三次握手TCP 的四次挥手TCP 的可靠性与"靠谱"的哲学TCP流量控制TCP拥塞控制 上一章我们提到&#xff0c;UDP 就像我们小时候一样简单天真&#xff0c;它相信“网之初&#xff0c;性本善&#xff0c;不丢包&#xff0c;不乱序”&#xff0c;因…

MongoDB相关问题

视频教程 【GeekHour】20分钟掌握MongoDB Complete MongoDB Tutorial by Net Ninja MongoDB开机后调用缓慢的原因及解决方法 问题分析&#xff1a; MongoDB开机后调用缓慢&#xff0c;通常是由于以下原因导致&#xff1a; 索引重建&#xff1a; MongoDB在启动时会重建索引…

嵌入式驱动开发详解3(pinctrl和gpio子系统)

文章目录 前言pinctrl子系统pin引脚配置pinctrl驱动详解 gpio子系统gpio属性配置gpio子系统驱动gpio子系统API函数与gpio子系统相关的of函数 pinctrl和gpio子系统的使用设备树配置驱动层部分用户层部分 前言 如果不用pinctrl和gpio子系统的话&#xff0c;我们开发驱动时需要先…

[模版总结] - 树的基本算法4 -最近公共祖先 LCA

什么是最近公共祖先LCA LCA&#xff1a;在一个树中&#xff0c;距离两个节点p,q最近可以是其本身并且同时包含这两个子节点的节点 题目连接 Leetcode 236 - LCA Leetcode 1644 - LCA II Leetcode 1650 - LCAIII Leetcode 1123 - LCA of Deepest leaves 基本思路 Leetcode 23…

永磁同步电机末端振动抑制(输入整形)

文章目录 1、前言2、双惯量系统3、输入整形3.1 ZV整形器3.2 ZVD整形器3.3 EI整形器 4、伺服系统位置环控制模型5、仿真5.1 快速性分析5.2 鲁棒性分析 参考 1、前言 什么是振动抑制&#xff1f;对于一个需要精确定位的系统&#xff0c;比如机械臂、塔吊、码头集装箱等&#xff…