Spring Boot整合MyBatis-Plus以及实现分页

MyBatis-Plus 是 MyBatis 的一个增强工具包,它在原有的 MyBatis 框架之上提供了更多便捷的功能和增强,有助于简化开发流程、提高开发效率。以下是 MyBatis-Plus 的一些主要特点和功能:

  1. CRUD 操作增强: MyBatis-Plus 提供了一套强大的 CRUD 方法,可以帮助开发者快速完成常见的数据库操作,无需编写繁琐的 SQL 语句,从而简化了数据访问的操作。

  2. 条件构造器: MyBatis-Plus 提供了灵活的条件构造器,可以方便地动态拼接 SQL 条件,支持链式调用,使得条件构造更加简单和灵活。

  3. 代码生成器: MyBatis-Plus 提供了代码生成器工具,能够根据数据库表结构自动生成 Entity、Mapper、Service、Controller 等代码,大大减少了开发者的工作量。

  4. 性能优化: MyBatis-Plus 对 MyBatis 进行了一系列的性能优化,提升了查询的效率和性能,使得系统更加稳定和高效。

  5. 自动填充: MyBatis-Plus 支持实体类字段的自动填充功能,可以在插入或更新数据时自动填充指定的字段,例如创建时间、更新时间等。

  6. 乐观锁和逻辑删除: MyBatis-Plus 提供了乐观锁和逻辑删除的功能,开发者可以通过简单的配置,在实体类中实现乐观锁和逻辑删除的功能,提高数据安全性和稳定性。

总的来说,MyBatis-Plus 是一个功能丰富、易用的 MyBatis 增强工具包,可以帮助开发者更加便捷地进行数据库操作和开发工作。

1、引用Maven依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version>
</dependency>
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>2.1.0</version>
</dependency>

2、YAML配置

spring:application:name: test-servicedatasource:driver-class-name: org.postgresql.Driverurl: jdbc:postgresql://127.0.0.1:31789/test-dev?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=trueusername: testpassword: 123druid:# 连接池 初始连接数量initial-size: 10# 连接池 最大连接数量max-active: 200# 获取连接时最大等待时间,60秒。max-wait: 60000# Destory线程中如果检测到当前连接闲置时间大于 5分钟,则关闭当前连接。min-evictable-idle-time-millis: 300000# 最小连接数量min-idle: 10#时区转换jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss
#mybatis配置
mybatis-plus:global-config:db-config:logic-delete-field: isDelete # 全局逻辑删除的实体字段名logic-delete-value: true # 逻辑已删除值logic-not-delete-value: false # 逻辑未删除值configuration:map-underscore-to-camel-case: true  #下划线命名转换为驼峰命名auto-mapping-behavior: full #自动映射所有字段log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #日志输出mapper-locations: classpath*:mappers/**/*Mapper.xml #指定 Mapper XML 文件位置

3、entity实体类

/*** @author Lucas* date 2024/4/8 11:40* description 测试表*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("sys_test")
public class SysTest {/*** ID*/@TableIdprivate Integer id;/*** 标题*/private String title;/*** 内容*/private String content;/*** 创建时间*/private Date createTime;/*** 逻辑删除(false:未删除、true:删除)*/private Boolean isDelete;
}

3、分页DTO

/*** @author Lucas* date 2024/4/1 19:02* description 分页DTO*/
@Data
public class PageDto {/*** 页码*/@NotNull(message = "page不允许为空")private Integer page;/*** 条数*/@NotNull(message = "size不允许为空")private Integer size;
}

4、测试Service

/*** @author Lucas* date 2024/4/8 11:49* description 测试Service*/
public interface TestService extends IService<SysTest> {/*** 测试分页* @param testPageDto* @return*/CommonPage<TestVo> testListPage(TestPageDto testPageDto);
}

5、测试ServiceImpl

