当前位置: 首页 > 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;}
}

分析:

http://www.lryc.cn/news/297513.html

相关文章:

  • 对象存储minio
  • 大模型学习笔记二:prompt工程
  • MATLAB实现LSTM时间序列预测
  • Kubernetes CNI Calico:Route Reflector 模式(RR) calico IPIP切换RR网络模式
  • 探索Gin框架:Golang Gin框架请求参数的获取
  • 极值图论基础
  • word导出链接
  • (delphi11最新学习资料) Object Pascal 学习笔记---第4章第2.5节(重载和模糊调用)
  • ElementUI Data:Table 表格
  • 11.2 OpenGL可编程顶点处理:细分着色器
  • 微软正在偷走你的浏览记录,Edge浏览器偷疯了
  • 什么是数据库软删除,什么场景下要用软删除?(go GORM硬删除)
  • 计算机设计大赛 深度学习+python+opencv实现动物识别 - 图像识别
  • 我主编的电子技术实验手册(02)——仪表与电源
  • C语言----内存函数
  • 【力扣】快乐数,哈希集合 + 快慢指针 + 数学
  • c实现顺序表
  • 微软为新闻编辑行业推出 AI 辅助项目,记者参加免费课程
  • openssl3.2 - exp - buffer to BIO
  • Android 13.0 系统framework修改低电量关机值为3%
  • 【EAI 013】BC-Z: Zero-Shot Task Generalization with Robotic Imitation Learning
  • 一文讲透ast.literal_eval() eval() json.loads()
  • 微软.NET6开发的C#特性——类、结构体和联合体
  • naiveui 上传图片遇到的坑 Upload
  • 安全之护网(HVV)、红蓝对抗
  • Leetcode 213 打家劫舍 II
  • 【C语言】三子棋游戏实现代码
  • docker常用10条容器操作命令
  • 《MySQL 简易速速上手小册》第2章:数据库设计最佳实践(2024 最新版)
  • 利用YOLOv8 pose estimation 进行 人的 头部等马赛克