Mybatis-Plus(二)--Mybatis-Plus方法大全

news2024/11/25 16:42:17

通用CRUD大全(Mybatis-Plus为我们提供了哪些操作)


还有在mybatis中遇到列名和属性名不一致等等的情况,在mybatis中xml中声明解决,在mybatis-plus中也都有对应的解决。

 1.插入操作


//插入一条记录
//参数entity是实体对象
int insert(T entity)
【1】设置id生成策略
数据写入数据库,但是id并不是我们希望的自增长,而是随机生成了id的值写入到了数据库。
我们就要设置id生成策略来解决这个问题。
MP支持的id策略:

package com.baomidou.mybatisplus.annotation;
//生成ID类型的枚举类
public enum IdType {
    //数据库id自增
    AUTO(0),
    //该类型为未设置为主键类型
    NONE(1),
    //用户输入ID,该类型可以通过自己注册自动填充插件来进行填充
    INPUT(2),
    //以下两种类型,只有当插入对象ID为空,才自动填充,全局唯一ID
    //其实我也不知道什么意思
    ASSIGN_ID(3),
    ASSIGN_UUID(4);


    private final int key;
    private IdType(int key) {
        this.key = key;
    }
    public int getKey() {
        return this.key;
    }
}

用法是在实体类的对象id属性上添加注解:

@TableId(type = IdType.AUTO)
private Long id;

【2】@TableField
(1)对象中的属性名和字段名不一致的问题(非驼峰)

@TableField(value = "email") //解决数据库中字段名与属性不一致
private String mail;

(2)对象中的属性字段在表中不存在的问题

@TableField(exist = false)
private String address; //在数据库表中是不存在的

(3)字段不加入查询字段

@TableField(exist = false)
private String address; //在数据库表中是不存在的

2.更新操作

在Mybatis-Plus中更新操作有2种,一种是根据id更新,另一种是根据条件更新。

【1】根据id更新


定义:
//根据ID修改
//@param entity 实体对象
int updateById(T entity);

使用:

//根据id更新,更新不为null的字段
userMapper.updateById(user);

【2】根据条件更新


定义:
//根据whereEntity条件,更新记录
//@param entity  实体对象(set条件值,可以为null)
//@param updatewrapper  实体对象封装操作类(可以为null,里面的entity用于生成where语句)
int update(T entity,Wrapper<T> updateWrapper);

使用:
例1:

User user=new User();
user.setAge(22);//更新的字段

//更新的条件
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.eq("id",6);

//执行更新操作
int result=this.userMapper.update(user,wrapper);
System.out.println("result = "+result);

例2:

//更新的条件及字段
updateWrapper<User> wrapper=new UpdateWrapper<>();
wrapper.eq("id",6).set("age",23);

//执行更新操作
int result=this.userMapper.update(null,wrapper);
System.out.println("result = "+result);

3.删除操作

1.根据id删除

【1】deleteById

定义:int deleteById(Serializable id); 

int result=this.userMapper.deleteById(6L);//Long类型的6
System.out.println("result = "+result);

【2】deleteBatchIds
定义:int deleteBatchIds(Collection<? extends Serializable> idList);

//根据id集合批量删除
int result=this.userMapper.deleteBatchIds(Arrays.asList(1L,10L,20L));

2.根据条件删除

【1】deleteByMap

定义:int deleteByMap(Map<String,Object> columnMap);

Map<String,Object> columnMap=new HashMap<>();
columnMap.put("age",20);
columnMap.put("name","张三");

//将columnMap中的元素设置为删除的条件,多个之间为and关系
int result=this.userMapper.deleteByMap(columnMap);
System.out.println("result = "+result);

【2】delete
定义:int delete(Wrapper<T> wrapper);

User user=new User();
user.setAge(20);
user.setName("张三");
//将实体对象进行包装,包装为操作条件
QueryWrapper<User> wrapper =new QueryWrapper<>(User);

int result=this.userMapper.delete(wrapper);

4.查询操作

1.根据id查询单条数据

定义:T selectById(Serializable id);

//根据id查询数据
User user=this.userMapper.selectById(2L);

2.根据id集合批量查询

定义://根据ID批量查询
List<T> selectBatchIds(Collection<? extends Serializable> idList);

