Mybatis-plus 使用

news2024/11/17 13:38:11

1. 注解使用

        mybatis-plus提供了 ·@TableName·, @TableId, @TableField, @TableLogic 四种注解,其含义分别为:

 @TableName

         @TableName("SPF_Require_Vehicle")    用于声明当前class所对应数据库中的表,如果class的名字和表的名字完全相同,则不需要添加该注解,如果不一样,则需要用该注解进行声明。

 @TableId

        @TableId(value = "SPF_UID", type = IdType.AUTO)     用于声明主键, value指定数据库中主键的名称,type为主键的生成类型,支持 Assign(雪花算法,java字段需要是Long)、Auto(数据库字段需要声明为auto_increment), uuid

  @TableField

        @TableField("SPF_Name")  用于声明当前字段对应的表中的字段

  @TableLogic

        @TableLogic(value = "0", delval = "1")   用于软删除,value是默认值,delval表示软删除后的值。

@TableName("SPF_Require_Vehicle")
@Data
public class Employee {
    /**
     * 指定主键名称为SPF_uid, 类型为自增,即数据库的字段必须是auto_increment
     */
    @TableId(value = "SPF_UID", type = IdType.AUTO)
    private Long id;

    /**
     * 指定数据库中对应的字段是 Part_PartSap
     */
    @TableField("Part_PartSap")
    private String partSap;

    @TableField("Part_PlateSap")
    private String plateSap;

    @TableField("SPF_Name")
    private String name;

    /**
     * 逻辑删除
     */
    @TableLogic(value = "0", delval = "1")
    @TableField("IsActvie")
    private Boolean active;
}

@EnumValue

        代码简洁性考虑:许多时候需要用到Enum,例如0表示男1表示女、0表示关闭1表示打开,and so on

  1.          在数据库表中增加字段gender: 0表示男,1表示女
  2.           定义枚举类, @EnumValue注解表示该字段是向数据库中插入的值,@JsonValue表示读取的时候对外展示的值        
@Getter
public enum SexEnum {
    SEX_MALE(0, "男"),
    SEX_FEMALE(1, "女");

    /**
     * 表示当前字段是执行insert时向数据库中插入的字段
     */
    @EnumValue
    private int sexVal;

    /**
     * 表示从数据库读取的时候对外显示的值
     */
    @JsonValue
    private String sexName;

    SexEnum(int sexVal, String sexName) {
        this.sexVal = sexVal;
        this.sexName = sexName;
    }

    /**
     * 配合 @JsonValue使用
     * @return 返回展示的值
     */
    @Override
    public String toString() {
        return this.sexName;
    }
}

        3.  使用处

                 

                

         插入的值为枚举注释的值

        读取的是 @JsonValue注释的值

         

2. IService使用

2.1 批量插入

boolean saveBatch(Collection<T> entityList, int batchSize);
@Test
    public void baseBatchInsertTest() {
        List<Employee> list = new ArrayList<>();
        for (int i = 20; i < 30; i++) {
            Employee employee = new Employee();
            employee.setName("zhagnsan" + i);
            employee.setPartSap("123425-" + i);
            employee.setPlateSap("312342-" + i);
            list.add(employee);
        }
        // 批量插入,service提供了两个函数,可以带第二个参数,也可以不带,不带的情况下默认是1000
        // 批量插入实际也是一条一条的插入,不同的是底层启动了同一个session,插入完成后关闭,不需要每次都开启关闭
        this.service.saveBatch(list, 10);
    }

2.2 批量插入修改

        如果主键Id已经在表中存在则修改,如果不存在则插入一条新数据

 // 第二个参数选填,默认是1000

boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
@Test
    public void testBatchInsertOrUpdate() {
        List<Employee> list = new ArrayList<>();
        Employee e1 = new Employee();
        // 1L已经存在,会指定update
        e1.setId(1L);
        // 只添加了一个字段,也就是只修改一个字段
        e1.setName("车轱辘");
        Employee e2 = new Employee();
        // id在表中不存在,则新增
        e2.setId(50L);
        e2.setName("车顶");
        e2.setPartSap("123142314-00");
        e2.setPlateSap("423414-09");
        list.add(e1);
        list.add(e2);
        this.service.saveOrUpdateBatch(list,2);
    }

2.2 单个插入修改

       // 如果id存在则修改,否则插入

boolean saveOrUpdate(T entity);

2.3 单个删除

default boolean removeById(Serializable id)
default boolean removeById(T entity)
@Test
    public void testRemoveSingle01() {
        /**
         * id如果存在则删除,返回ture,否则返回false
         */
        boolean b = this.service.removeById(9);
        System.out.println("b:" + b);
    }


/*
* 有的时候,前端传过来的是一个类,此时可以直接调用该函数删除
*/
@Test
    public void testRemoveSignle02() {
        Employee employee = new Employee();
        employee.setId(8L);
        this.service.removeById(employee);
    }

2.4 有条件删除 

        实际中很多情况并不是根据Id进行删除而是根据实际需要进行删除, service也提供了该功能

removeByMap
default boolean removeByMap(Map<String, Object> columnMap)

        

/*
* 下面代码执行的语句如下
* UPDATE SPF_Require_Vehicle SET IsActvie=1 WHERE Part_PlateSap = ? AND Part_PartSap = ? AND IsActvie=0
*/
@Test
    public void testRemoveByMap() {
        Map<String, Object> map = new HashMap<>();
        map.put("Part_PartSap", "123425-0");
        map.put("Part_PlateSap", "312342-0");
        this.service.removeByMap(map);
    }
remove(可根据条件批量删除)

 也可以根据wrapper进行删除,删除的时候使用的是QueryWrapper, Wrapper的用法有很多种,此处只展示in的用法,其他用法下文进行介绍

default boolean remove(Wrapper<T> queryWrapper)
@Test
    public void testRemove03() {
        QueryWrapper<Employee> wrapper = new QueryWrapper<>();
        List<Long> list = new ArrayList<>();
        list.add(2L);
        list.add(3L);
        list.add(4L);
        wrapper.in(list != null && !list.isEmpty(), "SPF_UID", list);
        /**
         * UPDATE SPF_Require_Vehicle SET IsActvie=1 WHERE IsActvie=0 AND (SPF_UID IN (?,?,?))
         */
        this.service.remove(wrapper);
    }

2.5 批量删除

根据主键批量删除

removeByIds
default boolean removeByIds(Collection<?> list)
@Test
    public void testRemoveByIds() {
        List<Long> list = new ArrayList<>();
        list.add(2L);
        list.add(3L);
        list.add(5L);
        /**
         * 根据Ids批量删除
         * UPDATE SPF_Require_Vehicle SET IsActvie=1 WHERE SPF_UID IN ( ? , ? , ? ) AND IsActvie=0
         */
        this.service.removeByIds(list);
    }
removeBatchByIds

采用jdbc批量删除,底层使用for循环逐个删除,这点是和上面函数的区别

default boolean removeBatchByIds(Collection<?> list, int batchSize)
@Test
    public void testremoveBatchByIds() {
        List<Long> list = new ArrayList<>();
        list.add(2L);
        list.add(3L);
        list.add(5L);
        /**
         * UPDATE SPF_Require_Vehicle SET IsActvie=1 WHERE SPF_UID=? AND IsActvie=0
         */
        this.service.removeBatchByIds(list, list.size());
    }

2.6 单个修改:根据Id修改

default boolean updateById(T entity)
@Test
    public void testupdateById() {
        Employee employee = new Employee();
        employee.setId(8L);
        employee.setName("doris");
        /**
         * UPDATE SPF_Require_Vehicle SET SPF_Name=? WHERE SPF_UID=? AND IsActvie=0
         */
        this.service.updateById(employee);
    }

