史上最方便的Mybatis连表查询分页

一应俱全,直接复制粘贴拿来用就可以了~ 直接上代码~

1.pom.xml

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.10</version>
</dependency>
<!-- Mabatis启动器 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- mysql数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<!-- jdbc驱动包 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

2.application.yml

# 端口号
server:
  port: 8080
# 服务名
spring:
  application:
    name: mybatis-page-demo
  # mysql
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mysql?serverTimezone=UTC
    username: root
    password: 123456

mybatis:
  # 扫描pojo
  type-aliases-package: com.guigu.mybatispagedemo.pojo
  # 扫描mapper.xml
  mapper-locations: classpath:mapper/**/*.xml
  # 打印sql
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3. Pojo实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Users {
    
    private Integer id;
    private String name;
    private int age;
    
}

4.Pojo参数类

用于传参 带条件查询

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UsersPrams {
    
    private String name;
    private String age;
    
}

5.Mapper.java

@Mapper
public interface UsersMapper {

    // 获取分页数据 @Param用于给参数命名 在xml中直接调用
    List<Users> selVOUsers(@Param("usersPrams") UsersPrams usersPrams, @Param("pageMin")Long pageMin, @Param("pageMax")Long pageMax);

    // 计算分页大小
    long selVOUsersCount(@Param("usersPrams") UsersPrams usersPrams);
    
}

6. Mapper.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引用地址 -->
<mapper namespace="com.guigu.mybatispagedemo.mapper.UsersMapper" >
    <!-- 获取分页数据 -->
    <select id="selVOUsers"  resultType="Users">
        SELECT * from users
        <where>
            <if test="usersPrams.name!=null and usersPrams.name!=''">
                <bind name="bindName" value="'%'+usersPrams.name+'%'"/>
                and name like #{bindName}
            </if>
            <if test="usersPrams.age!=null and usersPrams.age!=''">
                and age = #{usersPrams.age}
            </if>
            <if test="1==1">
                and 1=1 LIMIT #{pageMin},#{pageMax}
            </if>
        </where>
    </select>

    <!-- 获取数据总条数 -->
    <select id="selVOUsersCount"  resultType="long" >
        SELECT count(*) from users
        <where>
            <if test="usersPrams.name!=null and usersPrams.name!=''">
                <bind name="bindName" value="'%'+usersPrams.name+'%'"/>
                and name like #{bindName}
            </if>
            <if test="usersPrams.age!=null and usersPrams.age!='' ">
                and age = #{usersPrams.age}
            </if>
        </where>
    </select>
</mapper>

7. Service

@Service
public class UserService {
    
    @Autowired
    private UsersMapper usersMapper;

    // 获取分页数据
    public PageVO<Users> selVOUsers(UsersPrams usersPrams, Long page, Long size){
        PageVO<Users> pageVO = new PageVO<Users>();
        // 获取总数据量
        Long total = this.usersMapper.selVOUsersCount(usersPrams);
        // 计算分页 最小值从0开始
        Long pageMin = (page-1) * size;
        Long pageMax = page * size - 1;
        if(pageMin >= total){
            pageMin = 0L;
        }
        if(pageMax >= total){
            pageMax = total;
        }
        // 获取分页数据 并注入
        List<Users> list = this.usersMapper.selVOUsers(usersPrams, pageMin, pageMax);
        pageVO.setList(list);
        pageVO.setPage(page);
        pageVO.setSize(size);
        pageVO.setTotal(total);
        return pageVO;
    }
    
}

8. Controller

@RestController
@RequestMapping("sel")
public class PageController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping("/pagevo")
    public PageVO<Users> selUsersPageVO(@RequestBody(required = false)UsersPrams usersPrams, @RequestParam(value = "page",defaultValue = "1") Long page,@RequestParam(value = "size",defaultValue = "3")Long size){
        // System.out.println("usersPrams"+usersPrams.toString());
        PageVO<Users> pageVO = this.userService.selVOUsers(usersPrams, page, size);
        return pageVO;
    }
    
}

出于各位大佬的公司可能已经封装好了分页对象,这里省略了我自定义的PageVO分页对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值