SpringBoot整合MyBatis分页组件PageHelper

介绍

SpringBoot整合MyBatis插件PageHelper实现业务分页逻辑

POM

添加MyBatis,PageHelper,FastJSON,MySQL依赖


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.7.2version>
        <relativePath/> 
    parent>
    <groupId>com.examplegroupId>
    <artifactId>mybatisartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>mybatisname>
    <description>mybatisdescription>
    <properties>
        <java.version>1.8java.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.2.2version>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>com.github.pagehelpergroupId>
            <artifactId>pagehelper-spring-boot-starterartifactId>
            <version>1.2.13version>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>fastjsonartifactId>
            <version>1.2.69version>
        dependency>
    dependencies>

project>

Yml

需要配置pagehelper

server:
  port: 80

#mysql
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/mysql_test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
    username: root
    password: root
  main: #允许循环依赖
    allow-circular-references: true

#mybatis
mybatis:
  mapperLocations: classpath:mapper/*.xml
  configuration: # 配置驼峰命名映射
    map-underscore-to-camel-case: true

#pageHelper
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true

Mapper

注意namespace,参数,动态SQL的编写,


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.mapper.UserMapper">

    <select id="selectAll" resultType="com.example.mybatis.entity.User">
        select *
        from user
    select>

    <select id="selectByKey" parameterType="com.example.mybatis.entity.SearchDto"
            resultType="com.example.mybatis.entity.User">
        select * from user
        where 1=1
        <if test="searchDto.username != null and searchDto.username != ''">
            and username = #{searchDto.username}
        if>
        <if test="searchDto.birthday != null">
            and birthday = #{searchDto.birthday}
        if>
    select>

mapper>

Dao

定义查询接口

package com.example.mybatis.mapper;

import com.example.mybatis.entity.SearchDto;
import com.example.mybatis.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {

    List<User> selectAll();

    List<User> selectByKey(@Param("searchDto") SearchDto searchDto);

}

Controller

使用PageHelper分页,通过PageInfo对象封装结果

package com.example.mybatis.controller;

import com.example.mybatis.config.R;
import com.example.mybatis.entity.SearchDto;
import com.example.mybatis.entity.User;
import com.example.mybatis.mapper.UserMapper;
import com.example.mybatis.util.DateUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @description: page info
 * @author: zj
 * @date: 2022-07-26 10:13
 */

@RestController
public class PageInfoController {

    @Resource
    private UserMapper userMapper;

    @PostMapping("/page")
    public String getPageData(@RequestBody SearchDto searchDto, @RequestParam Integer pageStart, @RequestParam Integer pageSize) throws ParseException {
		//核心分页代码
        PageHelper.startPage(pageStart, pageSize);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        Date birthDay = searchDto.getBirthday();

        sdf.format(birthDay);
        Date finalDate = DateUtil.getDateByString(sdf.format(birthDay));

        searchDto.setBirthday(finalDate);
		
		//查询数据
        List<User> users = userMapper.selectByKey(searchDto);
		
		//分页信息封装
        PageInfo<User> pageInfo = new PageInfo<>(users);

        return R.ok(pageInfo);
    }

}

通用返回类

返回JSON数据

package com.example.mybatis.config;

import com.alibaba.fastjson.JSON;
import java.util.HashMap;

/**
 * @description: 返回对象
 * @author: zj
 * @date: 2022-07-14 13:40
 */
public class R {

    private static JSON json;

    /**
     * 请求成功
     * @param obj
     * @return
     */
    public static String ok(Object obj) {
        HashMap<String, Object> res = new HashMap<>();
        res.put("status", "200");
        res.put("data", obj);
        return json.toJSONString(res);
    }

    /**
     * 请求失败
     * @param obj
     * @return
     */
    public static String fail(Object obj) {
        HashMap<String, Object> res = new HashMap<>();
        res.put("status", "500");
        res.put("data", obj);
        return json.toJSONString(res);
    }

}

验证

传递Params参数和Body参数,后台分别用@RequestParam和@RequestBody注解接收

Params参数

SpringBoot整合MyBatis分页组件PageHelper_第1张图片

Body参数

Body参数使用JSON格式传递,日期按照yyyy-MM-dd传,后台可以解析为Date类型,但不是0时0分0秒,需要转化后才能和数据库的yyyy-MM-dd日期比较

SpringBoot整合MyBatis分页组件PageHelper_第2张图片
SpringBoot整合MyBatis分页组件PageHelper_第3张图片

你可能感兴趣的:(MyBatis,spring,boot,mybatis,java)