当前位置: 首页 > news >正文

MyBatisPlus实现增删改查

文章目录

  • MyBatisPlus实现增删改查
    • 基本操作
    • 分页查询
      • 配置分页插件

MyBatisPlus实现增删改查

实体类GkUser

package com.geekmice.springbootselfexercise.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.ToString;
import org.nustaq.serialization.annotations.Serialize;/*** (GkUser)实体类** @author pingmingbo* @since 2024-06-21 14:05:12*/
@TableName(value = "gk_user")
@Data
@ToString
@Serialize
public class GkUser{/*** 主键ID*/@TableId(type = IdType.AUTO)private Long id;/*** 姓名*/@TableField(value = "name")private String name;/*** 年龄*/@TableField(value = "age")private Integer age;/*** 邮箱*/@TableField(value = "email")private String email;}

数据层GkUserDao

package com.geekmice.springbootselfexercise.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.geekmice.springbootselfexercise.entity.GkUser;/*** (GkUser)表数据库访问层** @author pingmingbo* @since 2024-06-21 14:05:12*/
public interface GkUserDao extends BaseMapper<GkUser> {
}

映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.geekmice.springbootselfexercise.dao.GkUserDao"><resultMap type="com.geekmice.springbootselfexercise.entity.GkUser" id="GkUserMap"><result property="id" column="id" jdbcType="INTEGER"/><result property="name" column="name" jdbcType="VARCHAR"/><result property="age" column="age" jdbcType="INTEGER"/><result property="email" column="email" jdbcType="VARCHAR"/></resultMap></mapper>

业务层GkUserService

package com.geekmice.springbootselfexercise.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.geekmice.springbootselfexercise.entity.GkUser;/*** (GkUser)表服务接口** @author pingmingbo* @since 2024-06-21 14:05:12*/
public interface GkUserService extends IService<GkUser> {}package com.geekmice.springbootselfexercise.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.geekmice.springbootselfexercise.dao.GkUserDao;
import com.geekmice.springbootselfexercise.entity.GkUser;
import com.geekmice.springbootselfexercise.service.GkUserService;
import org.springframework.stereotype.Service;/*** (GkUser)表服务实现类** @author pingmingbo* @since 2024-06-21 14:05:12*/
@Service("gkUserService")
public class GkUserServiceImpl extends ServiceImpl<GkUserDao, GkUser> implements GkUserService {
}

基本操作

package com.geekmice.springbootselfexercise.first;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.geekmice.springbootselfexercise.SpringBootSelfExerciseApplication;
import com.geekmice.springbootselfexercise.dao.GkUserDao;
import com.geekmice.springbootselfexercise.entity.GkUser;
import com.geekmice.springbootselfexercise.service.GkUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;/*** @BelongsProject: spring-boot-self-exercise* @BelongsPackage: com.geekmice.springbootselfexercise.first* @Author: pingmingbo* @CreateTime: 2024-07-09  10:12* @Description: mybatisplus实现增删改查* @Version: 1.0*/
@SpringBootTest(classes = SpringBootSelfExerciseApplication.class)
@RunWith(SpringRunner.class)
@Slf4j
public class FirstTest {@ResourceGkUserDao gkUserDao;@ResourceGkUserService gkUserService;@Testpublic void t1() {// 初始数据// id  name age email// 1  Jone 18 test1@baomidou.com// 2  Jack 20 test2@baomidou.com// 3  Tom 28 test3@baomidou.com// 4  Sandy 21 test4@baomidou.com// 5  Billie 24 test5@baomidou.com// 1、查询GkUser gkUser = gkUserDao.selectById(1);log.info("1.1、根据主键id查询 gkUser : [{}]", gkUser);List<GkUser> gkUsers = gkUserDao.selectList(null);log.info("1.2、查询所有 gkUsers : [{}]", CollectionUtils.size(gkUsers));// todo 分页查询 通过分页插件PaginationInnerInterceptor实现// 批量查询List<Integer> list = new ArrayList(16);list.add(1);list.add(2);List<GkUser> batchUsers = gkUserDao.selectBatchIds(list);log.info("1.3、批量主键查询 batchUsers : [{}]", CollectionUtils.size(batchUsers));// 根据条件批量查询QueryWrapper<GkUser> queryWrapper = new QueryWrapper<>();queryWrapper.le("id", 2);List<GkUser> gkUsers1 = gkUserDao.selectList(queryWrapper);log.info("1.4、根据条件批量查询 gkUsers1 : [{}]", CollectionUtils.size(gkUsers1));// 2、增加GkUser insertGkUser = gkUserDao.selectById(6);if (Objects.isNull(insertGkUser)) {GkUser domain = new GkUser();domain.setAge(10);domain.setEmail("test6@baomidou.com");domain.setName("Rose");gkUserDao.insert(domain);}GkUser afterInsertGkUser = gkUserDao.selectById(6);log.info("2.1 添加数据 afterInsertGkUser : [{}]", afterInsertGkUser);// 3、修改GkUser updateGkUser = gkUserDao.selectById(6);GkUser domain = new GkUser();if (Objects.nonNull(updateGkUser)) {domain.setId(6L);domain.setAge(6);domain.setEmail("test66@baomidou.com");domain.setName("rose");gkUserDao.updateById(domain);log.info("3.1 更新一条数据 domain ");}System.out.println("aaa");UpdateWrapper<GkUser> singleUpdateWrapper = new UpdateWrapper<>();singleUpdateWrapper.lambda().in(GkUser::getId,list);singleUpdateWrapper.set("name","abc");gkUserService.update(singleUpdateWrapper);log.info("3.2 定制化修改");// 4、删除// 定制化条件删除QueryWrapper<GkUser> deleteWrapper = new QueryWrapper<>();deleteWrapper.lambda().le(GkUser::getId,1);gkUserService.remove(deleteWrapper);log.info("4.1 根据条件删除");gkUserService.removeById(2);log.info("4.2 根据主键删除");}
}

分页查询

配置分页插件

package com.geekmice.springbootselfexercise.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @BelongsProject: spring-boot-self-exercise* @BelongsPackage: com.geekmice.springbootselfexercise.config* @Author: pingmingbo* @CreateTime: 2023-08-09  09:29* @Description: mybatis配置信息* @Version: 1.0*/
@Configuration
@MapperScan(value = "com.geekmice.springbootselfexercise.dao")
public class MybatisPlusConfig {/*** 分页插件配置*/@Bean(name = "mybatisPlusInterceptor")public MybatisPlusInterceptor mybatisPlusInterceptor (){MybatisPlusInterceptor interceeptor = new MybatisPlusInterceptor();interceeptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceeptor;}}

如何使用

