草庐IT

MyBatis-Plus删除操作知识点总结

心态还需努力呀 2023-04-09 原文

系列文章目录

Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客  

Mybatis-Plus+SpringBoot结合运用_心态还需努力呀的博客-CSDN博客
MyBaits-Plus中@TableField和@TableId用法_心态还需努力呀的博客-CSDN博客

MyBatis-Plus中的更新操作(通过id更新和条件更新)_心态还需努力呀的博客-CSDN博客


目录

系列文章目录

前言

一、根据id删除

二、Map多条件删除

三、QueryWrapper多条件删除

四、id数组删除多条数据

总结


前言

本次内容主要是MP中的删除操作的知识点,有通过id删除,通过条件删除(map删出,QueryWrapper删除)、批量删除。主要是MP中的删除函数的用法。虽说在以后的开发中一般不会轻易地删除数据,只是把数据进行标记后不显示到页面。但删除操作在我们的学习中还是要求掌握的,毕竟也不难,而且在我们的开发中也会去运用到。所以作为学习的我们还是很有必要掌握该知识点的~


一、根据id删除

先看deleteById方法的源码,需要传入一个参数id值,返回的是一个int,也就是删除条数。

int deleteById(Serializable id);

 直接调用deleteById方法,这里传入参数为6,表示要删除id为6的信息。根据返回的参数,>0则删除成功,打印数据查看是否还有id为6的信息。反之则删除失败。写测试案例,代码去下:

//根据id删除
    //int deleteById(Serializable id);
    @Test
    public void testDeleteById() {
        int result = this.userMapper.deleteById(6);
        if(result>0){
            testSelectList();
            System.out.println("删除成功!");
        }else {
            System.out.println("删除失败!");
        }
    }

 查看运行结果:根据生成的sql代码可看出,传入的id作为删除条件。 并且执行成功删除1条数据。

二、Map多条件删除

查看源代码,需要定义一个map,键为表字段名,值为条件的值。返回值也是受影响的行数。

int deleteByMap(@Param("cm") Map<String, Object> columnMap);

下面我们写测试案例,首先要new一个hashmap,将要删除的条件放到map中(这里我们删除名字为赵六、邮箱为zhaoliu@itcast.cn的信息),然后执行该方法查看是否删除成功。 

@Test
    public void testDeleteByMap() {
        //删除条件的封装map
        Map<String,Object> map=new HashMap<>();
        map.put("user_name","赵六");
        map.put("user_email","zhaoliu@itcast.cn");
        //执行删除
        int result = this.userMapper.deleteByMap(map);
        if(result>0){
            testSelectList();
            System.out.println("删除成功!");
        }else {
            System.out.println("删除失败!");
        }
    }

结果如下图所示:通过生成的sql代码可看出删除多条件中是以and进行的连接

三、QueryWrapper多条件删除

 查看源码,是delete方法,里面的条件要通过QueryWrapper进行封装返回值也是受影响的行数。

int delete(@Param("ew") Wrapper<T> queryWrapper);

 使用QueryWrapper我们以前更新操作时讲解过,这里就直接用了哦~

首先可以在querWrapper里面设置删除的条件,但是需要知道表的字段名才可以设置。也就是下面代码的方法一。所以一般我们用方法二,也就是先new一个User对象,设置条件值即可。然后将user作为参数传给querWrapper。即可进行条件删除。

这里我们删除用户名为哈哈、邮箱为12433的用户信息。

//根据QueryWrapper多条件删除 ,条件之间是and关系
    //int delete(@Param("ew") Wrapper<T> queryWrapper);
    @Test
    public void testDelete() {
        //方法一:
//        QueryWrapper<User> wrapper=new QueryWrapper<>();
//        wrapper.eq("user_name","哈哈")
//                .eq("user_email","12433");
        //方法二:
        User user=new User();
        user.setUserName("哈哈");
        user.setUserEmail("12433");
        //在new时将user设置进去
        QueryWrapper<User> wrapper=new QueryWrapper<>(user);
        //执行删除
        int result = this.userMapper.delete(wrapper);
        if(result>0){
            testSelectList();
            System.out.println("删除成功!");
        }else {
            System.out.println("删除失败!");
        }
    }

 查看执行效果:

从下图也可看出多条件之间都是以AND进行的连接。删除成功~ 

四、id数组删除多条数据

 查看源码,该方法为deleteBatchIds(),需要传入一个id的集合,返回值也是受影响行数。

int deleteBatchIds(@Param("coll") Collection<?> idList);

编写测试方法testDeleteBatchIds(),在集合中传入1,2。表名要删除id为1,id为2的用户信息。做到批量删除的效果。

//根据id的数组删除多条数据
    //int deleteBatchIds(@Param("coll") Collection<?> idList);
    @Test
    public void testDeleteBatchIds(){
        //批量删除
        int result = userMapper.deleteBatchIds(Arrays.asList(1, 2));
        System.out.println("result=>"+result);

    }

 查看执行效果图:

查看生成的sql代码,使用的是in关键字,查看表中user_id里有1,2的都删除。

所以执行的行数为2。


 

总结

Mybatis-Plus中的删除操作知识点到这里就结束了,这些功能最常用的还是条件查询,会条件删除的话其他方法都可实现。所以说QueryWrapper必须要会用,而且它不管是修改操作、删除操作、查询操作都会用到。其他的方法大家多去掌握~不过别在开发过程中频繁地使用删除操作,数据都是要保留的,我们练习的话自己建个表可以多加试试,重在掌握知识点嘛~

有关MyBatis-Plus删除操作知识点总结的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  3. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  4. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  5. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

  6. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  7. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  8. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  9. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  10. ruby-on-rails - 为什么在 Rails 5.1.1 中删除了 session 存储初始化程序 - 2

    我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于

随机推荐