/*** @author Lucas* date 2024/4/8 11:50* description 测试ServiceImpl*/
@Service
public class TestServiceImpl extends ServiceImpl<SysTestMapper, SysTest> implements TestService {@Overridepublic CommonPage<TestVo> testListPage(TestPageDto dto) {PageHelper.startPage(dto.getPage(), dto.getSize());LambdaQueryWrapper<SysTest> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(SysTest::getIsDelete, Boolean.FALSE);queryWrapper.eq(StrUtil.isNotBlank(dto.getName()), SysTest::getName, dto.getName());List<SysTest> sysTests = this.list(queryWrapper);return new CommonPage<>().restPage(sysTests, TestVo.class);}
}

6、测试Mapper

/*** @author Lucas* date 2024/4/8 11:46* description 测试Mapper*/
@Mapper
public interface SysTestMapper extends BaseMapper<SysTest> {/*** 测试接口* @param dto* @param userId* @return*/List<TestVo> testList(@Param("dto") TestDto dto, @Param("userId") String userId);}

7、resources/mappers目录文件下SysTestMapper.xml(自定义SQL操作)

<?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.test.service.mapper.SysTestMapper"><select id="testList" resultType="com.test.service.model.vo.TestVo">selectid,name,create_timefrom sys_testwhere user_id = #{userId}<if test="dto.name != null and dto.name != '' ">AND name = #{dto.name}</if><if test="dto.startTime != null">AND create_time &gt;= #{dto.startTime}</if><if test="dto.endTime != null">AND create_time &lt;= #{dto.endTime}</if></select></mapper>

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

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

相关文章

HTTP 状态码有哪些?分别表示什么?

状态码由三位数字组成&#xff0c;第一位数字表示响应的类型&#xff0c;常用的状态码有五大类&#xff1a; 1xx&#xff1a;表示服务器已接收了客户端请求&#xff0c;客户端可继续发送请求 2xx&#xff1a;表示服务器已成功接收到请求并进行处理 200 OK&#xff1a;表示客户…

Java基础笔记(一)

