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

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;}
}

分析:

相关文章:

  • 2023 年,我患上了 AI 焦虑症!
  • 百面嵌入式专栏(面试题)进程管理相关面试题1.0
  • 详细讲解ES6箭头函数语法(附Demo)
  • 中科大计网学习记录笔记(八):FTP | EMail
  • JCIM | MD揭示PTP1B磷酸酶激活RtcB连接酶的机制
  • 鸿蒙harmony--TypeScript函数详解
  • 【EAI 016】VIMA: General Robot Manipulation with Multimodal Prompts
  • web 前端实现一个根据域名的判断 来显示不同的logo 和不同的标题
  • 没更新的日子也在努力呀,布局2024!
  • MOCO动量编码
  • Day31 贪心算法part01
  • PgSQL内核特性 - push-based pipeline 执行引擎
  • redis:七、集群方案(主从复制、哨兵模式、分片集群)和面试模板
  • 3.3 Binance_interface APP U本位合约行情-实时行情
  • Fink CDC数据同步(四)Mysql数据同步到Kafka
  • php的引用
  • 2018一半小结一波
  • Apache的基本使用
  • github指令
  • JavaScript设计模式之工厂模式
  • Java小白进阶笔记(3)-初级面向对象
  • vue自定义指令实现v-tap插件
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 技术:超级实用的电脑小技巧
  • 近期前端发展计划
  • 前端性能优化——回流与重绘
  • 小李飞刀:SQL题目刷起来!
  • 学习ES6 变量的解构赋值
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • !$boo在php中什么意思,php前戏
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #define、const、typedef的差别
  • #NOIP 2014#Day.2 T3 解方程
  • #QT(一种朴素的计算器实现方法)
  • $(selector).each()和$.each()的区别
  • (HAL库版)freeRTOS移植STMF103
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (初研) Sentence-embedding fine-tune notebook
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (学习日记)2024.01.09
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET6实现破解Modbus poll点表配置文件
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Data注解的作用
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • []指针
  • [30期] 我的学习方法
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [android]-如何在向服务器发送request时附加已保存的cookie数据