史上最方便的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分頁對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章