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);}
相关文章:

MyBatis-Plus学习笔记
1.MyBatis-Plus简介: MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单…...

linux安装docker全过程
3. 第二步:设置docker的存储库。就两条命令,我们直接执行就好。 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 4. 安装docker engine和docker-compose。 执行命…...

Spring 中存取 Bean 的相关注解
目录 一、五大类注解 1、五大类注解存储Bean对象 1.1Controller(控制器储存) 1.2Service(服务存储) 1.3Repository(仓库存储) 1.4Component(组件存储) 1.5Configuration(配置存储) 2、五大类注解小结 2.1为什么要这么多类注解 2.2 五大类注解之间的关系 二、方法注解 1.方法注…...

Camunda 7.x 系列【38】表单服务 FormService
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 演示2.1 获取流程开始表单2.2 启动流程2.3 查询任务表单2.4 完成任务3. 实际开发…...

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断
之前写过一篇优化核极限学习机的轴承诊断,今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理,到减法优化器SABO算法优化VMD参数,再到支持向量机的故障诊断,实现故障诊断的全流程,其他类型的故障诊断均可参考此流…...

指向任意节点的带环链表
🌈图示指向任意节点的带环链表 如图: 🌈快慢指针法判断链表是否带环 🌟思路:快指针fast一次走2步,慢指针slow一次走1步,fast先进环在换中运动,随后slow进入环。两指针每同时移动…...

应用于伺服电机控制、 编码器仿真、 电动助力转向、发电机、 汽车运动检测与控制的旋变数字转换器MS5905P
MS5905P 是一款 12bit 分辨率的旋变数字转换器。 片上集成正弦波激励电路,正弦和余弦允许输入峰峰值 幅度为 2.3V 到 4.0V ,可编程激励频率为 10kHz 、 12kHz 、 15kHz 、 20kHz 。 转换器可并行或串行输出角度 和速度对应的数字量。 MS5905…...

Ansible学习笔记(持续更新)
Ansible学习目录 1.自动化运维1.1 企业实际应用场景1.1.1 Dev开发环境1.1.2 测试环境1.1.3 发布环境1.1.4 生产环境1.1.5 灰度环境 1.2 程序发布1.3 自动化运维应用场景1.4 常用自动化运维工具 2.Ansible介绍和架构2.1 Ansible特性2.2 Ansible架构2.2.1 Ansible主要组成部分2.2…...

CCF HPC China2023|澎峰科技:使能先进计算,赋能行业应用
CCF HPC China2023圆满落幕! 桂秋八月,为期三天的中国高性能计算领域最高规格盛会——2023CCF全球高性能计算学术年会(HPC China)在青岛红岛国际展览中心圆满落幕。行业超算大咖、顶级学界精英、先锋企业领袖参会者齐聚山东青岛&a…...

【FlowDroid】一、处理流程学习
FlowDroid 一、处理流程学习 下载配置源码概况代码逻辑分析analyzeAPKFilerunInfoflowprocessEntryPointcalculateCallbacks(sourcesAndSinks)再次回到processEntryPoint 自己做一些笔记 下载配置 参照我前面的文章可以使用FlowDroid安装初体验 为了看代码了解FlowDroid如何处…...

