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());
} }

SpringBoot+Mybatis+Pagehelper分页的更多相关文章

  1. springboot mybatis pagehelper 分页问题

    1:添加依赖 compile group: 'com.github.pagehelper', name: 'pagehelper-spring-boot-starter', version: '1.2 ...

  2. springboot + mybatis +pageHelper分页排序

    今天下午写查出来的数据的排序,原来的数据没有排序,现在把排序功能加上...原来用的,是xml中的sql动态传参 ,,1个小数没有弄出来,果断放弃... 网上百度一下,发现用pageHelper  可以 ...

  3. SpringBoot+MyBatis+PageHelper分页无效

    POM.XML中的配置如下:<!-- 分页插件 --><!-- https://mvnrepository.com/artifact/com.github.pagehelper/pa ...

  4. SpringBoot+Mybatis+PageHelper实现分页

    SpringBoot+Mybatis+PageHelper实现分页 mybatis自己没有分页功能,我们可以通过PageHelper工具来实现分页,非常简单方便 第一步:添加依赖 <depend ...

  5. springboot+mybatis+pagehelper

    springboot+mybatis+pagehelper整合 springboot   版本2.1.2.RELEASE mybatis  版本3.5 pagehelper 版本5.18 支持在map ...

  6. Springboot+Mybatis+Pagehelper+Aop动态配置Oracle、Mysql数据源

      本文链接:https://blog.csdn.net/wjy511295494/article/details/78825890 Springboot+Mybatis+Pagehelper+Aop ...

  7. spring-boot + mybatis +pagehelper 使用分页

    转自:https://segmentfault.com/a/1190000015668715?utm_medium=referral&utm_source=tuicool 最近自己搭建一个sp ...

  8. springboot + mybatis配置分页插件

    一:使用pagehelper配置分页插件 1:首先配置springboot +mybatis框架  参考:http://www.cnblogs.com/liyafei/p/7911549.html 2 ...

  9. mybatis pagehelper 分页 失效

    pagehelper 不分页几种情况的解决方法 - web洋仔 - CSDN博客https://blog.csdn.net/csdn___lyy/article/details/77160488 分页 ...

随机推荐

  1. linux 安装mysql相关和openjdk

    新装的centos 6.9虚拟机 修改yum 服务器源 cd /etc/yum.repos.d/ rename repo repo.bak_$(date +%F) * 阿里的yum库  https:/ ...

  2. Solr定时导入功能实现

    需要实现Solr定时导入功能的话,我们可以通过使用Solr自身所集成的dataimportscheduler调度器实现 下载对应的jar包,下载地址https://code.google.com/ar ...

  3. 用户认证--auth模块实现

    转载文章,如有不妥之处请谅解 相关介绍 auth auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管 ...

  4. Linux环境下java开发环境搭建一 JDK搭建

    第一步:下载jdk压缩文件 第二步:上传到家目录下的soft目录下,可以采用winscp,此处下载的是.tar.gz文件 第三步:解压压缩文件,并在/usr/local目录下创建一个jdk7的目录,并 ...

  5. http协议基本原理

    HTTP(HyperText Transport Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型 ...

  6. Linux学习---条件预处理的应用

    预处理的使用: ⑴包含头文件 #include ⑵宏定义 #define    替换,不进行语法检查 ①常量宏定义:#define 宏名 (宏体) (加括号为防止不进行语法检查而出现的错误) eg:# ...

  7. 8. American Friendship 美国式的友谊

    8. American Friendship 美国式的友谊 (1) Americans usually consider themselves a friendly people.Their frie ...

  8. 获得文件的CRC32值

    使用方法:先调用init_crc32_tab生成查询表,再调用calc_img_crc获得文件的CRC值. #define Poly 0xEDB88320L//CRC32标准 ];//CRC查询表 / ...

  9. Android开发 - ImageView加载Base64编码的图片

    在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片.这种情况出现在服务端需要动态生成的图片,比如: 二维码 图形验证码 ... 这些应用 ...

  10. npm全局目录修改

    转载:http://www.qdfuns.com/notes/30749/0f66fcf5e62eed010f744d0d4adaa870.html 我之前安装npm时全是默认安装,模块全部安装在C盘 ...