2.7 有条件修改:根据wrapper修改

default boolean update(Wrapper<T> updateWrapper)
@Test
    public void testupdate() {
        Integer minId = 9;
        Integer maxId = 14;
        String name = "doris";
        String nName = "wangshun";
        LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>();
        wrapper.gt(minId != null, Employee::getId, minId)
                .lt(maxId != null, Employee::getId, maxId)
                .or()
                .like(name != null && !name.isEmpty(), Employee::getName, name);
        wrapper.set(nName != null && !nName.isEmpty(), Employee::getName, nName);
        /**
         * UPDATE SPF_Require_Vehicle SET SPF_Name=? WHERE IsActvie=0 AND (SPF_UID > ? AND SPF_UID < ? OR SPF_Name LIKE ?)
         */
        this.service.update(wrapper);
    }

2.8 批量修改:根据Id修改

这个方法很使用,实际工作中,都是根据前端传过来的结构体进行修改

boolean updateBatchById(Collection<T> entityList, int batchSize)
@Test
    public void testupdateBatchById() {
        List<Employee> list = new ArrayList<>();
        Employee e1 = new Employee();
        e1.setId(1L);
        e1.setName("wangwu");
        Employee e2 = new Employee();
        e2.setId(2L);
        e2.setName("wangbaochuan");
        list.add(e1);
        list.add(e2);
        /**
         * UPDATE SPF_Require_Vehicle SET SPF_Name=? WHERE SPF_UID=? AND IsActvie=0
         */
        this.service.updateBatchById(list, list.size());

    }

2.9 单个查询

        根据Id单个查询

        getById
@Test
    public void testgetById() {
        /**
         * SELECT SPF_UID AS id,Part_PartSap AS partSap,Part_PlateSap AS plateSap,SPF_Name AS name,IsActvie AS active FROM SPF_Require_Vehicle WHERE SPF_UID=? AND IsActvie=0
         */
        Employee byId = this.service.getById(1);
        System.out.println(byId);
    }
        getOne

          // 根据条件查找时:如果有多个则会抛出异常

        default T getOne(Wrapper<T> queryWrapper)

        

@Test
    public void testgetOne() {
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        String plateSap = "312342-6";
        wrapper.eq(plateSap != null && !plateSap.isEmpty(), Employee::getPlateSap, plateSap);
        /**
         * SELECT SPF_UID AS id,Part_PartSap AS partSap,Part_PlateSap AS plateSap,SPF_Name AS name,IsActvie AS active
         *  FROM SPF_Require_Vehicle WHERE IsActvie=0 AND (Part_PlateSap = ?)
         */
        Employee one = this.service.getOne(wrapper);
        System.out.println(one);
    }

        

2.10 批量查询

        listByIds

        

@Test
    public void testlistByIds() {
        List<Long> list = new ArrayList<>();
        list.add(1L);
        list.add(2L);
        list.add(3L);
        List<Employee> employees = this.service.listByIds(list);
        /**
         * SELECT SPF_UID AS id,Part_PartSap AS partSap,Part_PlateSap AS plateSap,SPF_Name AS name,IsActvie AS active FROM SPF_Require_Vehicle WHERE SPF_UID IN ( ? , ? , ? ) AND IsActvie=0
         */
        employees.forEach(System.out::println);
    }
list

         

@Test
    public void testList() {
        List<Employee> list = this.service.list();
        /**
         * SELECT SPF_UID AS id,Part_PartSap AS partSap,Part_PlateSap AS plateSap,SPF_Name AS name,IsActvie AS active
         *  FROM SPF_Require_Vehicle WHERE IsActvie=0
         */
        list.forEach(System.out::println);
    }

2.11 有条件批量查询

        listByMap

        default List<T> listByMap(Map<String, Object> columnMap)

