MyBatisPlus入门宝典(二)CRUD

news/2024/5/7 11:25:31/文章来源:https://blog.csdn.net/weixin_44593822/article/details/127182974

目录

一.添加

二.相关注解  

三.修改

四.删除

五.查询

六.条件构造器

七.分页查询

八.全局配置


一.添加

1.配置文件开启SQL日志打印

# 开启SQL日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.测试添加方法:

    @Testpublic void testAdd(){Student student = new Student(null,"尚尚","ss@163.com","m",20) ;studentMapper.insert(student);// MyBatisPlus插入成功后,可直接直接获取主键的值System.out.println(student.getId());}

3.解决使用Mybatis-plus出现数据库id很大或者为负数的情况请参考下面这篇文章:

(137条消息) 使用Mybatis-plus出现数据库id很大或者为负数的情况_程序员青戈的博客-CSDN博客

4.直接运行上面的测试函数

二.相关注解  

我们将表名改为tb_studentid字段名改为sidname字段名改为sname,此时由于名字不同无法完成映射,我们可以通过相关注解为实体类对象指定表名和列名。
@TableName
作用:指定类为哪个表的实体类
位置:类上方
@TableId
作用:指定实体类的属性为主键
位置:属性上方
属性:
  • value:主键字段名
  • type:主键策略

@TableField

作用:在属性和列名不同的情况下,指定映射关系
位置:非主键属性上方
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_student")
public class Student {@TableId(value = "id", type = IdType.AUTO)private Integer id;@TableField("sname")private String name;private String email;private String gender;private Integer age;
}

然后运行一下之前写的测试代码。

三.修改

根据主键进行更新
    //修改@Testpublic void testUpdate(){//创建实体类对象Student student = new Student();//设置需要更新的属性student.setName("钱学森");//设置需要修改的数据idstudent.setId(1);//根据主键进行更新,没有设置的值则忽略studentMapper.updateById(student);}

四.删除

    // 根据id删除@Testpublic void testDeleteById(){studentMapper.deleteById(4);}// 根据id批量删除@Testpublic void testDeleteBatch(){ArrayList<Integer> ids = new ArrayList();//删除id为2和3的记录ids.add(2);ids.add(3);studentMapper.deleteBatchIds(ids);}// 根据字段条件删除@Testpublic void testDeleteMap(){Map<String,Object> map = new HashMap();// 删除name为尚尚且gender为男的数据// 键为数据库列名,而不是对象属性名map.put("sname","尚尚");map.put("gender","男");studentMapper.deleteByMap(map);}

五.查询

    // 根据id查询@Testpublic void testFindById1() {Student student = studentMapper.selectById(1);System.out.println(student);}// 根据id批量查询@Testpublic void testFindBatch() {//创建主键集合List<Integer> ids = new ArrayList<>();ids.add(1);ids.add(2);ids.add(3);List<Student> students = studentMapper.selectBatchIds(ids);students.forEach(System.out::println);}// 根据字段条件查询@Testpublic void testFindMap() {Map<String,Object> map = new HashMap<>();//查询name为小雨,age为19的数据map.put("sname","小雨");map.put("age",19);List<Student> students = studentMapper.selectByMap(map);students.forEach(System.out::println);}

六.条件构造器

Mybatis-Plus通过QueryWrapper对象让用户自由的构建SQL条件,简单便捷,没有额外的负担,
能够有效提高开发效率。
条件参数说明:
用法如下:

如果是并列关系,那么and函数可省略。直接就像条件构造器2和条件构造器3那样用.继续往下写就行。

    // 条件构造器1@Testpublic void testFindWrapper1() {// 查询年龄小于20或年龄大于22的人QueryWrapper<Student> queryWrapper = new QueryWrapper<>();queryWrapper.lt("age",20).or().gt("age",22) ;List<Student> students = studentMapper.selectList(queryWrapper);students.forEach(System.out::println);}// 条件构造器2@Testpublic void testFindWrapper2() {// 查询性别为女,且年龄小于等于20的数据QueryWrapper<Student> queryWrapper = new QueryWrapper<>();queryWrapper.eq("gender","女").le("age",20);List<Student> students = studentMapper.selectList(queryWrapper);students.forEach(System.out::println);}// 条件构造器3@Testpublic void testFindWrapper3() {// 查询名字包含"小"的学生,按照年龄升序排序QueryWrapper<Student> queryWrapper = new QueryWrapper<>();queryWrapper.like("sname","小").orderByAsc("age");List<Student> students = studentMapper.selectList(queryWrapper);students.forEach(System.out::println);}
注:构造时使用的是数据库字段,不是Java属性

七.分页查询

MP分页查询要配置分页插件。

1.在配置类或启动类配置分页插件

@SpringBootApplication
@MapperScan("com.first.mpdemo1.mapper")
public class Mpdemo1Application {public static void main(String[] args) {SpringApplication.run(Mpdemo1Application.class, args);}// 注册插件@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//不同的数据库对应不同的分页语句,所以要注明数据库类型interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

2.测试分页查询

    // 分页查询@Testpublic void testFindPage() {//创建分页条件,从第0条数据开始,获取两条数据Page page = new Page(2,2);// 分页查询IPage<Student> iPage = studentMapper.selectPage(page, null);// 打印分页数据System.out.println("结果集:"+iPage.getRecords());System.out.println("总页数:"+iPage.getPages());System.out.println("总条数:"+iPage.getTotal());System.out.println("当前页:"+iPage.getCurrent());System.out.println("每页条数:"+iPage.getSize());}


八.全局配置

假如数据库的所有表都以 tb_ 开头,主键都是自增的。如果针对每一个实体类都要添加相关注解比较麻烦,可以在SpringBoot配置文件中进行全局配置,该配置在所有的实体类中都生效。

application.yml:

mybatis-plus:#全局配置global-config:db-config:#主键类型id-type: AUTO# 设置表名前缀table-prefix: tb_# 是否使用驼峰转下划线命名,默认开启table-underline: true

配置之后就可以如下写了

@Data
@NoArgsConstructor
@AllArgsConstructor
//@TableName("tb_student")
public class Student extends Model<Student> {//@TableId(value = "sid", type = IdType.AUTO)@TableId(value = "sid")private Integer id;@TableField("sname")private String name;private String email;private String gender;private Integer age;
}

驼峰转下划线命名的意思:studentTable变成student_table,因为实体类一般用驼峰命名法,而

 数据库一般是用下划线的形式命名。

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

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

相关文章

Unity URP 色彩之旅

Unity URP 色彩之旅 这一切只是色彩科学的冰山一角… 文章目录Unity URP 色彩之旅1 我们是如何感知世界的&#xff1f;1.1 首先要有光&#xff01;1.2 人眼响应1.3 奇怪的大脑2 我们是如何描述颜色的&#xff1f;2.1 CIE 1931 RGB Color Space2.2 CIE 1931 XYZ Color Space2.3 …

JavaScript高级学习笔记:数据_变量_内存

1. 什么是数据? 2. 什么是内存? 3. 什么是变量? 4. 内存,数据, 变量三者之间的关系 变量保存的是内存中存储的地址值&#xff0c;而变量赋值就是将一个变量保存的内容拷贝一份到另一个变量中 这里面的.就是找obj对应地址值&#xff0c;中内存保存的相应数据 那么是不是所有…

SRv6----报文转发流程

按照下图路径&#xff0c;报文需要从主机H1转发到主机H2,H1将报文发送给节点A处理。节点A、B、D和F均为支持SRv6的设备&#xff0c;节点C和节点E为不支持SRv6的设备。 我们在SRv6源节点A上进行了网络编程&#xff0c;希望报文经过B-C和D-E这两条链路&#xff0c;然后送达节点F&…

华为面向5G的室内覆盖数字化概述

概述 数字化技术催生各行业的不断创新&#xff1a;ICT、媒体、金融、保险在数字化发展 曲线中已经独占鳌头&#xff0c;零售、汽车、油气化工、健康、矿业、农业等也在加速 其进程。促进数字化进程的关键技术包括软件定义设备、大数据、云计算、区 块链、网络安全、时延敏感网…

(附源码)SSM医疗垃圾管理系统JAVA计算机毕业设计项目

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

美团java一面面经

目录1.了解static吗&#xff0c;static数据存在哪&#xff1f;生命周期什么样的2.了解final吗&#xff0c;讲讲下面这段代码的结果3.讲讲volatile吧4.讲讲两个锁的区别(reentrantlock和synchronized)5.讲讲线程池里线程的创建与销毁&#xff0c;核心线程可以销毁吗&#xff1f;…

.NET 开源项目推荐之 直播控制台解决方案 Macro Deck

在直播圈有个很受欢迎的直播控制台程序Macro Deck, 它是基于Apache 2.0协议开源的.NET 应用。流媒体是一个吸引数亿万玩家的严肃行业。 最受欢迎的游戏锦标赛的转播获得了数百万的观看次数,从商业角度来看,这也使游戏行业变得有趣。在直播圈有个很受欢迎的直播控制台程序Mac…

牛客网专项练习30天Pytnon篇第07天

1.在Python中&#xff0c;使用open方法打开文件,语法如下&#xff1a;open(文件名&#xff0c;访问模式)&#xff0c;如果以二进制格式打开一个文件用于追加&#xff0c;则访问模式为:&#xff08;C&#xff09; A.rb B.wb C.ab D.a 解析&#xff1a; "r",&q…

看完这篇 教你玩转渗透测试靶机vulnhub——hackableII

Vulnhub靶机hackableII渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;FTP匿名登录&#xff1a;③&#xff1a;回弹shell&#xff1a;④&am…

Mybatis - 一二级缓存的原理

Mybatis - 一二级缓存的原理前言一. 一级缓存原理1.1 原理分析1.2 一级缓存 Key1.3 查询逻辑1.4 一级缓存的清除或失效场景1.5 一级缓存总结二. 二级缓存原理2.1 二级缓存的实验2.2 二级缓存的开启和相关配置解析2.3 二级缓存的封装Cache类2.4 二级缓存的存储2.5 二级缓存总结前…

指静脉代码学习---9.图像质量评价(分类)

一、论文背景 1.论文三--Song 本文提出了一种自适应增强框架的算法流程 先通过质量评价将图像分类,①针对高质量的图像,采用类似直方图均衡化的简单方法②低质量图像,采用类似滤波器增强的方法(虽然时效性较差,但是效果比较明显) ①对质量评价方法历程的概述:

Python 变量作用域

Python 变量作用域1.变量作用域2.局部变量3.全局变量4.同名的局部变量和全局变量5.global 语句1.变量作用域 Python 中规定每个变量都有它的作用域&#xff0c; 即变量只有在作用域范围内才是可见可用的。 作用域能避免程序代码中的名称冲突&#xff0c;在一个函数中定义的变量…

Java学习 --- 面向对象-继承

一、为什么需要继承 我们编写了两个类&#xff0c;一个是Pupil类&#xff0c;一个是Graduate类 问题&#xff1a;两个类的属性和方法有很多是相同的&#xff0c;怎么办&#xff1f; Pupil类&#xff1a; package com.javase.extend_;public class Pupil {public String nam…

docker搭建2048小游戏

下载2048游戏包 链接: https://pan.baidu.com/s/1E5RkGgfLSo3XYmvJ7RId_Q 提取码: 1gc5 复制这段内容后打开百度网盘手机App,操作更方便哦 打包成镜像 [root@docker ~]# ls game2048.tar [root@docker ~]# docker load -i game2048.tar [root@docker ~]# docker images REPOSI…

10月7日第壹简报,星期五,农历九月十二

10月7日第壹简报&#xff0c;星期五&#xff0c;农历九月十二1. 2022年诺贝尔文学奖揭晓&#xff0c;82岁法国女作家埃尔诺获奖。2. 我国新添4处世界灌溉工程遗产&#xff1a;四川省通济堰、江苏省兴化垛田灌排工程体系、浙江省松阳松古灌区和江西省崇义县上堡梯田全部申报成功…

【C语言】学生考勤管理系统

✅作者简介&#xff1a;一位CSDN万粉博主的小娇妻&#xff0c;一名在读大二学生&#xff0c;希望大家多多支持&#x1f44d;&#x1f44d;&#x1f44d; &#x1f525;系列专栏&#xff1a;C语言 &#x1f4ac;个人主页&#xff1a;梦园的CSDN博客 学生考勤管理系统1 问题描述2…

使用Vue和SpringBoot开发实验室耗材智能运维系统

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;浙江某公司软件工程师&#xff0c;负责开发管理公司OA、CRM业务系统&#xff0c;全栈领域优质创作者&#xff0c;CSDN学院、蓝桥云课认证讲师&#xff0c;开发过20余个前后端分离实战项目&#xff0c;主要发展方向为Vue…

(附源码)计算机毕业设计ssm大学生社团管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SPAFA 和Dijkstra的区别

Dijkstra算法和SPFA算法都可以用于求单源最短路,前者可以用小根堆进行优化,后者用就是用队列优化过的Bell-man Ford,下面说一说这两者的区别: Dijkstra算法是基于贪心和DP的思路,一开始先将所有点到原点的距离设置为无穷大,特别的是dis[s]=0,此处的s为原点,它是每次找到…

基于Java的SQL Server数据库加解密系统设计与实现

目 录 摘 要 1 ABSTRACT 2 第1章 绪论 3 1.1 数据库加解密系统开发背景 3 1.2 国内外现状 3 1.3 本文的主要工作 4 1.4 论文的组织结构 4 第2章 数据库加密的基本理论 6 2.1 数据库加密的三种级别 6 2.2 数据库加密的粒度 8 2.2.1 数据库级的数据库加密 8 2.2.2 表&#xff08;…