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

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

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

相关文章

保姆级教程:Linux (Ubuntu) 部署流光卡片开源 API

流光卡片 API 开源地址 Github&#xff1a;https://github.com/ygh3279799773/streamer-card 流光卡片 API 开源地址 Gitee&#xff1a;https://gitee.com/y-gh/streamer-card 流光卡片在线使用地址&#xff1a;https://fireflycard.shushiai.com/ 等等&#xff0c;你说你不…

0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)

小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了&#xff0c;如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…

C++线程安全队列

在 C 中&#xff0c;多线程队列&#xff08;queue&#xff09;的实现通常需要考虑线程安全问题&#xff0c;特别是在多个线程需要同时对队列进行操作时。C 标准库中的 std::queue 并不是线程安全的&#xff0c;因此我们需要引入额外的机制来确保线程安全。常用的方法是使用互斥…

FullCalendar的使用,react日历组件

1.下载 yarn add fullcalendar/core fullcalendar/react fullcalendar/daygrid 2.运行 import React from react; import FullCalendar from "fullcalendar/react"; import dayGridPlugin from "fullcalendar/daygrid";const ExperimentalSchedule () …

2024百度之星第三场第一题 数星星

天上有 n 颗星星&#xff0c;每颗星星自第 bi​ 秒开始&#xff08;包含第 bi​ 秒&#xff09;&#xff0c;每 ai​ 秒便会闪烁一次&#xff0c;小度 今晚有一点失眠&#xff0c;所以他想来数星星&#xff0c;天上的星星每闪烁一次&#xff0c;小度便会在心中记一次数&#xf…

初识STM32:寄存器编程 × 库函数编程 × 开发环境

STM32的编程模型 假如使用C语言的方式写了一段程序&#xff0c;这段程序首先会被烧录到芯片当中&#xff08;Flash存储器中&#xff09;&#xff0c;Flash存储器中的程序会逐条的进入CPU里面去执行。 CPU相当于人的一个大脑&#xff0c;虽然能执行运算和执行指令&#xff0c;…

hutool ExcelUtil 导出导入excel

引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.15</version></dependency>文件导入 public void savelist(String filepath,String keyname){ExcelReader reader Exce…

面试官:讲一下如何终止一个 Promise 继续执行

我们知道 Promise 一旦实例化之后&#xff0c;状态就只能由 Pending 转变为 Rejected 或者 Fulfilled&#xff0c; 本身是不可以取消已经实例化之后的 Promise 了。 但是我们可以通过一些其他的手段来实现终止 Promise 的继续执行来模拟 Promise 取消的效果。 Promise.race …

索引知识总结

一、什么是索引&#xff1f; 索引是在数据库管理中一个非常重要的概念&#xff0c;它是一种数据结构&#xff0c;设计用于提高数据库查询的效率。索引类似于书籍的目录或索引页&#xff0c;可以帮助数据库管理系统快速定位和检索数据&#xff0c;而不必检查数据库中的每一行。…

SAP_MMABAP模块_MM60物料清单新增物料组描述字段

业务背景&#xff1a; 用户需要在系统标准的物料主数据查询报表MM60中&#xff0c;添加物料组描述&#xff0c;一直以来&#xff0c;我都觉得标准的MM60显示的内容字段不够多&#xff0c;不太好用。 以往都是给用户新开发一个物料主数据查询报表来解决的&#xff0c;但是这次刚…

数学建模及国赛

认识数学建模及国赛 认识数学建模 环境类&#xff1a;预测一下明天的气温 实证类&#xff1a; 评价一下政策的优缺点 农业类&#xff1a; 预测一下小麦的产量 财经类&#xff1a; 分析一下理财产品的最优组合 规划类&#xff1a; 土地利用情况进行 合理的划分 力学类&#xf…

ProFuzzBench入门教学——使用(Ubuntu22.04)

ProFuzzBench是网络协议状态模糊测试的基准测试。它包括一套用于流行协议&#xff08;例如 TLS、SSH、SMTP、FTP、SIP&#xff09;的代表性开源网络服务器&#xff0c;以及用于自动执行实验的工具。详细参考&#xff1a;阅读笔记——《ProFuzzBench: A Benchmark for Stateful …

一句话彻底搞懂Java的编译和执行过程

编译和运行可以在不同的计算机上实现。 编译阶段&#xff1a;由Javac编译器将 .Java 的源文件编译为 .class 的字节码文件&#xff1b; 运行阶段&#xff1a; jvm中Java编译器运行 .class 的字节码文件&#xff0c;运行过程中&#xff0c;类加载器从硬盘中找到该字节码文件并…

WPF引入多个控件库使用

目的 设计开发时有的控件库的一部分符合我们想要的UI样式&#xff0c;另一部分来自另一个控件库&#xff0c;想把两种库的样式做一个整合在同一个控件资源上。单纯通过引用的方式会导致原有样式被覆盖。这里通过设置全局样式的方式来实现。 1.安装控件库nuget包&#xff1a;H…

Spring添加自定义拦截器的方法

一、添加一个自定义拦截器并实现HandlerInterceptor方法 public class CartInterceptor implements HandlerInterceptor {//ThreadLocal实质是个map&#xff0c;在同一个线程共享数据public static ThreadLocal<UserInfoTO> threadLocal new ThreadLocal<>();/* …

uniapp 防止重复提交数据

当用户快速点击按钮时候。我们可以统一在 请求拦截 中做防止重复提交数据的处理 以下是使用uview2封装的request请求 import { autoLogin, getUserInfo } from /utils/method.js import { refreshToken } from /api/login.js const serversUrl require(./serversUrl.js).ser…

Webpack: 模块编译打包及运行时Runtime逻辑

概述 回顾最近几节内容&#xff0c;Webpack 运行过程中首先会根据 Module 之间的引用关系构建 ModuleGraph 对象&#xff1b;接下来按照若干内置规则将 Module 组织进不同 Chunk 对象中&#xff0c;形成 ChunkGraph 关系图。 接着&#xff0c;构建流程将来到最后一个重要步骤…

openresty 清空共享字典

在 OpenResty 中&#xff0c;可以使用 lua_shared_dict 来实现共享字典。清空共享字典的方法非常简单&#xff0c;只需调用共享字典的 flush_all 方法。以下是一个完整的示例&#xff0c;展示了如何在 OpenResty 中清空共享字典&#xff1a; Nginx 配置 首先&#xff0c;定义…

Argo CD入门、实战指南

1. Argo CD概述 1.1 什么是 Argo CD Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。 1.2 为什么选择 Argo CD 应用程序定义、配置和环境应具有声明性并受版本控制。应用程序部署和生命周期管理应自动化、可审计且易于理解。 2. Argo CD基础知识 在有效使用 Ar…

中职网络安全B模块渗透测试server2003

通过本地PC中渗透测试平台Kali对服务器场景Windows进⾏系统服务及版本扫描渗透测 试&#xff0c;并将该操作显示结果中Telnet服务对应的端⼝号作为FLAG提交 使用nmap扫描发现目标靶机开放端口232疑似telnet直接进行连接测试成功 Flag&#xff1a;232 通过本地PC中渗透测试平台…