//根据id集合批量查询
List<User> users=this.userMapper.selectBatchIds(Arrays.asList(2L,3L,10L));
for(User user:users){
    System.out.println(user);
}

3.根据条件查询单条数据

定义:T selectOne(wrapper<T> queryWrapper);

QueryWrapper<User> wrapper =new QueryWrapper<User>();
wrapper.eq("name","李四");
//根据条件查询一条数据,如果结果超过一条会报错
User user = this.userMapper.selectOne(wrapper);

4.根据条件查询多条数据

定义:List<T> selectList(wrapper<T> queryWrapper);

QueryWrapper<User> wrapper=new QueryWrapper<User>();
wrapper.gt("age",23);//年龄大于23岁
//根据条件查询数据
List<User> users=this.userMapper.selectList(wrapper);

5.根据条件查询总记录数

定义:Integer selectCount(Wrapper<T> queryWrapper);

QueryWrapper<User> wrapper=new QueryWrapper<User>();
wrapper.gt("age",23);//年龄大于23岁
//根据条件查询数据条数
Integer count=this.userMapper.selectCount(wrapper);

6.分页查询

定义:IPage<T> selectPage(IPage<T> page,Wrapper<T> queryWrapper);
例:
配置分页插件:

@Configuration
@MapperScan("cn.itcast.mp.mapper")
public class MybatisPlusConfig {
    //分页插件
    @Bean
    public PaginationInnerInterceptor paginationInnerInterceptor() {
        return new PaginationInnerInterceptor();
    }
}

测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class TestMybatisSpringBoot {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testSelectPage(){
        QueryWrapper<User> wrapper=new QueryWrapper<User>();
        wrapper.gt("age",20);
        Page<User> page=new Page<>(1,1);
        //根据条件查询数据
        IPage<User> iPage=this.userMapper.selectPage(page,wrapper);

        System.out.println("数据总条数:"+iPage.getTotal());
        System.out.println("总页数:"+iPage.getPages());
        List<User> users=iPage.getRecords();
        for(User user:users){
            System.out.println("user = "+user);
        }
    }
}

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

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

相关文章

数据结构day5(2023.7.19)

一、Xmind整理&#xff1a; 双向链表的插入与删除&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;单链表任意元素删除 /** function: 按元素删除* param [ in] * param [out] * return 返回堆区首地址*/ Linklist delete_by_data(datatype key,Linklist L) …

【MySQL】MySQL数据库的初阶使用

文章目录 一、MySQL服务的安装二、数据库基础1.什么是数据库&#xff1f;&#xff08;基于CS模式的一套数据存取的网络服务&#xff09;2. Linux文件系统和数据库的关系 && 主流数据库3.MySQL架构 && SQL分类 && MySQL存储引擎 三、MySQL操作库1.库结构…

携带时间戳主动写入数据到prometheus service(可乱序、go)

使用到的github公开项目 https://github.com/castai/promwrite Prometheus版本2.45.0 拉下来装依赖&#xff0c;然后使用 client_test.go t.Run(“write with custom options”, func(t *testing.T) 这个测试用例里面&#xff0c;删掉srv初始化的部分&#xff0c;这个是模拟一…

unity02 物体运动

旋转&#xff0c;增量旋转&#xff0c;默认增量为15度 ctrl拖拽物体旋转 设置增量旋转角度大小 edit–>grid and snap settings privot 轴心坐标系&#xff08;中心坐标系&#xff09;默认 local 世界坐标系&#xff08;局部坐标系&#xff09; ctrlD复制物体 物体激活&…

uni.app如何检测小程序版本更新以及上线后如何关闭全局打印

uni.app如何检测小程序版本更新以及上线后如何关闭全局打印 检测小程序版本更新关闭全局打印 检测小程序版本更新 App.vue 入口文件中 添加如下代码 //检测小程序版本是否更新const updateManager wx.getUpdateManager()updateManager.onCheckForUpdate(function(res) {// 请求…

Linux基础内容(26)—— 线程的互斥

Linux基础内容&#xff08;25&#xff09;—— 线程控制和线程结构_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131372872?spm1001.2014.3001.5501 目录 1.线程互斥 1.问题引入 2.问题原因 3.安全问题 互斥 加锁 加锁后的特点 如何理…

每天一道C语言编程:Cylinder(圆柱体问题)

