Springboot+Mybatis实现分页加条件查询功能

本文实例为大家分享了Springboot+Mybatis实现分页加条件查询的具体代码,供大家参考,具体内容如下

User.xml

<?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.shelbourne.schooldelivery.mapper.UserMapper">
<!--    用户更新-->
    <update id="update">-- 这里的id为函数名
        update user
        <set>
            <if test="username != null and username !=''">
                username=#{username},
            </if>
            <if test="nickname != null and nickname !=''">
                nickname=#{nickname},
            </if>
            <if test="email != null and email !=''">
                email=#{email},
            </if>
            <if test="phone != null and phone !=''">
                phone=#{phone},
            </if>
            <if test="address != null and address !=''">
                address=#{address}
            </if>
        </set>
        <where>
            id = #{id}
        </where>
    </update>
 
<!--    分页+条件查询-->
    <select id="selectPageWithParam" resultType="com.shelbourne.schooldelivery.entity.User">
        select * from user
        <include refid="condition"></include>
        limit #{startIdx},#{size}
    </select>
 
<!--    查询满足条件的用户总数-->
    <select id="selectTotalWithParam" resultType="java.lang.Integer">
        select count(*) from user
        <include refid="condition"></include>
    </select>
 
<!--    查询条件-->
    <sql id="condition">
        <where>
            1=1
            <if test="username != null and username != ''">
                and username like concat("%",#{username},"%")
            </if>
            <if test="email != null and email != ''">
                and email like concat("%",#{email},"%")
            </if>
            <if test="address != null and address != ''">
                and address like concat("%",#{address},"%")
            </if>
        </where>
    </sql>
</mapper>

UserMapper.java

package com.shelbourne.schooldelivery.mapper;
 
import com.shelbourne.schooldelivery.entity.User;
import org.apache.ibatis.annotations.*;
 
import java.util.List;
 
@Mapper
public interface UserMapper {
 
    //查询所有用户
    @Select("select * from user")
    //mybatis提供注解,注意SQL语句后不能加分号
    List<User> findAll();
 
    //新增用户
    @Insert("insert into user(username,password,nickname,email,phone,address)" +
            "values(#{username},#{password},#{nickname},#{email},#{phone},#{address})")
    public Integer insert(User user);
 
    //通过注解(静态)和xml里面(动态)两种方式编写SQL语句
    int update(User user);
 
    //删除单个用户
    @Delete("delete from user where id=#{id}")
    Integer deleteById(@Param("id") Integer id);//最后加上@Param参数,参数名和上面的#{}里面的一样
 
    //查询记录条数
    @Select("select count(*) from user")
    Integer selectTotal();
 
    //编写动态SQL实现分页查询+条件查询
    //查询满足条件的某一页用户
    List<User> selectPageWithParam(Integer startIdx, Integer size, String username, String email, String address);
 
    //查询满足条件的所有用户数
    int selectTotalWithParam(String username, String email, String address);
}

UserController.java

package com.shelbourne.schooldelivery.controller;
 
import com.shelbourne.schooldelivery.entity.User;
import com.shelbourne.schooldelivery.mapper.UserMapper;
import com.shelbourne.schooldelivery.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@RequestMapping("/user")  //统一给接口加前缀,postman后台接口localhost:9090/user
@RestController
public class UserController {
 
    @Autowired  //注入其他类的注解
    private UserMapper userMapper;
 
    @Autowired
    private UserService userService;
 
    //查询所有用户
    @GetMapping
    public List<User> findAll(String username) {
        return userMapper.findAll();
    }
 
    //通过POST请求进行新增和更新操作
    @PostMapping
    public Integer save(@RequestBody User user) {//一定要加上RequestBody,可以把前端传回的JSON对象转换为Java对象
        return userService.save(user);
    }
 
    //删除请求接口
    @DeleteMapping("/{id}")
    public Integer delete(@PathVariable Integer id) {//这里的“id”必须和DeleteMapping里面的名字一样
        return userMapper.deleteById(id);
    }
 
    @GetMapping("/page")
    public Map<String, Object> findPage(@RequestParam Integer pageNum, @RequestParam Integer pageSize, @RequestParam String username,
                                        @RequestParam String email, @RequestParam String address) {
        int startIdx = (pageNum - 1) * pageSize, size = pageSize;
        List<User> data = userMapper.selectPageWithParam(startIdx, size, username, email, address);//获取一页的数据
        int total = userMapper.selectTotalWithParam(username, email, address);//查询总条数
        Map<String, Object> res = new HashMap<>();
        res.put("data", data);//表格数据
        res.put("total", total);//分页使用
        return res;
    }
}

Home.vue中:

<script>
    export default {
        data() {
            return {
                total: 0,//记录条数为0
                pageNum: 1,//默认从第一条记录开始
                pageSize: 10,//默认分页大小为10
                username: "",//条件查询的姓名
                email: "",//条件查询的邮箱
                address: "",//条件查询的地址
            }
        },
        created() {//页面渲染完成后的数据刷新
            this.flushData()
        },
        methods: {
            //获取数据
            flushData() {
                fetch("http://localhost:9090/user/page?pageNum=" +
                    this.pageNum + "&pageSize=" + this.pageSize + "&username=" +
                    this.username + "&email=" + this.email + "&address=" + this.address).then(res => res.json()).then(res => {
                    // console.log(res)
                    //跨域问题:前端端口8080,后端端口9090,导致跨域
                    this.tableData = res.data
                    this.total = res.total
                })
            }
        }
    }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springboot结合vue实现增删改查及分页查询

    1:首先.创建一个springboot项目,这里我使用以及构建好基本框架的脚手架,打开是这个样子: Result类:已经封装好了三种返回类型的包装类:code,msg,data 2:创建数据库叫mytest(可以自己取名字) CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '序号', `name` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL CO

  • SpringBoot+JPA 分页查询指定列并返回指定实体方式

    目录 SpringBoot+JPA分页查询指定列并返回指定实体 SpringBoot JPA实现自定义语句分页查询 SpringBoot+JPA分页查询指定列并返回指定实体 用习惯Mybatis,没用过jpa 真是各种踩坑了 脑壳疼,一个分页弄老半天,原来就一句话的事情,唉 先来说说正常的JPA如何操作 实体类对应表来创建,举个例子 @Entity @Table(name = "td_user") public class TdUser extends BaseModel { priv

  • SpringBoot整合PageHelper实现分页查询功能详解

    前言 本文介绍的是MyBatis 分页插件 PageHelper,如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件.分页插件支持任何复杂的单表.多表分页. 官方文档:https://pagehelper.github.io/ 项目地址:https://github.com/pagehelper/Mybatis-PageHelper 使用方法 导入依赖 在中央仓库sonatype中搜索 pageHelper,找到 pagehelper-spring-boot-star

  • Springboot中MyBatisplus使用IPage和Page分页的实例代码

    一.需求:实现Springboot中MyBatisplus使用IPage和Page分页 二.技术:MyBatisplus的IPage和Page 三.实现 1.代码结构 2.代码详情 (1)Controller package com.xkcoding.rbac.security.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; i

  • springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能

    完整案例: SpringBoot + laypage分页 + 模糊查询 完整案例 下面在通过实例代码介绍下springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能,内容如下所示: 调用接口Controller类 @ApiOperation("查询列表") @PostMapping("/selectList") public Result selectList(@RequestBody User_InfoListRequest us

  • springboot整合mybatis-plus实现多表分页查询的示例代码

    1.新建一个springboot工程 2.需要导入mybatis和mybatis-plus的依赖文件 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <dependency> &l

  • springboot整合mybatis-plus 实现分页查询功能

    建一个config类 @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); } } 编写controller post /article/search/{page}/{size} @PostMapping("search/{page}/{size}") p

  • springboot+mongodb 实现按日期分组分页查询功能

    具体代码如下所示: WalletDetailsResp walletDetailsResp = new WalletDetailsResp(); List<WalletDetailsResp.WalletDetail> list = new ArrayList<>(); WalletDetailsResp.PageInfoBean pageInfoBean = new WalletDetailsResp.PageInfoBean(); List<Integer> typ

  • oracle+mybatis-plus+springboot实现分页查询的实例

    今天蠢了一上午才弄出这玩意,话不多说上代码! 1.建一个配置类 package com.sie.demo.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInte

  • SpringBoot Jpa分页查询配置方式解析

    这篇文章主要介绍了SpringBoot Jpa分页查询配置方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这是已经被废弃的接口 Sort sort = new Sort(Sort.Direction.DESC,"bean类中字段"); //创建时间降序排序 Pageable pageable = new PageRequest(pageNumber,pageSize,sort); 上面的用法在最新的SpringBoot中已经不

随机推荐