spring boot-mybatis集成PageHelper 分页插件(mybatis分页二)

1,首页maven引入依赖:



    com.github.pagehelper
    pagehelper-spring-boot-starter
    1.2.5

2,在application.properties配置文件里进入插件的相关配置

server.port=8089

# 此处省略其它配置

# pagehelper分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

解释:

1)helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。

2)分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

3)supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。

4)params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero

除了上面配置的,常用的其它该插件配置有:

mybatis.config-location=mybatis-config.xml配置文件的路径
mybatis.type-handlers-package=扫描typeHandlers的包
mybatis.check-config-location=检查配置文件是否存在
mybatis.executor-type=设置执行模式(SIMPLE, REUSE, BATCH),默认为SIMPLE

3,在代码中实现:

1) 数据库表:sys_user表

CREATE TABLE `sys_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '数据库主键',
  `user_name` varchar(100) NOT NULL COMMENT '用户名(邮箱)',
  `phone` bigint(20) DEFAULT NULL COMMENT '手机号码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=290 DEFAULT CHARSET=utf8 COMMENT='用户信息表';

2) bean对象:SysUserBean.java

@Data
public class SysUserBean {

    private Long id;

    private String userName;

    private String phone;
}

 3) controller层:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public List listUsers(@RequestParam("pageNo") int pageNo, @RequestParam("pageSize") int pageSize) {
        List sysUserBeans = userService.listUsers(pageNo, pageSize);
//        PageInfo pageInfo = new PageInfo<>(sysUserBeans);
        return sysUserBeans;
    }
}

4)service层: userService.java

@Service
public class UserService {

    @Resource
    private UserDao userDao;

    public List listUsers(int pageNo, int pageSize) {
        PageHelper.startPage(pageNo, pageSize);
        return userDao.listUsersByPage();
    }
}

5) dao接口 :userDao.java

@Mapper
public interface UserDao {
    List listUsersByPage();
}

6)mapper.xml




    
        
        
        
    
    
        id, user_name, phone
    
    
    

注:此插件实现方式,接口里方法名(如listUsersByPage)也可以不以“ByPage”结尾

4,最后访问:http://localhost:8089/user/list?pageNo=2&pageSize=5

结果:

[
    {
        "id": 26,
        "userName": "xxxxxxxxx",
        "phone": "xxx"
    },
    {
        "id": 27,
        "userName": "xxxx",
        "phone": "xxxx"
    },
    {
        "id": 28,
        "userName": "xxxxxx",
        "phone": "1xxx"
    },
    {
        "id": 29,
        "userName": "xxxxxx",
        "phone": "xxx"
    },
    {
        "id": 32,
        "userName": "xxxxxx",
        "phone": "xxxxx"
    }
]

如果Controller中PageInfo pageInfo = new PageInfo<>(sysUserBeans);一行去掉注释,返回 PageInfo格式类型数据时,得到结果如下:

{
    "total": 139,
    "list": [
        {
            "id": 26,
            "userName": "xxxxxxxxx",
            "phone": "xxx"
        },
        {
            "id": 27,
            "userName": "xxxx",
            "phone": "xxxx"
        },
        {
            "id": 28,
            "userName": "xxxxxx",
            "phone": "1xxx"
        },
        {
            "id": 29,
            "userName": "xxxxxx",
            "phone": "xxx"
        },
        {
            "id": 32,
            "userName": "xxxxxx",
            "phone": "xxxxx"
        }
    ],
    "pageNum": 2,
    "pageSize": 5,
    "size": 5,
    "startRow": 6,
    "endRow": 10,
    "pages": 28,
    "prePage": 1,
    "nextPage": 3,
    "isFirstPage": false,
    "isLastPage": false,
    "hasPreviousPage": true,
    "hasNextPage": true,
    "navigatePages": 8,
    "navigatepageNums": [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8
    ],
    "navigateFirstPage": 1,
    "navigateLastPage": 8,
    "lastPage": 8,
    "firstPage": 1
}

 

附:分页插件参数介绍(转发): 

  • helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:

    oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby

    特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。

    你也可以实现 AbstractHelperDialect,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。

  • offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。 
  • rowBoundsWithCount:默认值为false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。
  • pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。
  • reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
  • params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
  • supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest
  • autoRuntimeDialect:默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页 (不支持自动选择sqlserver2012,只能使用sqlserver)。
  • closeConn:默认值为 true。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时,会自动获取一个数据库连接, 通过该属性来设置是否关闭获取的这个连接,默认true关闭,设置为 false 后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定 

你可能感兴趣的:(mybatis,分页插件,pageHelper,10,Mybatis)