    Page<GkUser> gkUserPage = new Page<>(1,3);Page<GkUser> records = gkUserDao.selectPage(gkUserPage, null);log.info("records : [{}]" , records);

> Preparing: SELECT id,name,age,email FROM gk_user LIMIT ?
> Parameters: 3(Long)
<
Columns: id, name, age, email
<
Row: 3, Tom, 28, test3@baomidou.com
<== Row: 4, Sandy, 21, test4@baomidou.com
<== Row: 5, Billie, 24, test5@baomidou.com
<== Total: 3
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@67376bae]
2024-07-10 01:37:14.271 INFO 9164 — [ main] c.g.s.first.FirstTest : records : [com.baomidou.mybatisplus.extension.plugins.pagination.Page@135a8808]
2024-07-10 01:37:14.790 INFO 9164 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated…
2024-07-10 01:37:14.873 INFO 9164 — [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.

Process finished with exit code 0

相关文章:

MyBatisPlus实现增删改查

文章目录 MyBatisPlus实现增删改查基本操作分页查询配置分页插件 MyBatisPlus实现增删改查 实体类GkUser package com.geekmice.springbootselfexercise.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField;…...

【Rust】——不安全Rust

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…...

使机器人在执行任务时更加稳定

为了使机器人在执行任务时更加稳定&#xff0c;调整参数时需要考虑多个因素&#xff0c;如步态、速度、角度等。这些参数的调整需要基于实际环境、任务需求和机器人自身的物理特性。以下是一些具体的调整建议&#xff1a; 1. 调整步态和步高 gait_type3; step_height0.03;步态…...

FFmpeg学习(五)-- libswresample使用说明及函数介绍

libswresample Audio合成和重采样 libswresample库用来进行audio数据的合成和重采样操作。调用流程&#xff1a; 调用 swr_alloc 创建SwrContext结构体。设置SwrContext参数&#xff0c;有两种方法&#xff1a; 调用av_opt_set_xx函数逐项设置参数&#xff1b;swr_alloc_set_…...

车载视频监控管理方案:无人驾驶出租车安全出行的保障

近日&#xff0c;无人驾驶出租车“萝卜快跑”在武汉开放载人测试成为热门话题。随着科技的飞速发展&#xff0c;无人驾驶技术已逐渐从概念走向现实&#xff0c;特别是在出租车行业中&#xff0c;无人驾驶出租车的推出将为公众提供更为安全、便捷、高效的出行服务。 视频监控技…...

05STM32EXIT外部中断中断系统

STM32EXIT外部中断&中断系统 中断系统中断触发条件&#xff1a;中断处理流程和用途&#xff1a; STM32中断NVIC嵌套中断向量控制器基本结构NVIC基本结构NVIC优先级分组EXTI简介EXTI基本结构AFIO复用IO口EXTI内部框图旋转编码器简介硬件电路外设手册里的介绍NVIC中断使能寄存…...

MetaGPT和LangGraph对比

MetaGPT和LangGraph是两个不同的AI Agent框架&#xff0c;各有其特点和优势:MetaGPT: MetaGPT是一个多Agent协作框架&#xff0c;模拟软件公司的运作方式。它包含多个角色如产品经理、架构师、项目经理和工程师&#xff0c;每个角色都有特定的职责。MetaGPT采用对话模式&#…...

基于SpringBoot+Hadoop+python的物品租赁系统(带1w+文档)

基于SpringBootHadooppython的物品租赁系统(带1w文档) 基于SpringBootHadooppython的物品租赁系统(带1w文档) 物品租赁系统是电子、信息技术相结合&#xff0c;是一种必然的发展趋势。以互联网为基础&#xff0c;以服务于广大用户为目的&#xff0c;发展整体优势&#xff0c;扩…...

关于 RK3588刷镜像升级镜像”没有发现设备“ 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140287339 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

docker 上传镜像到hub仓库

要将 Docker 镜像上传到 Docker Hub&#xff0c;你需要按照以下步骤操作&#xff1a; 登录 Docker Hub 首先&#xff0c;你需要登录到 Docker Hub。打开终端并运行以下命令&#xff1a;docker login系统会提示你输入 Docker Hub 的用户名和密码。 如果密码忘记可以token登录&a…...

查询(q_proj)、键(k_proj)和值(v_proj)投影具体含义

查询(q_proj)、键(k_proj)和值(v_proj)投影&#xff0c;这些投影是自注意力机制的核心组件&#xff0c;特别是在Transformer架构中。 让我们通过一个简化的例子来说明&#xff1a; import numpy as np# 假设输入维度是4&#xff0c;注意力头数是2 input_dim 4 num_heads 2 …...

超详细版阿里云控制台环境配置+数据库配置

目录 一、登录阿里云控制台二、xshell建立远程连接1.安装xshell2.查看公网IP3.新建会话重置密码 三、搭建环境1.安装宝塔面板2.打开宝塔面板 四、安装配置MySQL1.安装2.放行端口号3.新建数据库4.测试连接数据库 一、登录阿里云控制台 登录阿里云控制台&#xff0c;找到实例&am…...

Linux:Linux网络总结(附下载链接)

文章目录 下载链接网络问题综合问题访问一个网页的全过程&#xff1f;WebSocket HTTPHTTP基本概念GET与POSTHTTP特性HTTP缓存技术HTTP的演变HTTP1.1 优化 HTTPSHTTP与HTTPS有哪些区别&#xff1f;HTTPS解决了HTTP的哪些问题&#xff1f;HTTPS如何解决的&#xff1f;HTTPS是如何…...

Cxx Primer-CP-2

开篇第一句话足见作者的高屋建瓴&#xff1a;类型决定程序中数据和操作的意义。随后列举了简单语句i i j;的意义取决于i和j的类型。若它们都是整形&#xff0c;则为通常的算术意义。若它们都为字符串型&#xff0c;则为进行拼接操作。若为用户自定义的class类型&#xff0c;则…...

OpenCV距离变换函数distanceTransform的使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 功能描述 distanceTransform是OpenCV库中的一个非常有用的函数&#xff0c;主要用于计算图像中每个像素到最近的背景&#xff08;通常是非零像素到零像素&…...

Service Mesh 是一种用于处理服务间通信的基础设施层

Service Mesh 是一种用于处理服务间通信的基础设施层&#xff0c;它通常与微服务架构一起使用&#xff0c;以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。Service Mesh 的一个流行实现是 Istio&#xff0c;它基于 Envoy 代理和 Kubernetes。 然而&#xff0…...

QML界面控件加载与显示顺序

一、QML界面控件加载顺序 QML在界面加载时的顺序和我们认知的有很大的不同&#xff0c;有时候会对我们获取参数以及界面实现造成很大的困扰 1、加载顺序 import QtQuick 2.12 import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.VirtualKeyboard 2.4Window {id: …...

C++从入门到起飞之——缺省参数/函数重载/引用全方位剖析!

目录 1.缺省参数 2. 函数重载 3.引⽤ 3.1 引⽤的概念和定义 3.2 引⽤的特性 3.3 引⽤的使⽤ 3.4 const引⽤ 3.5 指针和引⽤的关系 4.完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ C从入门到起飞 个人格言&#xff1a;悟已往之不谏…...

tkinter-TinUI-xml实战(12)pip可视化管理器

引言 pip命令行工具在平常使用方面确实足够简单&#xff0c;本项目只是作为TinUI多界面开发的示例。 当然&#xff0c;总有人想用GUI版pip&#xff0c;实际上也有。不过现在&#xff0c;我们就来手搓一个基于python和TinUI&#xff08;tkinter&#xff09;的pip可视化管理器。…...

Java中标识符和关键字

1.标识符 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }上述代码中在public class 后面的HelloWorld称为类名&#xff0c;main称为方法名&#xff0c;也可以将其称为标识符&#xff0c;即&#xff1a;在程…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...