MyBatisPlus之分页查询及Service接口运用

一、分页查询

1.1 基本分页查询

配置分页查询拦截器

package com.fox.mp.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class PageConfig {/*** 3.4.0之前的版本* @return*//* @Beanpublic PaginationInterceptor paginationInterceptor(){return  new PaginationInterceptor();}*//*** 3.4.0之后版本* @return*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}
}

进行分页查询

分析:其实我们一般不会利用到selectPage的返回值,这时因为其返回值其实还是我们传递page对象本身,因此我们一般不对其返回值进行利用。 

最终版本:

    @Testpublic void testPage(){IPage<User> page = new Page<>();//设置每页条数page.setSize(2);//设置查询第几页page.setCurrent(1);userMapper.selectPage(page, null);System.out.println(page.getRecords());//获取当前页的数据System.out.println(page.getTotal());//获取总记录数System.out.println(page.getCurrent());//当前页码}

 1.2 多表分页查询

①定义接口,定义方法 方法第一个测试定义成Page类型:

package com.fox.mp.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fox.mp.domain.Orders;
import org.springframework.core.annotation.Order;public interface OrderMapper extends BaseMapper<Order> {IPage<Orders> findAllOrders(Page<Orders> page);
}

在xml文件中无需关注分页具体操作,MP中我们刚刚配置的拦截器会帮我们实现:

<?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.fox.mp.mapper.OrderMapper"><select id="findAllOrders" resultType="com.fox.mp.domain.Orders">SELECTo.*,u.`user_name`FROMTB_USER u,orders oWHEREo.`user_id` = u.`id`</select>
</mapper>

 方法测试调用如下:

    @Autowiredprivate OrderMapper orderMapper;@Testpublic void testPage02(){Page<Orders> page = new Page<>();//设置每页大小page.setSize(2);//设置当前页码page.setCurrent(2);orderMapper.findAllOrders(page);System.out.println(page.getRecords());System.out.println(page.getTotal());}

二、Service 层接口

MP也为我们提供了Service层的实现。我们只需要编写一个接口,继承 IService,并创建一个接口实现类继承ServiceImpl,即可使用。

相比于Mapper接口,Service层主要是支持了更多批量操作的方法。

2.1 基本使用

改造前

 定义接口

public interface UserService {List<User> list();
}

 定义实现类:

@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> list() {return userMapper.selectList(null);}}

改造后

接口

public interface UserService extends IService<User> {}

实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {}

测试:

    @Autowiredprivate UserService userService;@Testpublic void testService() {List<User> list = userService.list();System.out.println(list);}

代码展示: 

2.2 自定义方法

 代码如下:

接口:

package com.fox.mp.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.fox.mp.domain.User;public interface UserService extends IService<User> {User test();
}

自定义实现类: 

package com.fox.mp.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fox.mp.domain.Orders;
import com.fox.mp.domain.User;
import com.fox.mp.mapper.OrderMapper;
import com.fox.mp.mapper.UserMapper;
import com.fox.mp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {@Autowiredprivate OrderMapper orderMapper;@Overridepublic User test() {UserMapper userMapper = getBaseMapper();List<Orders> orders = orderMapper.selectList(null);User user = userMapper.selectById(1);//查询用户对应的订单LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Orders::getId,3);List<Orders> ordersList = orderMapper.selectList(queryWrapper);return user;}
}

分析:

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

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

相关文章

【芯片设计- RTL 数字逻辑设计入门 11.1 -- 状态机实现 移位运算与乘法 1】

文章目录 移位运算与乘法状态机简介SystemVerilog中的测试平台VCS 波形仿真 阻塞赋值和非阻塞赋值有限状态机&#xff08;FSM&#xff09;与无限状态机的区别 本篇文章接着上篇文章【芯片设计- RTL 数字逻辑设计入门 11 – 移位运算与乘法】 继续介绍&#xff0c;这里使用状态机…

设计一个可以智能训练神经网络的流程

设计一个可以智能训练神经网络的流程,需要考虑以下几个关键步骤: 初始化参数:设定初始的batch size和learning rate,以及其他的神经网络参数。训练循环:开始训练过程,每次迭代更新网络的权重。监控loss:在每个训练周期(epoch)后,监控loss的变化情况。动态调整:根据l…

运放偏置电流Ibs消除方法-简单粗暴的使用电阻

1 电阻应用电阻之运放如何消除偏置电流的影响 我们会发现一个问题&#xff0c;或者前辈告诉我们无论是电压跟随或者正相比例还是其他运放应用电路&#xff0c;一定要在正相输入端串入一个电阻&#xff0c;而且这个电阻的值等于反向输入端反馈电阻网络的并联。 为什么要这么做…

C语言笔试题之求出三角形的最大周长

实例要求&#xff1a; 1、给定由一些正数&#xff08;代表长度&#xff09;组成的数组 nums &#xff1b;2、返回 由其中三个长度组成的、面积不为零的三角形的最大周长 &#xff1b;3、如果不能形成任何面积不为零的三角形&#xff0c;返回 0&#xff1b; 案例展示&#xff…

代码随想录算法训练营day14||二叉树part01、理论基础、递归遍历、迭代遍历、统一迭代

递归遍历 &#xff08;必须掌握&#xff09; 本篇将介绍前后中序的递归写法&#xff0c;一些同学可能会感觉很简单&#xff0c;其实不然&#xff0c;我们要通过简单题目把方法论确定下来&#xff0c;有了方法论&#xff0c;后面才能应付复杂的递归。 这里帮助大家确定下来递归…

Mobile ALOHA 2: An Enhanced Low-Cost Hardware for Bimanual Teleoperation

文章目录 1. Mobile ALOHA 11.1 项目地址 2. Mobile ALOHA 22.1 相关链接2.2 Whats upgraded in II ? Reference Stanford 最新家务机器人 1. Mobile ALOHA 1 Mobile ALOHA: Learning Bimanual Mobile Manipulation with Low-Cost Whole-Body Teleoperation 1.1 项目地址 htt…

C语言函数栈帧的创建和销毁(逐步分析)

什么是函数栈帧 我们在写C语言代码的时候&#xff0c;经常会把一个独立的功能抽象为函数&#xff0c;所以C程序是以函数为基本单位的。 那函数是如何调用的&#xff1f;函数的返回值又是如何返回的&#xff1f;函数参数是如何传递的&#xff1f;这些问题都和函数栈帧有关系。 …

基于AST实现一键自动提取替换国际化文案

背景&#xff1a;在调研 formatjs/cli 使用&#xff08;使用 formatjs/cli 进行国际化文案自动提取 &#xff09;过程中&#xff0c;发现有以下需求formatjs/cli 无法满足&#xff1a; id 需要一定的语义化&#xff1b; defaultMessage和Id不能直接hash转换&#xff1b; 需要…

STM32F1 - 启动文件startup_stm32f10x_hd.s

startup_stm32f10x_hd.s 1> 启动文件类型2> 启动文件干了点啥&#xff1f;2.1> 设置栈2.2> 设置堆2.3> 设置中断向量表2.4> 复位程序2.5> 中断服务函数2.6> 用户栈和堆的初始化 3> __main库函数 1> 启动文件类型 标准库中提供&#xff1a;启动文…

ThinkPad X201 经典小黑 折腾玩

前段时间&#xff0c;在折腾ThinkPad T430时&#xff0c;偶然看到了ThinkPad X200&#xff0c;一个12.1英寸的高端便携小本。 想当年&#xff0c;但那是总裁级别才能用的&#xff0c;应该是接近2万元&#xff0c;我们是一直用DELL的。 没想到的是&#xff0c;在海鲜市场上&am…

基于modbus rtu协议操作PLC的EPICS示例

硬件设备 本实验中使用到的设备如下&#xff1a; 1、S7-200 Smart SR20 PLC 作为受控设备&#xff0c;执行机构。 S7-200 Smart是西门子的一款小型PLC产品&#xff08;以下简称Smart系列&#xff09;。 Smart系列PLC是西门子公司经过大量调研&#xff0c;为中国小型自动化…

Javaweb之SpringBootWeb案例之登录校验功能的详细解析

2. 登录校验 2.1 问题分析 我们已经完成了基础登录功能的开发与测试&#xff0c;在我们登录成功后就可以进入到后台管理系统中进行数据的操作。 但是当我们在浏览器中新的页面上输入地址&#xff1a;http://localhost:9528/#/system/dept&#xff0c;发现没有登录仍然可以进…

五、优化日程(Optimize Your Schedule)

3. Optimize Your Schedule 三、优化日程 The right length of time for focus is the time you have available.If you only have half an hour to squeeze in on a side project, then that’s the time you have.If you can devote a block of four hours every morning, ma…

async 与 await(JavaScript)

目录捏 前言一、async二、await三、使用方法总结 前言 async / await 是 ES2017(ES8) 提出的基于 Promise 解决异步的最终方案。上一篇文章介绍了 回调地狱 与 Promise&#xff08;JavaScript&#xff09;&#xff0c;因为 Promise 的编程模型依然充斥着大量的 then 方法&#…

【力扣】查找总价格为目标值的两个商品,双指针法

查找总价格为目标值的两个商品原题地址 方法一&#xff1a;双指针 这道题和力扣第一题“两数之和”非常像&#xff0c;区别是这道题已经把数组排好序了&#xff0c;所以不考虑暴力枚举和哈希集合的方法&#xff0c;而是利用单调性&#xff0c;使用双指针求解。 考虑数组 pri…

可达鸭二月月赛——入门赛第四场(周三)题解

可达鸭二月月赛——入门赛第四场&#xff08;周三&#xff09;题解 博文作者&#xff1a;王胤皓 题目&#xff08;可达鸭学员应该能打开&#xff0c;打不开的题解里有题目简述&#xff09;题解(点击即可跳转&#xff0c;里面有我的名字)T1 小可喝水linkT2 \texttt{ }\texttt{ …

数据结构:双向链表

文章目录 1. 双向带头循环链表的结构2. 相关操作2.1 创建节点2.2 尾插2.3 头插2.4 打印2.5 尾删2.6 头删2.7 查找2.8 指定位置前/后插入2.9 删除指定位置的节点2.10 删除指定位置后的节点2.11 销毁链表 3.顺序表与链表区别 1. 双向带头循环链表的结构 与单链表不同的是&#xf…

详解计算机软件基本概念

软件基本概念 软件的定义 一个完整的计算机系统是由硬件系统和软件系统协同工作来完成某一给定的任务的。 只有硬件的计算机称为裸机&#xff0c;裸机必须安装了计算机软件后才可以完成各项任务。 从广义地讲&#xff0c;软件是指计算机程序、数据以及开发、使用和维护程序…

Python 视频转场特效处理笔记

本文参考Python-OpenCV 实现美图秀秀视频剪辑效果【特效】_opencv 多张图片 视频 特效-CSDN博客 最近研究了点python处理视频相关的东西&#xff0c;本文展示特效包括&#xff0c;竖向开幕/横向开幕&#xff0c;渐隐/渐显&#xff0c;推近/拉远&#xff0c;方形开幕&#xff0…

Excel——有效性、二级菜单联动

一、录入规范数据 1.手动输入序列录入有效性信息 选择需要录入有效性的所有单元格 选择【数据】——【有效性】——【有效性】 在【允许】输入的值之间选择【序列】 在【序列】输入框中输入想要选择的值&#xff0c;中间用逗号&#xff08;必须是英文逗号&#xff09;隔开 。…