MyBatis-Plus——增删查改

开发环境

IDEA

JDK:1.8

Spring Boot:2.6.2

Maven:3.3.9

MySQL:8.0.23

数据库准备

CREATE DATABASE mybatis_plus_db;DROP TABLE IF EXISTS person;
CREATE TABLE person(id BIGINT(20) NOT NULL COMMENT '主键ID', 
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄', 
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', 
PRIMARY KEY (id));INSERT INTO person (id, name, age, email) VALUES
(1, 'yixin', 18, 'test1@qq.com'),
(2, 'Jack', 20, 'test2@qq.com'),
(3, 'Tom', 28, 'test3@qq.com'),
(4, 'Sandy', 21, 'test4@qq.com'),
(5, 'Billie', 24, 'test5@qq.com');

一、项目搭建

1.1 创建一个Spring Boot项目

初始化以下依赖

img

1.2 导入依赖

        <!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- mybatis-plus --><!-- mybatis-plus 是自己开发,并非官方的! --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency>

警告:引入 *MyBatis-Plus* 之后请不要再次引入 *MyBatis* 以及 *MyBatis-Spring*,以避免因版本差异导致的问题。

1.3 编写配置文件

application.properties:

# mysql 5 驱动不同 com.mysql.jdbc.Driver
# mysql 8 驱动不同com.mysql.cj.jdbc.Driver、需要增加时区的配置 serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

1.4 建立目录

img

1.5 编写实体类

实体类Person:

package com.yixin.mybatis_plus.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {private Long id;private String name;private Integer age;private String email;
}

1.6 编写接口

PersonMapper接口:

package com.yixin.mybatis_plus.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yixin.mybatis_plus.pojo.Person;
import org.springframework.stereotype.Repository;// 在对应的Mapper上面继承基本的类 BaseMapper
@Repository// 代表持久层
public interface PersonMapper extends BaseMapper<Person> {// 所有的CRUD操作都已经编写完成了// 我们不需要像以前的配置一大堆文件了!
}

1.7 主启动类添加注解扫描

注意:在主启动类上去扫描我们的mapper包下的所有接口

package com.yixin.mybatis_plus;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan("com.yixin.mybatis_plus.mapper")
@SpringBootApplication
public class MybatisPlusApplication {public static void main(String[] args) {SpringApplication.run(MybatisPlusApplication.class, args);}}

1.8 测试

package com.yixin.mybatis_plus;import com.yixin.mybatis_plus.mapper.PersonMapper;
import com.yixin.mybatis_plus.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;@SpringBootTest
class MybatisPlusApplicationTests {@Autowiredprivate PersonMapper personMapper;@Testvoid contextLoads() {List<Person> personList = personMapper.selectList(null);personList.forEach(System.out::println);}}

结果:

img

这样就搭建成功了!

配置日志

通过以上的输出,我们并不知道其sql是怎么执行的,我们为了进一步探究其执行过程,我们在配置文件中加上日志配置

application.properties:

# 配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

我们再次输出:

img

通过这样的日志输出,我们就知道MyBatis-Plus到底帮我们执行了什么样操作。

二、增删查改操作

2.1 查询操作

2.1.1 selectById

需求:查询id为1的用户信息。

代码实现:

    @Testvoid test() {Person person = personMapper.selectById(1);System.out.println(person);}

2.1.2 selectList

需求:查询全部的用户信息。

代码实现:

    @Testvoid contextLoads() {List<Person> personList = personMapper.selectList(null);personList.forEach(System.out::println);}

2.1.3 selectBatchIds

需求:查询id为1和3的用户信息。

代码实现:

    @Testvoid test2() {List<Person> personList = personMapper.selectBatchIds(Arrays.asList(1,3));personList.forEach(System.out::println);}

2.1.4 selectByMap

需求:查询name为yixin,并且年龄为18岁的用户信息。

代码实现:

    @Testvoid test3() {HashMap<String ,Object> map=new HashMap<>();map.put("name","yixin");map.put("age",18);List<Person> personList = personMapper.selectByMap(map);personList.forEach(System.out::println);}

我们来看一下这条语句,它是如何生成的:

img

通过这样日志的查看,是不是就感觉马上就理解了!

2.2 增加操作

2.2.1 insert

需求:插入用户的信息如下

name:张三

age:21

email:test6@qq.com

代码实现:

    @Testvoid test4() {// 我们没有自定义id,它会帮我们自动生成idPerson person =new Person();person.setName("张三");person.setAge(21);person.setEmail("test6@qq.com");int result=personMapper.insert(person);System.out.println(result);// 受影响的行数System.out.println(person);//可以发现,id会自动回填}

结果:

img

数据库插入的id的默认值为:全局的唯一id

2.2.2 自增Id

如果我们不想他每次都给我们随机生成id,而是希望通过在原有id基础上进行自增,那么我们可以这么操作。

第一步:设置数据库主键id为自增。

img

第二步:在实体类的id属性增加注解@TableId(type = IdType.AUTO)

package com.yixin.mybatis_plus.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;
}

