MyBatis-Plus学习笔记

1.MyBatis-Plus简介:

        MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD批量、逻辑删除、分页等操作。

2.BaseMapper提供的CRUD功能

  2.1 添加功能:

    @Testpublic void insert(){User user = new User();user.setName("users");user.setAge(43);user.setEmail("users@xja.com");int result = this.userMapper.insert(user);}

  2.2 删除功能:

    2.2.1 deleteById:

    @Testpublic void deleteById(){int result = this.userMapper.deleteById(1696801209841856514L);}

    2.2.2 deleteByMap:

    @Testpublic void deleteByMap(){Map<String,Object> map = new HashMap<>();map.put("name","admin");map.put("age",40);int result = this.userMapper.deleteByMap(map);}

    2.2.3 deleteBatchIds(批量删除):

    @Testpublic void deleteBatchIds(){List<Long> ids = Arrays.asList(1L, 2L, 3L);int result = this.userMapper.deleteBatchIds(ids);}

     2.2.4 delete(根据条件删除):

@Test
public void delete() {User user = new User();user.setName("zhangsan");user.setAge(40);QueryWrapper<User> wrapper = new QueryWrapper<>(user);this.userMapper.delete(wrapper);
}

2.3 修改功能:

    2.3.1 updateById:

    @Testpublic void updateById(){User user = new User();user.setId(1L);user.setName("Tom");user.setAge(40);int result = this.userMapper.updateById(user);}

    2.3.2 update(根据条件修改):

    @Testpublic void update() {User user = new User();user.setAge(80); // 需要更新的字段QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name", "Jack"); // 设置更新条件// 执行更新操作int result = this.userMapper.update(user, wrapper);}

  2.4 查询功能:

    2.4.1 selectById:

@Test
public void selectById() {User user = this.userMapper.selectById(1L);System.out.println(user);
}

    2.4.2 selectBatchIds:

@Test
public void selectBatchIds() {List<Long> ids = Arrays.asList(1L, 2L, 3L, 4L, 5L);List<User> users = this.userMapper.selectBatchIds(ids);users.forEach(System.out::println);
}

    2.4.3 selectOne:

@Test
public void selectOne() {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name", "Tom");// 只能查询一条数据,如果超过一条则报错User user = this.userMapper.selectOne(wrapper);System.out.println(user);
}

    2.4.4 selectAll:

    @Testpublic void selectAll(){//通过条件构造器查询一个list集合,若没有条件,则可以设置null 为参数List<User> userList = this.userMapper.selectList(null);userList.forEach(System.out::println);}

    2.4.5 selectCount(根据wrapper查询中记录数):

@Test
public void selectCount() {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.gt("age", 23); //查询年龄大于23岁的成员信息Integer count = this.userMapper.selectCount(wrapper);System.out.printf("总记录数:%d", count);
}

    2.4.6 selectList:

@Test
public void selectList() {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.lt("age", 50); // 年龄小于50岁List<User> users = this.userMapper.selectList(wrapper);users.forEach(System.out::println);
}

 3. IService(通用Service)提供的CRUD功能:

  3.1 添加功能:

    3.1.1 insertMore(批量添加):

    @Testpublic void insertMore(){List<User> users = new ArrayList<>();for (int i = 0 ; i <= 5 ; i++ ){User user = new User();user.setAge(20);user.setName("刘备");users.add(user);}boolean b = this.iUserService.saveBatch(users);System.out.println("成功与否:" + b);}

  3.2 删除功能:

  3.3 修改功能:

  3.4 查询功能:

    3.4.1 getById:

    @Testpublic void getById(){User user = this.iUserService.getById(1L);System.out.println("user:" + user);}

    3.4.2 getCount:

    @Testpublic void getCount(){int count = this.iUserService.count();System.out.println("查询的总记录数为:" + count);}

 4. 常用注解:

  4.1 @TableName:

作用:设置实体类所对应的表名,如@TableName("t_user")

  4.2 @TableId:

作用:将属性所对应的字段指定为主键,value属性用于指定主键的字段,type属性设置主键生成策略

描述
IdType.ASSIGN_ID(默认)基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
IdType.AUTO使用数据库的自增策略,注意,该类型请确保数据库设置了id自增,否则无效

  4.3  @TableField:

作用:指定属性所对应的字段名,如@TableField("user_name")

  4.4 @TableLogic:

作用:在实体类中表示删除状态的字段上加该注解,会将MyBatis-Plus提供的删除方法自动转为更新该条记录为删除状态,查询方法会自动转为查询不为删除状态的记录;

0为未删除状态,1为删除状态。

 5. Wapper(条件构造器)学习:

  5.1 Wapper介绍:

Wrapper:条件构造抽象类,最顶端父类

        AbstractWrapper: 用于查询条件封装,生成 sql的 where 条件
                QueryWrapper : 查询条件封装
                UpdateWrapper: Update 条件封装
                AbstractLambdaWrapper : 使用Lambda 语法
                        LambdaQueryWrapper : 用于Lambda语法便用的查询Wrapper
                        LambdaUpdateWrapper : Lambda 更新封装Wrapper

  5.2 QueryWrapper 学习:

常用方法:

eq:equals,等于

gt:greater than ,大于 >

ge:greater than or equals,大于等于≥

lt:less than,小于<

le:less than or equals,小于等于≤

between:相当于SQL中的BETWEEN

like:模糊匹配。like(“name”,“黄”),相当于SQL的name like ‘%黄%’

likeRight:模糊匹配右半边。likeRight(“name”,“黄”),相当于SQL的name like ‘黄%’

likeLeft:模糊匹配左半边。likeLeft(“name”,“黄”),相当于SQL的name like ‘%黄’

notLike:notLike(“name”,“黄”),相当于SQL的name not like ‘%黄%’

isNull

isNotNull

and:SQL连接符AND

or:SQL连接符OR

in: in(“age",{1,2,3})相当于 age in(1,2,3)

groupBy: groupBy(“id”,“name”)相当于 group by id,name

orderByAsc :orderByAsc(“id”,“name”)相当于 order by id ASC,name ASC

orderByDesc :orderByDesc (“id”,“name”)相当于 order by id DESC,name DESC
 

    5.2.1 查询用户名包含a,年龄在20到30之间,邮箱信息不为nulL的用户信息:

    @Testpublic void queryWrapper01(){//查询用户名包含a,年龄在20到30之间,邮箱信息不为nulL的用户信息QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.like("name","a").between("age",21,80).isNotNull("email");List<User> userList = this.userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

    5.2.2 查询用户信息,按照年龄的降序排序,若年龄相同,则按照id升序排序:

    @Testpublic void queryWrapper02(){//查询用户信息,按照年龄的降序排序,若年龄相同,则按照id升序排序QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.orderByDesc("age").orderByAsc("id");List<User> userList = this.userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

    5.2.3 删除邮箱地址为nulL的用户信息:

    @Testpublic void queryWrapper03(){//删除邮箱地址为nulL的用户信息QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.isNull("email");int result = this.userMapper.delete(queryWrapper);System.out.println("==========================");System.out.println(result);System.out.println("==========================");}

    5.2.4 将(年龄大于20并且用户名中包含有a) 或邮箱为null的用户信息修改:

    @Testpublic void queryWrapper04(){//将(年龄大于20并且用户名中包含有a) 或邮箱为null的用户信息修改QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.gt("age",20).like("name","a").or().isNull("email");User user = new User();user.setAge(30);user.setName("xiaomi");user.setEmail("admin@xja.com");int result = this.userMapper.update(user,queryWrapper);System.out.println("==========================");System.out.println(result);System.out.println("==========================");}

    5.2.5 将用户名中包含有a并且 (年龄大于20或邮箱为null) 的用户信息修改:

    @Testpublic void queryWrapper05(){//将用户名中包含有a并且 (年龄大于20或邮箱为null) 的用户信息修改//Lambda中的条件优先执行QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.like("name","a").and(i->i.isNull("email").or().gt("age",20));User user = new User();user.setAge(25);user.setName("huawei");user.setEmail("huawei@xja.com");int result = this.userMapper.update(user,queryWrapper);System.out.println("==========================");System.out.println(result);System.out.println("==========================");}

    5.2.6 组装select语句的学习(选择只查询特定字段):

    @Testpublic void queryWapper06(){//查询用户的用户名、年龄、邮箱信息QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name","age","email");List<Map<String,Object>> maps = this.userMapper.selectMaps(queryWrapper);maps.forEach(System.out::println);}

    5.2.6 组装子查询的学习:

    @Testpublic void queryWrapper(){//查询id小于等于100的用户信息//select * from user where id in(select id from user where id <= 4)QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("id","select id from user where id <= 4");List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

     5.2.7 condition组装条件的学习:

    @Testpublic void queryWrapper08(){String name = "a";Integer ageBegin = null;Integer ageEnd = 30;QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like(StringUtils.isNotBlank(name),"name",name).ge(ageBegin!=null,"age",ageBegin).le(ageEnd!=null,"age",ageEnd);List<User> userList = userMapper.selectList(queryWrapper);userList.forEach(System.out::println);}

  5.3 UpdateWrapper 学习(参照QueryWrapper):

    @Testpublic void updateWrapper(){//将用户名中包含有a并且 (年龄大于20或邮箱为null) 的用户信息修改UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.like("name","a").and(i->i.isNull("email").or().gt("age",20));updateWrapper.set("name","honor").set("email","honor@qq.com");int result = this.userMapper.update(null, updateWrapper);System.out.println(result);}

  5.4 LambdaQueryWrapper学习(对5.2.7的改进):

    @Testpublic void lambdaQueryWrapper08(){String name = "a";Integer ageBegin = null;Integer ageEnd = 30;LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.like(StringUtils.isNotBlank(name),User::getName,name).ge(ageBegin!=null,User::getAge,ageBegin).le(ageEnd!=null,User::getAge,ageEnd);List<User> userList = userMapper.selectList(lambdaQueryWrapper);userList.forEach(System.out::println);}

  5.5 LambdaUpdateWrapper学习(对5.3的改进):

    @Testpublic void lambdaUpdateWrapper(){//将用户名中包含有a并且 (年龄大于20或邮箱为null) 的用户信息修改LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();lambdaUpdateWrapper.like(User::getName,"a").and(i->i.isNull(User::getEmail).or().gt(User::getAge,20));lambdaUpdateWrapper.set(User::getName,"honor").set(User::getEmail,"honor@qq.com");int result = this.userMapper.update(null, lambdaUpdateWrapper);System.out.println(result);}

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

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

相关文章

优化爬虫请求:如何选择合适的爬虫ip轮换策略?

在进行爬虫任务时&#xff0c;使用隧道爬虫ip并采用合适的轮换策略可以提高稳定性和效率。选择合适的隧道爬虫ip轮换策略可以优化您的爬虫请求过程。 1、考量目标网站特点 不同网站对于频繁请求可能有不同限制或反爬机制。 了解目标网站是否存在IP封禁、验证码等问题&#xff…

swagger 接口测试,用 python 写自动化时该如何处理?

在使用Python进行Swagger接口测试时&#xff0c;可以使用requests库来发送HTTP请求&#xff0c;并使用json库和yaml库来处理响应数据。以下是一个简单的示例代码&#xff1a; import requests import json import yaml# Swagger API文档地址和需要测试的接口路径 swagger_url …

云原生Kubernetes:K8S概述

目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 二、总结 一、理论 1.云原生 &#xff08;1&#xff09;概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展&#xff0c;适用于各种不同的云平台。 如果…

2分钟搭建FastGPT训练企业知识库AI助理(Docker部署)

我们使用宝塔面板来进行搭建&#xff0c;更方便快捷灵活&#xff0c;争取操作时间只需两分钟 宝塔面板下安装Docker 在【软件商店中】安装【docker管理器】【docker模块】即可 通过Docker安装FastGPT 通过【Docker】【添加容器】【容器编排】创建里新增docker-compose.yaml以下…

oled--SSD1315驱动

OLED 接口方式&#xff08;由硬件电路确定&#xff09;&#xff1a;6800、8080、spi、i2c. 常见的驱动芯片&#xff1a;ssd1306、ssd1315。 oled屏幕的发光原理不同于lcd&#xff0c;上电后无法直接显示&#xff0c;需要初始化后才能正常显示。 SSD1315手册资料 SSD1315是一款…

2023年05月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:字符串插入 有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的’\0’。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。 时间限制:1000 内存…

怎样来实现流量削峰方案

削峰从本质上来说就是更多地延缓用户请求&#xff0c;以及层层过滤用户的访问需求&#xff0c;遵从“最后落地到数据库的请求数要尽量少”的原则。 1.消息队列解决削峰 要对流量进行削峰&#xff0c;最容易想到的解决方案就是用消息队列来缓冲瞬时流量&#xff0c;把同步的直…

C语言每日一练--Day(15)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;珠玑妙算 两数之和 &#x1f493;博主csdn个人主页&#xff1a;小小uni…

jmeter 固定定时器

固定定时器&#xff08;Constant Timer&#xff09;是一个定时器元件&#xff0c;可以在线程组中的每个线程之间添加固定的延迟时间。固定定时器会对每个线程的执行进行一定的暂停。 聊一下和线程组中的调度器对线程组执行时长的影响&#xff1a; 相同&#xff1a; 都会影响线…

前端学习之轮播图

前端学习之轮播图 该案例涉及到定时器的使用&#xff0c;元素的活获取&#xff0c;函数的调用等知识的运用 显示图如下&#xff1a;可以点击图标跳转图片&#xff0c;也可以自动轮播 源码如下 <!DOCTYPE html> <html><head><meta charset"UTF-8&q…

数学建模:Yalmip求解线性与非线性优化问题

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 线性优化 使用 Yalmip 求解线性规划最优值&#xff1a; m i n { − x 1 − 2 x 2 3 x 3 } x 1 x 2 ⩾ 3 x 2 x 3 ⩾ 3 x 1 x 3 4 0 ≤ x 1 , x 2 , x 3 ≤ 2 \begin{gathered}min\{-x_1-2x_23x_3\} \…

Python|小游戏之猫捉老鼠!!!

最近闲(mang)来(dao)无(fei)事(qi)&#xff0c;喜欢研究一些小游戏&#xff0c;本篇文章我主要介绍使用 turtle 写的一个很简单的猫捉老鼠的小游戏&#xff0c;主要是通过鼠标控制老鼠(Tom)的移动&#xff0c;躲避通过电脑控制的猫(Jerry)的追捕。 游戏主体思考逻辑&#xff1…

es5的实例__proto__(原型链) prototype(原型对象) {constructor:构造函数}

现在看这张图开始变得云里雾里&#xff0c;所以简单回顾一下 prototype 的基本内容&#xff0c;能够基本读懂这张图的脉络。 先介绍一个基本概念&#xff1a; function Person() {}Person.prototype.name KK;let person1 new Person();在上面的例子中&#xff0c; Person …

C++:日期类

学习目标&#xff1a; 加深对四个默认构造函数的理解&#xff1a; 1.构造函数 2.析构函数 3.拷贝构造 4.运算符重载 实现功能 1.比较日期的大小 2.日期-天数 3.前/后置&#xff0c;-- 这里基本会使用运算符重载 定义一个日期类 class Date { public://1.全缺省参数的构造函数Da…

简明易懂:Python中的分支与循环

文章目录 前言分支结构if 语句&#xff1a;单一条件判断else语句&#xff1a;提供备选方案elif 语句&#xff1a;多条件判断嵌套的分支结构&#xff1a;复杂条件逻辑 循环结构for循环&#xff1a;遍历序列range()函数与for循环while循环&#xff1a;条件重复循环控制&#xff1…

spring boot项目生成容器并运行

一个安静的周末&#xff0c;shigen又睡懒觉了&#xff0c;上次说的拖延症的惩罚来了&#xff1a;早晚各100个健腹轮练习&#xff0c;早上的已经完成了。今天的文章来的有点晚&#xff0c;但是依旧保持质量。 springboot项目生成容器并运行 背景 将springboot项目打包成jar包&…

植物根系基因组与数据分析

1.背景 这段内容主要是关于植物对干旱胁迫的反应&#xff0c;并介绍了生活在植物体内外以及根际的真菌和细菌的作用。然而&#xff0c;目前对这些真菌和细菌的稳定性了解甚少。作者通过调查微生物群落组成和微生物相关性的方法&#xff0c;对农业系统中真菌和细菌对干旱的抗性…

大屏开发,浏览器的可视区域和设备的分辨率

在线屏幕检测 - 显示器检测 - 显示器坏点检测工具

【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

zhi.oscs1024.com​​​​​ 漏洞类型反序列化发现时间2023-08-29漏洞等级高危MPS编号MPS-qkdx-17bcCVE编号CVE-2023-40195漏洞影响广度广 漏洞危害 OSCS 描述Apache Airflow Spark Provider是Apache Airflow项目的一个插件&#xff0c;用于在Airflow中管理和调度Apache Spar…

mac软件安装后打开软件显示损坏

#mac传输安装包后安装后打开软件显示损坏处理方式 以postman为例&#xff0c;输入前面的代码&#xff0c;打开访达&#xff0c;把有问题的软件拉到命令行窗口&#xff0c;确认即可 sudo xattr -r -d com.apple.quarantine /Applications/Postman.app sudo xattr -r -d com.ap…