MybatisPlus学习

MyBatisPlus删除方法deletetById、deleteBatchIds、deleteByMap的使用示例代码 MyBatisPlus通用CRUD中删除方法deletetById、deleteBatchIds、deleteByMap的使用示例代码 立即下载

        前面说过了Mybatis,那么今天说的MP又是什么呢?

1.ORM思想

        说起Mybatis和MybatisPlus就必须要说的就是ORM思想:对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

        总的来说就是用操作对象的方式来操作数据库,要求通过某种机制,将自己写的对象动态的转化为sql语言,程序员本身不用写sql语句

2.Mybatis的缺点

        正是因为Mybatis的缺点,才有了MP的出现

  1. 可以封装结果集对象,但是需要自己手写sql语句,所以是半自动化的ORM映射框架
  2. 针对于单表的CRUD操作太麻烦

3.MP(MybatisPlus)概念

        MP是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。但是只能单表操作,对于一些复杂的sql还需要用Mybatis来写。

3.1 特性

  1. 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  2. 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  3. 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  4. 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  5. 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  6. 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  7. 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  8. 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  9. 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  10. 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  11. 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  12. 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

3.2 MP流程原理

大体框架底层已经写好了,我们只需要关注那些动态的,根据业务需要变化的数值就可以了

  1. 调用接口接口继承baseMapper并加入实体类的泛型
  2. 在业务层调用接口方法并传入对象
  3. 根据对象通过反射获取到它的tablename注解并获取里面的值,这时我们的表名就拿到了
  4. 再通过反射获取到它的tablefield注解获取字段名称
  5. 再通过对象调用get方法,这时我们的值也获取到了
  6. 与sql框架进行拼接
  7. 将sql交给mysql执行

3.3 前期准备

导入jar包,注意Mybatis的包和MP的包只能导入一个,否则会冲突报错

核心配置文件mybatis改为mybatis-plus

实体类加注解@TableName、@TableId、@TableField以便于通过反射找到对应的表、字段

持久层接口继承BaseMapper<实体类名>

4.MP的实操

4.1 查询:

selectList:查询不唯一时使用

写法一:

@Test
    public void se(){
        User user = new User();
        user.setName("小乔").setSex("女");
        QueryWrapper<User> qw = new QueryWrapper<>(user);
        List<User> users = userMapper.selectList(qw);
        System.out.println(users);
    }

        需要传入一个构造器对象,构造器对象需要传入一个实体类对象,实体类对象set的值作为查询的条件,例:name=小乔;sex=女

写法二:首先了解一些逻辑运算符就可以简写了

=eq     >gt     <lt    >=ge     <=le    !=ne
 @Test
    public void get2(){
        QueryWrapper<User> Wrapper = new QueryWrapper<>();
        Wrapper.eq("name", "小乔")
                .eq("sex", "女");
        List<User> users = userMapper.selectList(Wrapper);
        System.out.println(users);
    }

 第一种默认都是等于查询,第二种简洁,而且可以用不同的逻辑运算符进行查询

