SpringBoot+Mybatis+Pagehelper分頁


1、pom.xml

<!-- mybatis分頁插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

 

2、駝峰命名
在application.properties中添加以下配置,在執行查詢后,可以將數據庫的NN_NN格式字段,在java結果集對象中自動轉換成駝峰命名參數。

mybatis.configuration.mapUnderscoreToCamelCase=true

 

3、可復用的@Results
a、聲明時給id賦值為user

@Results(id="user",value={
        @Result(property="nnNn",column="NN_NN")
})

b、在其他方法中,重復使用id為user的結果映射

@ResultMap("user")

c、結果映射@Results
如果結果集不是JAVA對象而是Map,Map中的列名會和數據庫中的NN_NN一樣,是不會自動駝峰轉換的。可以使用@Result來指明結果映射,同樣也適用JAVA對象

@Results({
    @Result(property="nnNn",column="NN_NN")    
})
@Select("select * from  user")    
public List<Map> findAll();

4、打印SQL日志到控制台
在application.properties中添加以下配置

logging.level.你的包名.mybatis接口包=debug
eg、logging.level.com.lynch.mapper.PageMapper=debug #不能用*替代


第一行:==>左邊是執行SQL的接口及其方法,右邊是執行語句
第二行:傳參數1,String類型
第三行:查到一行數據

5、分頁

package com.lynch.mapper;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.lynch.entity.UserEntity;

@Service
@Transactional
public class PageServiceImpl {
    @Autowired
    private PageMapper pageMapper;

    public Page<UserEntity> pageUser(int pageNum, int pageSize) {
        // 分頁插件: 查詢第1頁,每頁10行
        Page<UserEntity> page = PageHelper.startPage(pageNum, pageSize);
        pageMapper.getAll();
        // 數據表的總行數
        page.getTotal();
        // 分頁查詢結果的總行數
        page.size();
        // 第一個User對象,參考list,序號0是第一個元素,依此類推
        page.get(0);
        
        return page;
    }
}

分頁原理:PageHelper.startPage會攔截下一個sql,也就是pageMapper.getAll()的SQL。並且根據當前數據庫的語法,把這個SQL改造成一個高性能的分頁SQL,同時還會查詢該表的總行數,具體可以看SQL日志。
PageHelper.startPage和pageMapper.getAll()最好緊跟在一起,中間不要有別的邏輯,否則可能出BUG。
Page<User> page:相當於一個list集合,findAll()方法查詢完成后,會給page對象的相關參數賦值。

6、回傳ID
假設數據庫表的ID主鍵是自動增長的,現在添加一條數據,想要得到這條數據自動增長的ID,方法如下:
a、dao層
useGeneratedKeys=true:獲取數據庫生成的主鍵
keyProperty="id":把主鍵值存入User param對象的id屬性

@Insert("insert into users(username,password,sex) values(#{username}, #{password}, #{sex})")
@Options(useGeneratedKeys=true, keyProperty="id") 
int insert(UserEntity user);

b、service層

UserEntity userEntity = new UserEntity("laosis", "123456", SexEnum.WOMAN);
int result = pageMapper.insert(userEntity);
System.out.println("result=" + result);
System.out.println("回傳ID值:" + userEntity.getId());

 

完整demo代碼
1、PageMapper

package com.lynch.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;

import com.lynch.entity.UserEntity;

public interface PageMapper {
    @Select("select * from users order by id")
    List<UserEntity> getAll();
    
    @Insert("insert into users(username,password,sex) values(#{username}, #{password}, #{sex})")
    @Options(useGeneratedKeys=true, keyProperty="id") 
    int insert(UserEntity user);
}

 

2、PageServiceImpl -- 分頁service

package com.lynch.mapper;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.lynch.entity.UserEntity;

@Service
@Transactional
public class PageServiceImpl {
    @Autowired
    private PageMapper pageMapper;

    public Page<UserEntity> pageUser(int pageNum, int pageSize) {
        // 分頁插件: 查詢第1頁,每頁10行
        Page<UserEntity> page = PageHelper.startPage(pageNum, pageSize);
        pageMapper.getAll();
        // 數據表的總行數
        page.getTotal();
        // 分頁查詢結果的總行數
        page.size();
        // 第一個User對象,參考list,序號0是第一個元素,依此類推
        page.get(0);
        
        return page;
    }
}

 

3、PageMapperTest -- 單元測試

package com.lynch.mapper;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.github.pagehelper.Page;
import com.lynch.entity.UserEntity;
import com.lynch.enums.SexEnum;

@RunWith(SpringRunner.class)
@SpringBootTest
public class PageMapperTest {
    @Autowired
    private PageMapper pageMapper;
    @Autowired
    private PageServiceImpl pageService;
  
    @Test
    public void getAll() throws Exception {
        List<UserEntity> users = pageMapper.getAll();
        for(UserEntity user : users) {
            System.out.println(user);
        }
        
    }
    
    @Test
    public void pageUser() throws Exception {
        int pageNum = 1;
        int pageSize = 10;
        Page<UserEntity> page = pageService.pageUser(pageNum, pageSize);
        System.out.println("page:" + page);
        for(UserEntity user : page.getResult()) {
            System.out.println(user);
        }
         
    }
    
    @Test
    public void insert() throws Exception {
        UserEntity userEntity = new UserEntity("laosis", "123456", SexEnum.WOMAN);
        int result = pageMapper.insert(userEntity);
        System.out.println("result=" + result);
        System.out.println("回傳ID值:" + userEntity.getId());
    }
    
    

      
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM