SSMP整合案例

黑马程序员Spring Boot2

文章目录

  • 1、创建项目
    • 1.1 新建项目
    • 1.2 整合 MyBatis Plus
  • 2、创建表以及对应的实体类
    • 2.1 创建表
    • 2.2 创建实体类
      • 2.2.1 引入lombok,简化实体类开发
      • 2.2.2 开发实体类
  • 3、数据层开发
    • 3.1 手动导入两个坐标
    • 3.2 配置数据源与MyBatisPlus对应的配置
    • 3.3 开发Dao接口(继承BaseMapper)
    • 3.4 制作测试类测试Dao功能是否有效
    • 3.5 遇到问题
    • 3.5 开启MyBatis Plus的日志
    • 3.6 分页功能的视线
    • 3.7 按照条件查询
  • 4、业务层开发
    • 4.1 标准开发
    • 4.2 快速开发方案
  • 5、表现层开发
    • 5.1 表现层代码
    • 5.2 表现层数据一致性处理
  • 6、前后端协议联调

1、创建项目

1.1 新建项目

在这里插入图片描述
在这里插入图片描述

1.2 整合 MyBatis Plus

  1. 访问 https://mvnrepository.com/ 搜索 mybatis plus 选择第一个,选择一个版本,复制其坐标,粘贴到pom.xml,刷新maven

在这里插入图片描述

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.7</version>
        </dependency>
  1. 修改配置文件为yml格式

2、创建表以及对应的实体类

2.1 创建表