模糊查询:

 @Test
    public void get4(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.like("name", "君");
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

 查询名字里有君字的人

like后面可以拼接Left和Right,标识百分号所在的位置

例:likeLift("name","君");以君字开头的名称

        likeRight("name","君");以君子结尾的名称

排序查询:

 @Test
    public void get5(){
        QueryWrapper<User> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("sex", "女")
                .orderByDesc("age" );
        List<User> users = userMapper.selectList(objectQueryWrapper);

所有性别为女的,按照年龄进行降序排序查询

Desc换成Ase为按照年龄进行升序排序查询

有值按值查询,无值则不执行:

 @Test
    public  void get6(){
        String name=null;
        Integer age=0;
        boolean nameFlag= name==null?false:true;
        boolean ageFlag= age==0?false:true;
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.eq(nameFlag,"name",name)
                    .eq(ageFlag,"age",age);
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }

值不为空的时候按照值进行查询,为空的话则不执行这条语句

批量条件查询:

方式一:

 @Test
    public void get7(){
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.in("id", 40,41,42,43);
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);

这样把值都写死了,所以一般不用

方式二:selectBatchIds

ArrayList<Integer> objects = new ArrayList<>();
        objects.add(1);
        objects.add(3);
        objects.add(999);

        //数组转为集合
        Integer[] array={40,41,42,43};
        List<Integer> list = Arrays.asList(array);

        List<User> users1 = userMapper.selectBatchIds(list);//传入集合
        System.out.println(users1);

        这个方法的参数是一个集合,集合接收参数不方便可以用Arrays.asList把数组变为集合进行参数传入

selectById:

@Test
    public void se2(){
        int id=31;
        User user = userMapper.selectById(id);
        System.out.println(user);
    }

参数是id,一般为主键

selectObjs:只查询符合条件的主键

@Test
    public void get8(){
        //只查询主键selectObjs()
        QueryWrapper<User> queryWrapper = new QueryWrapper();
        queryWrapper.eq("sex","男");
        List<Object> users = userMapper.selectObjs(queryWrapper);
        System.out.println(users);

selectByMap:传入的是一个Map集合,参数分别为列名与要查询的条件值

 @Test
    public void se3(){
        HashMap<String,Object> om = new HashMap<>();
        om.put("id", 31);
        List<User> users = userMapper.selectByMap(om);
        System.out.println(users);
    }

4.2 新增:

insert:传入一个实体类对象

 @Test
    public void in(){
        userMapper.insert(new User().setName("阎静辉").setAge(22).setSex("男"));
    }

 

4.3 删除:

deleteById:传入id值

 @Test
    public void de(){
        int id=254;
        userMapper.deleteById(id);
    }

delete:传入构造器里写条件

  @Test
    public void de2(){
        userMapper.delete(new QueryWrapper<User>().eq("name", "阎静辉"));
    }

也可以构造器里传入实体对象,只不过对象的值默认都是等于

deleteByMap:传入Map集合,里面写列名与要删除对应的条件

 @Test
    public void de3(){
        HashMap<String, Object> om = new HashMap<>();
        om.put("name", "阿斯顿");
        userMapper.deleteByMap(om);
    }

deleteBathIds:传入List集合,注意泛型必须是Integer类型的

 @Test
    public void de4(){
       Integer[] a={38,39,40};
        List<Integer> list = Arrays.asList(a);
        userMapper.deleteBatchIds(list);
    }

4.4 修改:

updateById:传入一个实体类对象,id当作where条件,其他当作要修改的属性

 @Test
    public void up(){
        userMapper.updateById(new User().setId(27).setName("君君"));
    }

把id为27的名字修改为君君

update:有两个参数,第一个参数是实体类对象,把数据修改成什么值,第二个参数是构造器,里面定义where条件

 @Test
    public void up2(){
        User user = new User();
        user.setName("张子枫").setAge(20).setSex("女");
        QueryWrapper<User> where = new QueryWrapper<>();
        where.eq("name", "君君");
        userMapper.update(user,where);
    }

MP到这里就结束了,下一篇用axios和vue进行前后端交互,写一个动态网站!

满怀希望就会所向披靡!

【gcc】跨版本兼容实战:高版本编译程序在低版本glibc环境下的部署方案 本文针对高版本gcc编译的程序在低版本glibc环境下部署的兼容性问题,提供了四种实战解决方案:静态编译的局限性、容器化部署的优雅方案、使用Devtoolset工具链的官方支持,以及最通用灵活的打包依赖SO发布方案。重点剖析了通过设置RPATH和Interpreter或使用patchelf工具,实现程序与自带库的独立部署,有效解决glibc版本鸿沟。 阅读详情

相关推荐

USB摄像头开发避坑指南:UVC协议中的Alternate Setting详解

本文深入解析UVC协议中的Alternate Setting机制,这是USB摄像头开发中影响视频流稳定性的关键。文章通过实际案例,详解了Alternate Setting如何管理USB带宽分配,并分析了帧率不达标、图像花屏等典型问题的根源与排查方法,为开发者提供实用的避坑指南和调试技巧。

meat5的博客 240

MyBatis-Plus(二)

MyBatis-Plus三、配置 mybatis 日志四、CRUD 基本用法1、insert 操作2、update 操作3、delete 操作4、select 操作(1) 根据 id 主键查询(2) 批量查询记录(3) 使用 Map 的条件查询 三、配置 mybatis 日志 application.yml mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 方便我们查看SQL语句

qq_47142993的博客 3015

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3299

深入了解:MyBatisPlus中删除方法deletetById、deleteBatchIds、deleteByMap的使用

在使用MyBatisPlus进行数据库操作时,删除数据是常见且重要的操作。本文介绍了MyBatisPlus中的三种删除方法:​​、​​和​​的使用方法。通过灵活运用这些方法,我们可以方便地实现对数据库中数据的删除操作。希望本文对大家在使用MyBatisPlus进行开发时有所帮助!

牛肉胡辣汤 1万+

手把手教你用CODESYS将旧笔记本改造成软PLC(含证书配置避坑指南)

本文提供了一份详尽的指南,教你如何利用CODESYS平台将闲置旧笔记本改造为一台功能完整的软PLC。内容涵盖从硬件评估、系统实时性优化、软件安装与驱动配置,到关键的证书授权管理避坑指南,旨在帮助自动化工程师和爱好者低成本搭建稳定可靠的学习与开发平台。

weixin_29190573的博客 280

国产麒麟系统下用Rider开发C#桌面应用:从环境配置到Avalonia UI实战

本文详细介绍了在国产麒麟系统上使用JetBrains Rider开发C#桌面应用的完整流程,重点讲解了Avalonia UI框架的实战应用。从环境配置、Rider安装到Avalonia项目创建和UI开发技巧,全面覆盖了在非Windows环境下进行C#开发的关键步骤和优化建议,助力开发者高效构建跨平台桌面应用。

weixin_27791839的博客 387

通俗易懂的MyBatisPlus教程(含配套资料)

本教程为授权出品教程MyBatisPlus是一款非常强大的MyBatis增强工具包,只做增强不做改变.在不用编写任何SQL语句的情况下即可以极其方便的实现单一、批量、分页等操作。本套教程基于MyBatisPlus新2.3版本,详细讲授:集成MyBatisPlus、通用CRUD、EntityWrapper条件构造器、ActiveRecord 等基本操作,更有代码生成器、插件扩展、自定义全局操作、公共字段填充、Oracle主键Sequence处理、Idea快速开发插件等高阶技术. 通过具体的需求详细讲解如何在MybatisPlus原有的基础上进行自定义扩展.对于重点内容会进行源码讲授, 会涉及到MyBatis框架相关的原理, 若对MyBatis源码不熟悉,建议先学习尚硅谷官网中 MyBatis 的课程。

STM32驱动电磁阀电路设计:从光耦选型到MOSFET驱动的实战解析

本文深入解析了STM32驱动24V电磁阀的完整电路设计,重点探讨了光耦选型与MOSFET驱动两大核心环节。针对电平转换与电气隔离需求,详细对比了EL357N与TLP2310等光耦在CTR、速度及耐压等关键参数上的差异与应用场景。同时,文章提供了MOSFET关键参数解读、驱动电路优化方案(如推挽驱动)以及完整的PCB布局、电源处理与调试避坑指南,旨在帮助工程师构建稳定可靠的工业控制电路。

weixin_29184371的博客 234

MyBatisPlus批量删除(查询)与按字段名删除(查询)

MyBatisPlus批量删除与按字段名删除

weixin_46278059的博客 1万+

了解你的GPU:深入探讨AMD SMI

2024年9月17日 作者:Matt Elliott对于使用AMD硬件的系统管理员和高级用户来说,性能优化和高效的资源监控至关重要。AMD系统管理界面命令行工具`amd-smi`正是为了解决这些需求而设计的。amd-smi是一个多功能的命令行工具,专门用于管理和监控AMD硬件,主要侧重于GPU。作为未来取代`rocm-smi`的工具,`amd-smi`有望成为跨广泛设备的AMD硬件管理的主要工具。

数字人生 4525

AR1020触摸控制器驱动开发:嵌入式I²C/SPI底层集成指南

电容式触摸控制器是现代嵌入式人机交互(HMI)系统的核心感知单元,其工作原理基于寄生电容变化检测与数字信号处理。Microchip AR1020 作为典型单芯片方案,内置硬件滤波、多点跟踪与手势识别引擎,通过I²C或SPI接口输出结构化事件数据,显著降低主控MCU负载。该类器件的技术价值在于平衡精度、功耗与实时性,广泛应用于工业HMI、医疗设备及车载终端等对可靠性要求严苛的场景。本文聚焦AR1020的寄存器映射、中断驱动模型、坐标解析机制及在STM32平台的HAL/LL级工程实现,涵盖硬件时序约束、固件配置

weixin_29323977的博客 600

MybatisPlus学习笔记

我们直接使用UserMapper根据指定方法查询即可,不需要手写方法我们可以利用MybatisPlus的Wrapper来构建复杂的Where条件,然后自己定义sql语句中剩下的部分我们先定义wraper方法:如图in语句直接取代了foreach的复杂判断但是mp适合编写复杂where判断语句,如果是要将balance改为动态地赋值就要在业务层去拼接sql语句,就违反了开发规范所以我们一般将mp擅长的where构建让他去做,剩下的sql我们来写这个传递过程我们应该如何去做。

2402_83510798的博客 1835

使用 Python 爬取 YouTube 视频评论(弹幕)

✅ 如何使用 Python 调用 YouTube Data API v3。✅ 如何爬取指定视频的所有评论信息。✅ 如何对评论数据进行初步分析与可视化。✅ 如何扩展功能,实现评论回复获取和多视频批量爬取。

2201_76125261的博客 645

MybatisPlus小白入门学习干货!!

MybatisPlus小白入门学习干货!!

m0_73612206的博客 2353

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MyBatisPlus学习

/update>@Test//更新条件//定义条件//调用自定义SQL方法。

xxx_jsu的博客 441

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Mybatisplus 再学习

本文对代码生成器、多数据源、mybatisx插件作了简单介绍。其官网均有对应的内容,作为新手的我阅读起来有点困难,希望本文能帮助读者进行理解。代码生成器:https://baomidou.com/guides/code-generator/多数据源支持;

Naxi_rose的博客 815

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MyBatisPlus学习整理

MyBatisPlus学习整理 最近要做新的项目,需要使用 MyBatisPlus,所以要学习它,网上找到了不错的文章 https://www.jianshu.com/p/12ec123d20e8 https://www.jianshu.com/p/5c9e6acf9a70

bigbullhaha的博客 192

MyBatisPlus 全面学习路径

MyBatisPlus系统学习路径分为五大阶段:基础篇讲解CRUD接口、条件构造器等核心功能;进阶篇涵盖代码生成器、分页插件等高级特性;高级篇探讨多数据源、Spring整合等企业级方案;实战篇提供复杂查询、事务管理等最佳实践;源码篇解析架构设计与实现原理。从入门到精通,全面掌握MyBatisPlus在项目中的应用与优化,适合开发者系统学习这一高效ORM框架。

weixin_39956506的博客 922

MyBatisPlus基础学习笔记

MyBatisPlus基础学习笔记 今日目标 基于MyBatisPlus完成标准Dao的增删改查功能 掌握MyBatisPlus中的分页及条件查询构建 掌握主键ID的生成策略 了解MyBatisPlus的代码生成器 1,MyBatisPlus入门案例与简介 这一节我们来学习下MyBatisPlus的入门案例与简介,这个和其他课程都不太一样,其他的课程都是先介绍概念,然后再写入门案例。而对于MyBatisPlus的学习,我们将顺序做了调整,主要的原因MyBatisPlus主要是对MyBatis的简化,所以

z_1018的博客 958

MyBatisPlus学习笔记

MyBatisPlus(MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率。MyBatis-plus官网: https://baomidou.com/

m0_60460935的博客 714

MybatisPlus学习总结

简介 | MyBatis-PlusMyBatis Plus是一个基于MyBatis的增强工具,它简化了MyBatis的使用,提供了一系列的增强功能,使开发更加方便快捷。无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用。

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 1418

MybatisPlus 与 Docker 学习笔记

记录学习微服务过程,冲冲冲

Asuna_shino的博客 591
上一篇: SpringBoot运行流程及基本用法
下一篇: SpringMVC参数的传递
希望不要秃头的0.0
博客等级 码龄6年 64粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值