然后我们再进行多次插入,看看是否会进行自增操作。

img

可以发现,能够成功的进行自增操作了!

对于每一个id,大家不用担心会重复,因为其采用的是【雪花算法】生成的,可以保证id几乎全球唯一!

雪花算法

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。

其核心思想是:

使用41bit作为毫秒数,

10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),

12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),

最后还有一个符号位,永远是0。

2.3 删除操作

2.3.1 deleteById

需求:删除id为5的用户信息。

代码实现:

    @Testvoid test6() {int result=personMapper.deleteById(5L);System.out.println(result);// 受影响的行数}

2.3.2 deleteByMap

需求:删除姓名为 Sandy,并且年龄为21的用户信息。

代码实现:

    @Testvoid test7() {HashMap<String, Object> map=new HashMap<>();map.put("name","Sandy");map.put("age",21);int result=personMapper.deleteByMap(map);System.out.println(result);// 受影响的行数}

2.4 更新操作

需求:将id为2的用户的姓名更改为"一心同学"

代码实现:

    @Testvoid test5() {Person person =new Person();person.setId(2L);person.setName("一心同学");person.setAge(20);person.setEmail("test2@qq.com");int result=personMapper.updateById(person);System.out.println(result);// 受影响的行数}

小结

以上就是对【MyBatis-Plus】基础入门【增删改查】的讲解,看到以上对CRUD的操作是不是感觉特别清爽,而【MyBatis-Plus】的功能不仅仅如此,下一篇博客【一心同学】将会对其【注解】进行讲解。

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

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

相关文章

让程序员最爽的ThreadLocal使用姿势

一、常见场景 ​ 1、ThreadLocal作为线程上下文副本&#xff0c;那么一种最常见的使用方式就是用来方法隐式传参&#xff0c;通过提供的set()和get()两个public方法来实现在不同的方法中的参数传递。对于编程规范来说&#xff0c;方法定义的时候是对参数个数是有限制的&#x…

一场事故告诉你zookeeper和nacos谁更适合做注册中心

前言 ​ 在分布式系统中&#xff0c;注册中心充当着重要角色&#xff0c;是服务发现、客户端负载均衡中不可缺少的一员。注册中心除了能够实现基本的功能外&#xff0c;他的稳定性、可用性和健壮性对整个分布式系统的流畅运行影响重大。dubbo作为国内一款主流的分布式系统&…

Mysql执行计划含义,mysql执行计划介绍

烂sql不仅直接影响sql的响应时间&#xff0c;更影响db的性能&#xff0c;导致其它正常的sql响应时间变长。如何写好sql&#xff0c;学会看执行计划至关重要。下面我简单讲讲mysql的执行计划&#xff0c;只列出了一些常见的情况&#xff0c;希望对大家有所帮助。测试表结构&…

寄生虫php版,-PHP版SEO最新教材版排名DeDeCms寄生虫V90繁殖

今天视频教程演示说明下PHP寄生虫服务端的使用。主要在很多搭建的过程中会出错&#xff0c;今天主要就讲解下寄生虫配置常见的问题。那么同样也可以看下我们之前的通用版寄生虫使用教程[通用版教程在文件夹中有]&#xff0c;本教程是针对PHP版本的寄生虫服务端进行配置演示。继…

MySQL中 JSON 数据类型应用

前言 今天接触到mysql中json数据类型&#xff0c;之前不知道有这个类型&#xff0c;今天学习一下。 JSON我相信大家都已经很熟悉了&#xff0c;但在 MySQL中&#xff0c;直至 5.7 版本中&#xff0c;才正式引入 JSON数据类型。在次之前&#xff0c;我们通常使varchar或text数…

MySql中json类型的使用___mybatis存取mysql中的json

MySql中json类型的使用 MySQL从5.7.8起开始支持JSON字段&#xff0c;这极大的丰富了MySQL的数据类型。也方便了广大开发人员。但MySQL并没有提供对JSON对象中的字段进行索引的功能&#xff0c;至少没有直接对其字段进行索引的方法。本文将介绍利用MySQL 5.7中的虚拟字段的功能…

百度下拉词+php,百度下拉词是如何生成的?

我们在百度搜索某一词汇的时候&#xff0c;都会在搜索框下面弹出一些相关性和搜索次数比较多的语句或词语&#xff0c;我们在百度上搜索一下&#xff0c;就可以看到用户平时搜索习惯&#xff0c;搜索爱好是什么。护发下拉很多小伙伴就又有疑问了&#xff1a;这些下拉词是根据什…

python元组赋值给变量,Python的赋值

一、序列解包多个赋值操作同时进行&#xff1a;赋值多个值后面再遇到对多个变量赋值时&#xff0c;就不需要对一个变量赋完值再对另一个变量赋值了&#xff0c;用一条语句就可以搞定&#xff0c;例如&#xff1a;再次赋值由输出结果看到&#xff0c;x和y的值交换了&#xff0c;…

微服务,你得知道这

目录 一、业务场景介绍 二、Spring Cloud核心组件&#xff1a;Eureka 三、Spring Cloud核心组件&#xff1a;Feign 四、Spring Cloud核心组件&#xff1a;Ribbon 五、Spring Cloud核心组件&#xff1a;Hystrix 六、Spring Cloud核心组件&#xff1a;Zuul 七、总结 概述…

分布式和微服务的区别

分布式和微服务的区别 1.颜老师&#xff0c;分布式和微服务有什么区别呢&#xff1f;网上说啥的都有&#xff0c;越看越晕了。 答&#xff1a;分布式的核心就一个字&#xff1a;拆。只要是将一个项目拆分成了多个模块&#xff0c;并将这些模块分开部署&#xff0c;那就算是分布…

Oracle数据库空间突然增大,Oracle 表空间异常增长过快解决方法

1. 首先用语句查询容量大于1G的数据段select segment_name,sum(bytes)/1024/1024 from dba_segments group by segment_name having sum(bytes)/1024/1024>1000;得到如下结果&#xff1a;SYS_LOB0000136091C00003$$ 255332MSYS_LOB0000136441C00004$$ 7170MSYS_C…

分布式和微服务是什么?二者的区别又是什么?

一、分布式系统 在《分布式系统原理与范型》一书中有如下定义&#xff1a; “分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统”&#xff1b; 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统…

SpringCloud 超详细个人笔记

文章目录SpringCloud1、常见面试题2、微服务概述2.1、什么是微服务2.2、微服务和微服务架构2.3、微服务优缺点2.4、微服务技术栈有哪些&#xff1f;2.5、为什么选择SpringCloud 作为微服务架构2.5.1、选型依据2.5.2、当前各大IT公司用的微服务架构有哪些&#xff1f;2.5.3、各微…

oracle server process,Oracle体系结构及备份(四)server-process

一 什么是服务器进程 除了 Oracle 的后台进程外&#xff0c;还有一些进程是代表用户的&#xff0c;称为服务器进程。这些服务器进程负责按照用户的要求检索数据&#xff0c;并将结果返回给用户。此外&#xff0c;还负责为用户修改缓冲区高数缓存中的数据。 当用户连接到 Oracle…

潘多拉路由器搭建php,MT7620A 无线路由 极路由 1S 定制版 OPERWRT 潘多拉 中继 营销...

定制版 机器 非原版极路由 1S原版极路由下面连接购买https://item.taobao.com/item.htm?id527531952640这个机器是大客户 定制版 营销路由 硬件和极路由 1S 完全相同&#xff0c;只简化了 SD卡座更换为塑胶外壳可以自己DIY 增加USB 接口和SD卡座电源接口为 MICRO USB接口&…

linux close 头文件,Linux open close read write lseek函数的使用

我们经常需要在Linux中进行文件操作&#xff0c;今天我就来分享下文件操作用到的一些函数1 open所需头文件&#xff1a;函数原型&#xff1a;int open(const char *pathname,flags,int perms)pathname&#xff1a;被打开的文件名&#xff0c;可包含路径flag &#xff1a;文件打…

顺序表的实现(头插、尾插、头删、尾删、查找、删除、插入)

目录 一. 数据结构相关概念​ 二、线性表 三、顺序表概念及结构 3.1顺序表一般可以分为&#xff1a; 3.2 接口实现&#xff1a; 四、基本操作实现 4.1顺序表初始化 4.2检查空间&#xff0c;如果满了&#xff0c;进行增容​编辑 4.3顺序表打印 4.4顺序表销毁 4.5顺…

为什么有了接口还要增加一层抽象类?

文章目录接口&#xff1a;抽象类&#xff1a;区别&#xff1a;表象&#xff1a;深层次理解&#xff1a;类图使用抽象类前使用抽象类后为什么有了接口还要增加一层抽象类&#xff1f;接口&#xff1a; 接口里的方法和抽象类中的方法一样&#xff0c;它的方法是抽象的&#xff0…

linux iptables 编译,Linux下编译安装iptables

Linux下如何编译安装iptables实例&#xff1a;先卸载系统已经安装的iptables&#xff0c;卸载前需备份三个文档&#xff1a;iptables启动脚本&#xff0c;iptables-config配置文档&#xff0c;以及已经建立好的iptables规则文档[rootlinuxidc ~]# cp /etc/init.d/iptables ~/ip…

linux密文解密工具,Linux之加密解密工具openssl的用法以及自建CA

在Linux下的安全工具openssl【安全特性】1、保密性&#xff1a;数据保密性、隐私性2、完整性&#xff1a;数据完整性、系统完整性3、可用性4、真实性&#xff1a;确保数据发送方不是被替换的5、可追溯性【安全***】被动***&#xff1a;窃听主动***&#xff1a;伪装、重播、消息…