一、面向对象高级基础 1.Java的动态绑定机制 public class DynamicBinding {public static void main(String[] args) {//a 的编译类型 A, 运行类型 BA a new B();//向上转型System.out.println(a.sum());//40 子类sum()注释后-> 30System.out.println(a.sum1());//30 子类…

android-自定义TextView在文字内容末尾添加图片icon、可以添加间距

样式示意图 自定义属性 style.xml <declare-styleable name"IconLabelTextView"><attr name"iconSrc" format"reference"/><attr name"iconPaddingStart" format"dimension"/><attr name"iconPad…

访问网站显示不安全是什么原因?怎么解决?

访问网站时显示“不安全”&#xff0c;主要原因以及解决办法&#xff1a; 1.没用HTTPS加密&#xff1a;网站还在用老的HTTP协议&#xff0c;数据传输没加密&#xff0c;容易被人偷看或篡改。解决办法是网站管理员启用HTTPS&#xff0c;也就是给网站装个“SSL证书”。这个是最常…

模块十三 异常_Object

回顾与重点 模块十二回顾 权限修饰符&#xff1a; public → protected → 默认 → private a. 构造一般用public&#xff1a;便于new对象 b. 成员方法一般用public&#xff1a;便于调用 c. 属性一般用private&#xff1a;封装思想 final&#xff1a;最终的 a. 修饰类&#x…

k8s_入门_kubelet安装

安装 在大致了解了一些k8s的基本概念之后&#xff0c;我们实际部署一个k8s集群&#xff0c;做进一步的了解 1. 裸机安装 采用三台机器&#xff0c;一台机器为Master&#xff08;控制面板组件&#xff09;两台机器为Node&#xff08;工作节点&#xff09; 机器的准备有两种方式…

前端开发之el-table(vue2中)固定列fixed滚动条被固定列盖住

固定列fixed滚动条被固定列盖住 效果图前言解决方案 效果图 前言 在使用fixed固定列的时候会出现滚动条被盖住的情况 解决方案 改变el-table固定列的计算高度即可 .el-table {.el-table__fixed-right,.el-table__fixed {height:auto !important;bottom:15px !important;}}

数据结构(七)——查找的基本概念

七、查找 7.1 查找的基本概念 7.1.1 基本概念 查找 —— 在数据集合中寻找满⾜某种条件的数据元素的过程称为查找 查找表&#xff08;查找结构&#xff09;—— ⽤于查找的数据集合称为查找表&#xff0c;它由同⼀类型的数据元素&#xff08;或记录&#xff09;组成 关键字 …

Unity抛物线目标点打击

工具类 public class ShootTool {private Transform start, target, control;private float speed, height;private Vector3 moveDir Vector3.zero;private Vector3[] moveNode;private int moveIndex 5;private int segmentNumber 30;private LineRenderer lineRenderer …

Golang | Leetcode Golang题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; func fourSum(nums []int, target int) (quadruplets [][]int) {sort.Ints(nums)n : len(nums)for i : 0; i < n-3 && nums[i]nums[i1]nums[i2]nums[i3] < target; i {if i > 0 && nums[i] nums[i-1] || nums[i]…

数字化智慧养老:引领老年人融入科技时代新生活

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 人类社会已经步入了一个全新的数字时代。在这个时代&#xff0c;互联网、大数据、人工智…

PDF锐化

PDF Shaper Ultimate(pdf转图片) 编辑->添加文件->选中一个要处理的pdf 操作->转换->PDF转为图片 ComicEnhancerPro设置(把图片锐化) PDF Shaper Ultimate(图片转pdf) 编辑-添加图片->选中所有锐化处理后的图片 转换->图片转为pdf&#xff08;会把所有图…

全国火情预报卫星遥感应用方案

一、引言 火情预报应急卫星遥感解决方案是一种利用卫星遥感技术进行火灾预警和应急响应的方法。该方案通过实时监测和分析森林、草原等地区的火情信息&#xff0c;为火灾预警和应急响应提供科学依据&#xff0c;有效减少火灾造成的损失。本技术文档将介绍火情预报应急卫…

Java | Leetcode Java题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> quadruplets new ArrayList<List<Integer>>();if (nums null || nums.length < 4) {return…

el-cascader的懒加载模式怎么设置默认值

点击修改会跳出一个dialog&#xff0c;dialog需要显示信息&#xff0c;其中地址使用el-cascader标签并使用懒加载实现&#xff0c;地址数据都是从后台获取&#xff0c;如果直接使用v-model绑定默认值&#xff0c;会不显示。 解决方法1&#xff1a; <el-cascader class&quo…

React - 请你说一说setState是同步的还是异步的

难度级别:中高级及以上 提问概率:70% 在React项目中,使用setState可以更新状态数据,而不能直接使用为this.state赋值的方式。而为了避免重复更新state数据,React首先将state添加到状态队列中,此时我们可以通过shouldComponentUpdate这个钩…

速盾:前端挂载到cdn托管

随着互联网的发展&#xff0c;网站访问速度成为了用户考虑的重要因素之一。而前端挂载到CDN&#xff08;内容分发网络&#xff09;托管&#xff0c;可以极大地提高网站的访问速度&#xff0c;带来许多优势。下面我们将详细介绍一下前端挂载到CDN托管的优势。 加速网站访问速度…

Python编程启航:大学生如何用代码编织未来

开篇 掌握Python&#xff0c;打开编程世界的大门&#xff01;作为一名大学生&#xff0c;你是否渴望在编程的海洋中遨游&#xff0c;用代码编织未来&#xff1f; &#x1f31f;&#x1f680;现在就跟随我一起&#xff0c;探索Python编程的奇妙之旅&#xff0c;解锁学习技巧、…

HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP3.0的区别

一、HTTP/1.0 1996年5月&#xff0c;HTTP/1.0版本发布&#xff0c;为了提高系统的效率&#xff0c;HTTP/1.0规定浏览器与服务器只保持短暂的连接&#xff0c;浏览器的每次请求都需要与服务器建立一个TCP连接&#xff0c;服务器完成请求处理后立即断开TCP连接&#xff0c;服务器…

数据库——实验6 视图的创建与使用

1. 视图的定义 视图是根据需要以一个表或多个表为基础&#xff0c;选择满足一定条件的行或列数据的静态定义。它是一种逻辑对象&#xff0c;是一种虚拟表。视图并不生成行或列的永久副本&#xff0c;并不占用存储空 间&#xff0c;也就是说&#xff0c;视图就是保存在数据库中…