# 创建数据库
create database ssm;
# 使用数据库
use ssm;
# 创建表book
create table book(
    id int primary key , # 书id,主键
    type varchar(32), # 类型
    name varchar(32), # 书名
    description varchar(256) # 描述
);
# 查询测试
select * from book;
# 向表中插入16条数据
insert into book value (1,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (2,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (3,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (4,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (5,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (6,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (7,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (8,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (9,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (10,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (11,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (12,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (13,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (14,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (15,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕'),
        (16,'计算机理论','Spring实战 第5版','Spring入门经典教程,深入理解Spring原理技术内幕');

2.2 创建实体类

2.2.1 引入lombok,简化实体类开发

  1. 在 pom.xml 中引入 lombok 的坐标
    在这里插入图片描述
<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok-maven-plugin</artifactId>
            <version>1.18.20.0</version>
            <scope>provided</scope>
        </dependency>

2.2.2 开发实体类

  1. 新建pojo 包,新建Book 类
package com.itheima.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data // get/set方法、toString方法、hshCode方法、equals方法
@AllArgsConstructor //全参构造函数
@NoArgsConstructor // 无参构造函数
public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;
}

3、数据层开发

  • 技术实现方案
    • MyBatisPlus
    • Druid

3.1 手动导入两个坐标

在这里插入图片描述

 <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.23</version>
        </dependency>

3.2 配置数据源与MyBatisPlus对应的配置

在这里插入图片描述

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbcmysql://localhost:3306/mytails
      username: root
      password: 123456

3.3 开发Dao接口(继承BaseMapper)

package com.itheima.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itheima.pojo.Book;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface BookDao extends BaseMapper<Book> {
}

3.4 制作测试类测试Dao功能是否有效

package com.itheima.dao;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTest {
    @Autowired
    BookDao bookDao;
    @Test
    public void getById(){
        System.out.println(bookDao.selectById(1));
    }
}

3.5 遇到问题

  1. 报错信息如下
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookDao' defined in file [E:\IDEA\IDEA2023-zhuanye\project\heima\SpringBoot2\springboot-ssmp\springboot-ssmp\target\classes\com\itheima\dao\BookDao.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.ibatis.session.Configuration.parsePendingMethods(Z)V
  1. 解决方法
    • mybatis plus 的版本太高了,降低一下版本即可

3.5 开启MyBatis Plus的日志

  • 为方便调试可以开启MyBatis Plus的日志
    在这里插入图片描述
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.6 分页功能的视线

  1. 分页操作依赖MyBatisPlus分页拦截器实现功能
    • 创建一个包config ,在包下创建MPConfig类,类中代码如下

在这里插入图片描述

  • 分页操作师在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现
package com.itheima.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        // 定义拦截器
        MybatisPlusInterceptor interceptor =new MybatisPlusInterceptor();
        // 添加具体拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

  1. 使用IPage封装分页数据
  • 分页查询代码
    在这里插入图片描述
@Test
    void testGetPage(){
        IPage page=new Page(2,5);
        bookDao.selectPage(page,null);
    }
  • 分页操作需要设定分页对象IPage
  • IPage对象封装了分页操作中的所有数据
    • 数据
    • 当前页码值
    • 每页数据总量
    • 最大页码值
    • 数据总量

3.7 按照条件查询

 @Test
    void testGetBy(){
        String name="Spring";
        LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<Book>();
        lqw.like(name!=null,Book::getName,name);
        bookDao.selectList(lqw);
    }

4、业务层开发

4.1 标准开发

  1. 新建包service,在该包下创建BookService接口
package com.itheima.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.pojo.Book;

import java.util.List;

public interface BookService {
    boolean save(Book book);// 插入数据
    boolean delete(Integer id);// 根据id删除
    boolean update(Book book);// 更新数据
    Book getByAd(Integer id);// 根据id查询单个用户
    List<Book> getAll();// 查询所有数据
    IPage<Book> getByPage(int currentPage,int pageSize);// 查询某一页信息
}

  1. 实现类定义
package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.dao.BookDao;
import com.itheima.pojo.Book;
import com.itheima.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    BookDao bookDao;

    /**
     * 插入数据
     * @param book
     * @return
     */
    @Override
    public boolean save(Book book) {
//        book.setId(17);
//        book.setName("测试数据1");
//        book.setType("测试数据1");
//        book.setDescription("测试数据1");
        return bookDao.insert(book)>0;
    }

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    @Override
    public boolean delete(Integer id) {
        return bookDao.deleteById(id)>0;
    }

    /**
     * 更新数据
     * @param book
     * @return
     */
    @Override
    public boolean update(Book book) {
        book.setId(17);
        book.setDescription("我是更新之后的数据");
        return bookDao.updateById(book)>0;
    }

    /**
     * 根据id查询单条数据
     * @param id
     * @return
     */
    @Override
    public Book getById(Integer id) {
        return bookDao.selectById(id);
    }

    /**
     * 查询所有数据
     * @return
     */
    @Override
    public List<Book> getAll() {
        return bookDao.selectList(null);
    }

    /**
     * 查询某一页的数据
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public IPage<Book> getByPage(int currentPage, int pageSize) {
        IPage<Book> page=new Page(currentPage,pageSize);
        return bookDao.selectPage(page,null);
    }
}

  1. 测试类定义
package com.itheima.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.pojo.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookServiceTest {
    @Autowired
    BookService bookService;
    /**
     * 根据id查询单个
     */
    @Test
    public void getById(){
        System.out.println(bookService.getById(1));
    }

    /**
     * 新增数据
     */
    @Test
    public void testInsert(){
        Book book=new Book(17,"计算机理论","Spring实战 第5版","Spring入门经典教程 深入理解Spring 原理");
        bookService.save(book);
    }

    /**
     * 根据id删除数据
     */
    @Test
    public void testDelete(){
        bookService.delete(17);

    }

    /**
     * 更新数据
     */
    @Test
    public void testUpdate(){
        Book book=bookService.getById(16);
        book.setName("Spring实战");
        bookService.update(book);

    }

    /**
     * 查询所有数据
     */
    @Test
    public void testGetAll(){
        System.out.println(bookService.getAll());
    }

    /**
     * 查询某一页数据
     */
    @Test
    void testGetPage(){
        bookService.getByPage(2, 5);
    }
}

4.2 快速开发方案

  • 使用MyBatisPlus提供有业务层通用接口与业务层通用实现类
  • 在通用类基础上做功能重载或功能追加
  • 注意重载是不要覆盖原始操作,避免原始提供的功能丢失
  1. 接口定义
package com.itheima.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.pojo.Book;

public interface IBookService extends IService<Book> {
    // 可追加操作【可谁家大的操作与原始操作通过名称区分,功能类似】
}

  1. 实现类定义
package com.itheima.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.dao.BookDao;
import com.itheima.pojo.Book;
import com.itheima.service.IBookService;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl2 extends ServiceImpl<BookDao, Book> implements IBookService {
}

  1. 测试
package com.itheima.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.pojo.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookServiceTest2 {
    @Autowired
    IBookService bookService;
    /**
     * 根据id查询单个
     */
    @Test
    public void getById(){
        System.out.println(bookService.getById(1));
    }

    /**
     * 新增数据
     */
    @Test
    public void testInsert(){
        Book book=new Book(17,"计算机理论","Spring实战 第5版","Spring入门经典教程 深入理解Spring 原理");
        bookService.save(book);
    }

    /**
     * 根据id删除数据
     */
    @Test
    public void testDelete(){
        bookService.removeById(17);

    }

    /**
     * 更新数据
     */
    @Test
    public void testUpdate(){
        Book book=bookService.getById(16);
        book.setName("Spring实战");
        bookService.updateById(book);

    }

    /**
     * 查询所有数据
     */
    @Test
    public void testGetAll(){
        System.out.println(bookService.list());
    }

    /**
     * 查询某一页数据
     */
    @Test
    void testGetPage(){
        IPage<Book> page=new Page(2,5);
        bookService.page(page);
    }
}

5、表现层开发

  1. 基于Restful进行表现层接口开发
    • 新增:POST
    • 删除:DELETE
    • 修改:PUT
    • 查询:GET
  2. 接收参数
    • 实体数据:@RequestBody
    • 路径变量:@PathVariable

5.1 表现层代码

  1. 新建controller包,之后再该包下新建BookController类
package com.itheima.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.pojo.Book;
import com.itheima.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    IBookService bookService;

    /**
     * 查询全部数据
     * @return
     */
    @GetMapping
    public List<Book> getAll(){
        return bookService.list();
    }

    /**
     * 插入一条数据
     * @param book
     * @return
     */
    @PostMapping
    public Boolean save(@RequestBody Book book){
        return bookService.save(book);
    }

    /**
     * 更新数据
     * @param book
     * @return
     */
    @PutMapping
    public Boolean update(@RequestBody Book book){
        return bookService.updateById(book);
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Boolean delete(@PathVariable Integer id){
        return bookService.removeById(id);
    }

    /**
     * 分页查询
     * @param currentPage
     * @param pageSize
     * @return
     */
    @GetMapping("/{currentPage}/{pageSize}")
    public IPage<Book> getByPage(@PathVariable int currentPage,@PathVariable int pageSize){
        return bookService.getPage(currentPage,pageSize);
    }
}

5.2 表现层数据一致性处理

  1. 设计统一的返回值结果类型便于前端开发读取数据
  2. 返回值结构类型可以根据需求自行设定,没有固定格式
  3. 返回值结果类型类似于后端与前端进行数据格式统一,也称为前后端数据协议
  4. 统一返回结果例子
package com.itheima;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class R {
    private Boolean flag;
    private Object data;

}

6、前后端协议联调

  • 前后后端分离结构设计中页面归属前端服务器
  • 单体工程中页面放置在resources目录下的static目录中
    在这里插入图片描述

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

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

相关文章

创建第一个Springboot项目(环境准备、环境存在的问题、启动时存在的问题、启动的方式)

一、环境准备 专业版创建springboot&#xff0c;直接有一个选项可以选择 社区版&#xff0c;需要下载一个spring的插件 不要直接点 install 因为这个插件是付费的&#xff0c;直接点安装只有30天使用期限 在里面找免费版本的下载 然后安装 安装完成后&#xff0c;这个插件名会变…

记一次生产事故,来来回回搞了一个月

&#x1f345;我是小宋&#xff0c;关注我&#xff0c;带你轻松过面试 读源码。提升简历亮点&#xff08;14个demo&#xff09; &#x1f30f;号&#xff1a;tutou123com。拉你进专属群。 记一次生产事故&#xff0c;来来回回搞了一个月 背景 我们的主要业务是台湾省的一个小…

免费分享:2014-2021年OSM中国POI数据(附下载方法)

OpenStreetMap&#xff08;OSM&#xff09;是一个全球性的开源协作地图项目&#xff0c;允许任何人编辑和分享地理信息&#xff0c;旨在创建自由、准确且可广泛使用的世界地图。POI是“Point of Interest”的缩写&#xff0c;意为“兴趣点”。 OSM POI矢量数据是OpenStreetMap项…

通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器。通过对比三个算法可知&#xff0c;采用滑模控制算法&#xff0c;其具有最快的收敛性能&#xff0c;较强的鲁棒性&…

安装idea后配置的全局配置

1、打开IDEA应用&#xff1a;Customize→All settings...&#xff0c;如果启动IDEA后&#xff0c;默认打开的是之前的项目&#xff0c;可以关闭当前项目&#xff1a;File→Close Project&#xff0c;就退到全局配置界面了。 2、打开全局配置界面&#xff1a;Editor→File Encod…

zustand 状态管理库的使用 结合TS

zustand 是一个用于React应用的简单、快速且零依赖的状态管理库。它使用简单的钩子&#xff08;hooks&#xff09;API来创建全局状态&#xff0c;使得在组件之间共享状态变得容易。 React学习Day10 基本用法 安装&#xff1a;首先&#xff0c;你需要安装zustand库。 npm insta…

Java阻塞队列:DelayQueue

Java阻塞队列&#xff1a;DelayQueue 在Java的并发编程中&#xff0c;阻塞队列是一种非常有用的数据结构&#xff0c;它不仅提供了线程安全的队列操作&#xff0c;还在必要时会自动阻塞获取操作&#xff0c;直到队列变得不为空。本文将重点介绍一种特殊的阻塞队列——DelayQue…

亲测:无影云电脑免费三个月已经缩短为1个月

亲测&#xff1a;无影云电脑免费三个月已经缩短为1个月&#xff0c;大家不要再找3个月的无影云电脑&#xff0c;已经没有了&#xff0c;目前最新消息是1个月。以前可以领3个月&#xff0c;现在只能领1个月&#xff0c;在阿里云免费中心 https://free.aliyun.com/ 大家自己看吧&…

中国各区域人口密度可视化图

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247674303&idx1&sn830304f80a0429406c4a5e38dc7750ec&chksmfa777682cd00ff9434e4660bb52ab2bf19913b6732083de061664401a9ac0fa46581cd9e5e86&token1445576002&langzh_CN&scene21#we…

StarkNet System Architecture 系统架构

文章目录 Starknet架构排序器,证明器和节点、验证者、Starnet Core排序器 Sequencer证明器 Prover节点验证者StarkNet Core工作原理TransactionsStarknet架构 原文链接: https://david-barreto.com/starknets-architecture-review/#more-4602 StarkNet 有五个组成部分。分别…

Stable Diffusion 秋叶整合包v4.7 :解压即用,快速入门AI绘画

Stable Diffusion秋叶整合包&#xff0c;超简单一键安装Stable Diffusion&#xff0c;无任何使用门槛&#xff0c;完全免费使用&#xff0c;支持Nvdia全系列显卡&#xff0c;来自B站up秋葉aaaki&#xff0c;近期发布了Stable Diffusion整合包v4版本&#xff0c;一键在本地部署S…

划分子网和构造超网的学习

子网掩码长度&#xff1d;32位 某位&#xff1d;1&#xff1a;IP地址中的对应位为网络号和子网号 某位&#xff1d;0&#xff1a;IP地址中的对应位为主机号 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。 使用子网掩码(subnet mask)可…

leetcode第709题:转换成小写字母

注意字符不仅有26个英文字母&#xff0c;还有特殊字符。特殊字符的话&#xff0c;原样输出。 public class Solution {public char toLowChar(char c){if(c>a&&c<z){return c;}else if(c>A&&c<Z){int n(int)c32;return (char)n;}return c;}publi…

cuda thread和block值怎么配置(个人经验)

1.查询自己的GPU算力&#xff1b; 2.对应算力查找资源限制&#xff1b; 详见CUDA_C_Programming_Guide.pdf&#xff0c;Chapter 19. Compute Capabilities 3.例如算力8.7&#xff0c;关注以下几个值&#xff1a; warp size32&#xff1b; Maximum number of resident warps…

注意力机制新突破!21种创新融合思路汇总!让技术持续飞跃!

CV和注意力机制都是当下深度学习中不可或缺的技术&#xff0c;而【CV注意力机制】更是当前学术研究的热点领域之一&#xff0c;这种结合的方法可以使得注意力机制使模型能够捕捉到图像中的关键信息&#xff0c;从而提供更丰富的特征表示&#xff0c;这对于图像分类、目标检测和…

Centos7 调整分区大小

在安装完centos系统以后&#xff0c;系统的分区大小往往不是自己预期的大小&#xff0c;这个时候就需要我们自己手动来调整分区大小&#xff0c;在centos7 里面&#xff0c;手动调整分区大小的方法如下 1、查看目前分区的情况 从上面的查询结果我们可以看出&#xff0c;根目录…

护眼灯是不是智商税?带你轻松了解选择护眼台灯的标准

在当今时代&#xff0c;我们观察到一个不容忽视的现象&#xff1a;孩子们的视力问题日益增多&#xff0c;这无疑向众多家长发出了警示。它提醒着我们&#xff0c;除了追求学术成就之外&#xff0c;孩子们的视觉健康同样重要&#xff0c;不容忽视。因此&#xff0c;选择一款适合…

刷代码随想录有感(108):动态规划——目标和

题干&#xff1a; 代码&#xff1a; class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int sum 0;for(int i : nums) sum i;if(abs(target) > sum)return 0;if((sum target) % 2 ! 0)return 0;int bagweight (sum target) /…

qmt量化交易策略小白学习笔记第37期【qmt编程之指数数据--如何获取迅投商品市场指数行情数据】

qmt编程之获取商品市场指数数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取迅投商…

yolov8划线计数脚本-可用于统计人流车流

支持自定义线的位置&#xff1b; 支持使用自己训练的模型和检测类别&#xff1b; "YOLOv8划线计数脚本" 是一个基于YOLOv8&#xff08;You Only Look Once version 8&#xff09;对象检测模型的计算机视觉应用项目&#xff0c;主要用于实现人流和车流的自动统计。该…