1. 程式人生 > 其它 >Springboot pageHelper總結

Springboot pageHelper總結

Springboot上使用pageHelper總結

1. 在pom.xml 中引入依賴

		<!--pagehelper-->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.5</version>
		</dependency>

之後直接在要訪問資料庫的mapper介面之前使用pageHelper即可,十分簡單

    @PostMapping("/allUser")
    public PageInfo<User> allUser() {
        PageHelper.startPage(2,3);
        List<User> users = userMapper.findAllUser();
        PageInfo<User> pageInfo = new PageInfo<>(users);
        return pageInfo;
    }

經測試,這裡實際上是執行了兩條SQL語句(與我的猜測一致)

c.g.m.m.UserMapper.findAllUser_COUNT     : ==>  Preparing: SELECT count(0) FROM user 
c.g.m.m.UserMapper.findAllUser_COUNT     : ==> Parameters: 
 c.g.m.m.UserMapper.findAllUser_COUNT     : <==      Total: 1
 c.g.m.mapper.UserMapper.findAllUser      : ==>  Preparing: SELECT * FROM user LIMIT ?, ? 
c.g.m.mapper.UserMapper.findAllUser      : ==> Parameters: 3(Integer), 3(Integer)
 c.g.m.mapper.UserMapper.findAllUser      : <==      Total: 3

執行了一條統計總數(where 真正要執行的sql的條件)的SQL 和 真正的SQL

順便檢查出來了我的一個SQL上理解的錯誤:

Limit x, y 指的是從x的下一條資料開始,包含y條資料資料的集合(不包含x)

2. 執行的mapper介面一旦在上面使用了PageHelper.startPage(x,y); 之後返回的物件其實不再是List物件了,而是一個Page物件(繼承於ArrayList)

class Page<E> extends ArrayList<E> implements Closeable

Page 物件中儲存了兩次SQL返回的資訊,這樣就得到了total的值

PS: 經測試如果mapper介面之上沒有使用PageHelper.startPage(x,y);則返回的還是ArrayList

3. 要拿到total的值需要用PageInfo做一層封裝即可

PageInfo<User> pageInfo = new PageInfo<>(users);