@Test
    public void testlistByMap() {
        Map<String, Object> map = new HashMap<>();
        map.put("SPF_Name", "wangshun");
        map.put("Part_PlateSap", "312342-20");
        /**
         * SELECT SPF_UID AS id,Part_PartSap AS partSap,Part_PlateSap AS plateSap,SPF_Name AS name,IsActvie AS active 
         *  FROM SPF_Require_Vehicle WHERE Part_PlateSap = ? AND SPF_Name = ? AND IsActvie=0
         */
        List<Employee> employees = this.service.listByMap(map);
        employees.forEach(System.out::println);
    }

list
default List<T> list(Wrapper<T> queryWrapper)
@Test
    public void testList() {
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(Employee::getName, "wangshun");
        List<Employee> list = this.service.list(wrapper);
        /**
         *  SELECT SPF_UID AS id,Part_PartSap AS partSap,Part_PlateSap AS plateSap,SPF_Name AS name,IsActvie AS active 
         *      FROM SPF_Require_Vehicle WHERE IsActvie=0 AND (SPF_Name LIKE ?)
         */
        list.forEach(System.out::println);
    }

2.12 查询指定列

getmap

        // 如果查询出过个,则只取第一个

Map<String, Object> getMap(Wrapper<T> queryWrapper);
@Test
    public void testSelectMap() {
        String name = "wangshun";
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(!name.isEmpty(), Employee::getName, name);
        /**
         * 只查询这两列,如果同时查询出多行,则只取第一行
         * SELECT Part_PlateSap AS plateSap,Part_PartSap AS partSap FROM SPF_Require_Vehicle WHERE IsActvie=0 AND (SPF_Name LIKE ?)
         */
        wrapper.select(Employee::getPlateSap, Employee::getPartSap);
        Map<String, Object> map = this.service.getMap(wrapper);
        System.out.println(map);
    }
listMap

        可查询多行

@Test
    public void testlistMaps() {
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(Employee::getName, "wangshun");
        /**
         * 只显示这三列
         */
        wrapper.select(Employee::getPartSap, Employee::getPlateSap, Employee::getName);
        List<Map<String, Object>> maps = this.service.listMaps(wrapper);
        for (Map<String, Object> map : maps) {
            System.out.println(map);
        }
    }

        

default List<Map<String, Object>> listMaps()  如果不见条件则查询所有的行

2.13 个数查询      

// 查询表中国有效的总行数
default long count()

// 根据条件查询行数
default long count(Wrapper<T> queryWrapper)

2.14 分页查询

        分页查询需要首先注册mybatis-plus的拦截器,配置如下

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor getIntercepter() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }
}
@Test
    public void testPage01() {
        Page<Employee> page = new Page<>(2, 4);
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(Employee::getName, "wangshun");
        this.service.page(page, wrapper);
        System.out.println(page);
        // 查询到的内容
        System.out.println("records: " + page.getRecords());
        // 总页数
        System.out.println("pages: " + page.getPages());
        // 当前页数
        System.out.println("current: " + page.getCurrent());
        // 总条目数
        System.out.println("total: " + page.getTotal());
    }

2.15 SQL分页查询

        许多时候需要手写语句实现分页查询,例如同时从多张表中查询数据,这个时候需要自己写条件。

01. 在 application.yml中指定mybatis-plus的相关配置,尤其要指定xml的路径,默认在mapper下,本人仍习惯指明位置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # 指定mapper.xml所在的位置
  mapper-locations: classpath:/mapper/*.xml

02. 在Mapper中增加声明

 /**
     * 手写语句实现分页查询
     * @param page 拦截器使用,当前sql中不需要
     * @param employee 查询对象
     * @return 查询结果
     */
    Page<Employee> getEmployeeInfoByPage(@Param("page") Page<Employee> page, @Param("employee") Employee employee);

03. 添加Mapper对应的xml文件并增加对应的函数

<?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.ssm01.mapper.EmployeeMapper">
    <resultMap id="baseResultMap" type="com.ssm01.pojo.Employee">
        <result column="SPF_UID" property="id"/>
        <result column="Part_PartSap" property="partSap"/>
        <result column="Part_PlateSap" property="plateSap"/>
        <result column="SPF_Name" property="name"/>
    </resultMap>
    <select id="getEmployeeInfoByPage" resultMap="baseResultMap">
        select * from SPF_Require_Vehicle where SPF_Name = #{employee.name} and IsActvie = 0
    </select>
</mapper>

04. 在自己的service中增加相应的方法,调用mapper中的函数

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

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

相关文章

基于SSM的宿舍管理系统(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的宿舍管理系统&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc My…

面试高频手撕算法 - 背包问题2

目录 1. 完全背包 1.1 【模板】完全背包 1.2 零钱兑换 1.3 零钱兑换 II 1.4 完全平方数 2. 二维费用的背包问题 2.1 一和零 2.2 盈利计划 --- 如果背包问题原先没有基础的&#xff0c;建议先看上一篇博客 --- 面试高频手撕算法 - 01背包系列 1. 完全背包 1.1 【模板】…

天眼销|企业数据查询必备

首先&#xff0c;得介绍一下天眼销是一个什么样的平台&#xff0c;请往下看&#xff1a; 可能会有一些还是觉得懒得看&#xff0c;简单理解&#xff0c;它与我们熟知的某查查&#xff0c;天眼某相类似&#xff0c;有很多共同之处。比如&#xff1a;某查查的服务模式&#xff08…

数据结构与算法(七)--使用链表实现栈

一、前言 之前我们已经学习了链表的所有操作及其时间复杂度分析&#xff0c;我们可以了解到对于链表头的相关操作基本都是O(1)的&#xff0c;例如链表头增加、删除元素&#xff0c;查询元素等等。那我们其实有一个数据结构其实可以完美利用到这些操作的特点&#xff0c;都是在…

Idea升级版本后踩坑关于Local History

版本升级&#xff1a;IntelliJ IDEA 2022.1.2 (Ultimate Edition) Local History本地历史修改记录在idea升级后默认只保留 5天 以内的修改记录&#xff0c;导致时间过长的一些内容就自动被清除掉了。可通过File->Setting-Advanced Setting 进行修改。

数据结构——常见的十种排序算法

一、常见的十种排序算法&#xff1a; 冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、桶排序、基数排序 1.【知识框架】 补充&#xff1a; 内部排序&#xff1a;整个排序过程完全在内存中进行。 外部排序&#xff1a;由于待排序记录数据量太…

python进行接口自动化测试

一、接口自动化测试的流程 1、需求分析 1、1请求&#xff08;url,方法、数据&#xff09; 2、挑选需要做自动化测试的接口 3、设计自动化测试用例 4、搭建自动化测试环境 5、设计自动化执行框架&#xff08;报告、参数化、 用例执行框架&#xff09; 6、编写代码 7、执…

工程派工单,建筑工程派工单

工程派工单是指建设项目管理人员或工程维修人员发出的文件&#xff0c;用于标明工人或维修人员在建设项目或设备中处理或维修问题的任务。派工单包括建设项目的实际维护任务、所需材料、工具等信息&#xff0c;以及具体的执行人员和完成时间。工程派工单是保证建设项目顺利开展…

用《斗破苍穹》的视角打开C#3 标签与反射(人物创建与斗技使用)

随着剧情的发展&#xff0c;主线人物登场得越来越多&#xff0c;时不时跳出一个大佬&#xff0c;对我张牙舞爪地攻击。眼花缭乱的斗技让我不厌其烦&#xff0c;一个不小心&#xff0c;我就记不清楚在哪里遇上过什么人&#xff0c;他会什么斗技了。这时候&#xff0c;我就特别希…

Centos中清除因程序异常终止,导致的残留的Cache/buff_drop_caches命令---linux工作笔记063

我这里因为nifi程序背压设置的不合理,导致,内存和CPU消耗过高,系统崩溃,但是重启NIFI以后,发现 对应的执行top命令,看到,系统的buff/cache 依然没有减少,说明内存被浪费了,残留在这里没有被回收. 用这个办法执行这个命令; linux会自动触发清理,但是只有在内存不够用的时候才会…

计算机竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …

沈阳陪诊系统|沈阳陪诊系统开发|沈阳陪诊系统功能和优势

在现代医疗服务中&#xff0c;陪诊系统服务正变得越来越重要。这项创新的服务提供了一种全新的方式&#xff0c;帮助患者在医院就诊时获得更好的照顾和支持。无论是面对复杂的医学流程还是需要心理支持&#xff0c;陪诊系统服务都能够为患者提供方便、专业的帮助。陪诊系统服务…

自学SLAM(3)---保姆教程教你如何使用摄像头运行ORB-SLAM2

前言 上一篇文章我讲述了如何使用自己的视频运行ORB-SLAM2 链接如下&#xff1a; 链接: 上一篇&#xff0c;环境搭建及使用自己的视频运行ORB-SLAM2 没有搭建环境的朋友看上面我的链接哦&#xff0c;里面有超详细的环境搭建&#xff0c;一步一步来保姆级别的哦 那么本篇&#…

【mysql 大表清理】磁盘占用太多,清理无效大表

在使用MySQL数据库时&#xff0c;有时候由于数据量增加或者磁盘空间限制&#xff0c;会导致数据库磁盘空间不足的问题。这会影响到数据库的正常运行&#xff0c;需要及时清理磁盘空间来解决问题。本文将介绍如何清理MySQL数据库的磁盘空间&#xff0c;并给出示例以帮助读者更好…

wget出现无法建立SSL连接的问题

出现这个问题的原因&#xff0c;这是因为wget在使用https协议的时候&#xff0c;默认会去验证网站的证书&#xff0c;而这个证书验证经常会失败&#xff0c;加上"--no-check-certificate"选项&#xff0c;就能排除掉这个错误

MongoEngine 简介安装、连接、数据类型及其参数详解

文章目录 前言一、MongoEngine 简介二、MongoEngine的安装与连接1. 安装MongoEngine2. 连接到MongoDB3. 定义数据模型 三、MongoEngine模型介绍1. 常见数据类型2. 数据类型参数 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方…

除静电离子风棒的工作原理及应用

除静电离子风棒是一种常见的除静电设备&#xff0c;它的工作原理是通过产生大量的负离子来中和物体表面的静电电荷&#xff0c;从而达到除静电的目的。 静电离子风棒内部装有一个电离器&#xff0c;电离器会将空气中的氧气分子或水分子电离成正、负离子。这些带电的离子在空气…

ubuntu疑难杂症

1.ubuntu 使用apt 安装软件时提示出现不能获得lock $ sudo rm /var/lib/dpkg/lock$ sudo dpkg --configure -a$ sudo rm /var/lib/apt/lists/lock

什么是防抖和节流

防抖和节流都是前端开发中常用的优化性能的技术。 一、定义 防抖&#xff1a; 防抖指的是在事件触发后&#xff0c;在规定的时间内若再次触发&#xff0c;则重新计时&#xff0c;直到规定时间内没有再次触发事件&#xff0c;才执行事件处理。这样可以避免在短时间内频繁地触发…

vtk之【vtkPolyData、vtkCell、vtkPoints】

文章目录 一,vtkPolyData、cell、point1) 例子2) vtkPolyData、vtkCell、vtkPoints 二,vtkNew<>与vtkSmartPointer<>的区别:三&#xff0c;补充 一,vtkPolyData、cell、point 1) 例子 /*** vtkNew 是一个类模板* vtkNew<> 是一个简单的 RAII&#xff08;Res…