MyBatis——MyBatis插件原理
摘要 本博文主要介绍MyBatis插件机原理,帮助大家更好的理解和学习MyBatis。 一、插件机制概述 MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括: Executor (update, que…...

简易虚拟培训系统-UI控件的应用5
目录 Toggle控件简介 示例-使用Toggle组实现主轴速度选择 本篇介绍UI控件Toggle,尝试一个小示例-使用单选框实现速度的选择控制。 Toggle控件简介 1. Toggle的结构如下:最重要的Toggle组件挂在Toggle节点上,下面的Image组件用于显示单选框…...

Lnmp架构
关闭防火墙 安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 创建运行用户、组 编译安装Nginx 让系统识别nginx的操作命令 添加Nginx系统服务 vim /lib/systemd/system/nginx.service 编译安装mysql 安装Mysql环境依赖包 创建运行用户 编译安装 cd /opt …...

es5的实例__proto__(原型链) prototype(原型对象) {constructor:构造函数}
现在看这张图开始变得云里雾里,所以简单回顾一下 prototype 的基本内容,能够基本读懂这张图的脉络。 先介绍一个基本概念: function Person() {}Person.prototype.name KK;let person1 new Person();在上面的例子中, Person …...

Oracle DBlink使用方法
DBlink作用:在当前数据库中访问另一个数据库中的表中的数据 create public database link dblink名称 connect to 对方数据库用户名 identified by 对方数据库用户密码 using (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 要连接的数据库所在服务…...

UE4 植物生长
这个可以改变SplineMesh朝向...

企业应用系统 PHP项目支持管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页
一、源码特点 PHP 项目支持管理系统是一套完善的web设计系统 应用于企业项目管理,从企业内部的各个业务环境总体掌握,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php项目支撑管理系统2 二、功能介绍 (1)权限管理࿱…...

微服务通信[HTTP|RPC同步通信、MQ异步通信]
概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET…...

C语言模拟最简单的计算机
C语言模拟最简单的计算机 以下内容参考南大“计算机系统基础”实验:不停计算的机器 概述 如下面的伪代码所示,计算机运行程序的过程为取指令–>运行指令–>更新PC的值。 while (1) {从PC指示的存储器位置取出指令;执行指令;更新PC; }取指(inst…...

c++图论免费ppt,简单深度理解图论
本篇博文想分享一个ppt,是帮助大家简单深度理解c图论. 作者承诺:分享的东西没有病毒,是资料。 分享的东西一个是ppt,ppt里面是150页的,里面将带领大家简单深度理解c图论,还有一个就是里面例题的数据,大家可以按照数据…...

xml中in的使用
目录 一、简介 二、使用 1、参数为list 2、参数为Array 3、参数为Map XML中大于、小于、不等于符号使用 一、简介 在xml中使用in查询需要使用foreach标签 <foreach item"item" collection"list" index"index" open"(" sep…...

Unity生命周期函数
1、Awake 当对象(自己这个类对象,就是这个脚本)被创建时 才会调用该生命周期函数 类似构造函数的存在 我们可以在一个类对象创建时进行一些初始化操作 2、OnEnable 失活激活(这个勾) 想要当一个对象(游戏…...

【OpenCV入门】第六部分——腐蚀与膨胀
文章结构 腐蚀膨胀开运算闭运算形态学方法梯度运算顶帽运算黑帽运算 腐蚀 腐蚀操作可以让图像沿着自己的边界向内收缩。OpenCV通过”核“来实现收缩计算。“核”在形态学中可以理解为”由n个像素组成的像素块“,像素块包含一个核心(通常在中央位置&…...

[C++] STL_list常用接口的模拟实现
文章目录 1、list的介绍与使用1.1 list的介绍1.2 list的使用 2、list迭代器3、list的构造4、list常用接口的实现4.1 list capacity4.2 插入删除、交换、清理4.2.1 insert任意位置插入4.2.2 push_front头插4.2.3 push_back尾插4.2.4 erase任意位置删除4.2.5 pop_front头删4.2.6 …...

js实现点击查看全部/收起功能
在上一篇文章实现用js截取文本后,我的另一个需求也迎刃而解了。需求就是一段长文本需要溢出隐藏,然后点击全部时显示全部文本,点击收起又回到溢出隐藏的状态。实现的效果如下图: 实现的思路时点击全部时使用这条数据的原文本&…...

安全区域边界技术测评要求项
1.边界防护-非授权设备接入、非授权连接外部网络、无线网络使用和设备可信接入 (网络边界就是采用不同安全策略的两个网络的连接处) 1-1/2-1/3-4/4-6 a)保证跨越边界的访问和数据流通过边界设备提供的受控接口进行通信 b)应能够对…...

基于YOLOV8模型的农作机器和行人目标检测系统(PyTorch+Pyside6+YOLOv8模型)
摘要:基于YOLOV8模型的农作机器和行人目标检测系统可用于日常生活中检测与定位农作机和行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标…...

我的私人笔记(安装hbase)
在安装前需要安装好JDK、Hadoop以及Zookeeper,JDK版本为1.8、Hadoop版本为2.7.4以及Zookeeper的版本为3.4.10。 4.1.下载 下载地址:Index of /dist/hbase 本次学习版本为: hbase-1.2.1-bin.tar.gz 4.2.安装步骤 上传安装包至hadoop01节点…...

【MySQL】用户管理
之前我们一直都使用root身份来对mysql进行操作,但这样存在安全隐患。这时,就需要使用MySQL的用户管理 目录 一、用户 1.1 用户信息 1.2 添加用户 1.3 删除用户 1.4 修改用户密码 二、用户权限 2.1 赋予授权 2.2 回收权限 一、用户 1.1 用户信息…...

音视频 ffmpeg命令转封装
保持编码格式: ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts ffmpeg -i test.mp4 -codec copy test_copy2.ts改变编码格式: ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv修改帧率: ffmpeg -i …...