题目描述 使用一张纸和剪刀&#xff0c;您可以通过以下方式切出两个面形成一个圆柱体&#xff1a; 水平切割纸张&#xff08;平行于较短的边&#xff09;以获得两个矩形部分。 从第一部分开始&#xff0c;切出一个最大半径的圆。圆圈将形成圆柱体的底部。 将第二部分向上滚动&…

2023网络安全面试题汇总(附答题解析+配套资料)

随着国家政策的扶持&#xff0c;网络安全行业也越来越为大众所熟知&#xff0c;相应的想要进入到网络安全行业的人也越来越多&#xff0c;为了更好地进行工作&#xff0c;除了学好网络安全知识外&#xff0c;还要应对企业的面试。 所以在这里我归总了一些网络安全方面的常见面…

牛顿修正法在二阶近似方法中的应用

使用optimtool的牛顿修正法来应用学习 pip install optimtool --upgrade pip install optimtool>2.4.2optimtool包所依据的理论支撑中&#xff0c;还没有为二阶微分方法作邻近算子的近似与修正&#xff0c;所以二阶近似方法是研究无不可微项的可微函数的算子。 牛顿修正法…

docker部署mysql8主从集群(互为主从),keepalived保证高可用

一、准备2台物理机器master-1、master-2&#xff0c;目标虚拟VIP。   VIP:172.50.2.139   master-1:172.50.2.41   master-2:172.50.2.42 二、然后分别在2台物理机器master-1、master-2上使用docker-compose安装mysql8&#xff0c;并配置互为主从。1&#xff09;配置mas…

2023-7-19-第二十式迭代器模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

深入理解Java虚拟机(五)虚拟机类加载机制

代码编译的结果从本地机器码转变为字节码&#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步。 一、概述 Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Jav…

队列的表示和操作

队列&#xff1a;队列是仅在表尾进行插入操作&#xff0c;在表头进行删除操作的线性表。 表尾即an端&#xff0c;称为队尾&#xff0c;表头即a1端&#xff0c;称为队头。 队列的存储方式&#xff1a;顺序队列和链式队列 队列顺序表示 #define MAXQSIZE 100 //最大队列长度 …

Vue 1 - 安装、快速上手

文章目录 关于 Vue创建应用 关于 Vue 官网&#xff1a; https://cn.vuejs.org官方文档-快速上手&#xff1a; https://cn.vuejs.org/guide/quick-start.htmlgithub : https://github.com/vuejsVue SFC Playground : https://play.vuejs.org/ 其他 作者 尤雨溪 Evan You 主页 …

如何把caj文件改成PDF格式?分享三个免费的方法!

在学术研究中&#xff0c;我们可能会遇到CAJ文件&#xff0c;这是一种在中国学术界广泛使用的文档格式。然而&#xff0c;与PDF文件相比&#xff0c;CAJ文件的查看和分享并不那么便捷。下面&#xff0c;我会为你介绍三种免费且简便的方法&#xff0c;帮助你将CAJ文件转化为PDF格…

PSP - Jackhmmer 搜索 EMBL 序列数据库的相似序列

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131817060 EMBL (European Molecular Biology Laboratory&#xff0c;欧洲分子生物实验室)&#xff1a;EMBL 数据库是一个由欧洲生物信息学研究所…

Microsoft Outlook如何定时发送邮件

点击New Emai 选择Options→Delay Delivery→Do not deliver before→Close

基于linux下的高并发服务器开发(第二章)- 2.13 匿名管道通信案例

实现 ps aux | grep xxx 父子进程间通信 子进程&#xff1a; ps aux, 子进程结束后&#xff0c;将数据发送给父进程 父进程&#xff1a;获取到数据&#xff0c;过滤 pipe() execlp() 子进程将标准输出 stdout_fileno 重定向到管道的写端。 dup2 07 / 匿名管道…

java项目之班级同学录网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的班级同学录网站。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&a…

强化学习之DQN(deep Q-network)算法

一、简介 DQN算法是深度学习领域首次广泛应用于强化学习的算法模型之一。它于2013年由DeepMind公司的研究团队提出&#xff0c;通过将深度神经网络与经典的强化学习算法Q-learning结合&#xff0c;实现了对高维、连续状态空间的处理&#xff0c;具备了学习与规划的能力。 二、…