springBoot+mapper+pagehelper分页
最近看了springBoot分页相关的很多文章,但总有些坑趟不过去, 在此记录相关注意的点以及问题
一.目的:实现select下的分页实现
二.实现
2.1新建springBoot项目,项目结构如下
2.2添加pom依赖及配置文件application.properties
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.5</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator</artifactId> <version>1.3.5</version> </dependency>备注:亲测pagehelper依赖在版本为5.1.2时分页失败,但4.1.0时可用
application.properties
# mybatis 配置 mybatis.type-aliases-package=com.example.demo.model mybatis.mapper-locations=classpath:mapper/*.xml # 通用 Mapper 配置 mapper.mappers=com.example.demo.util.MyMapper mapper.not-empty=false mapper.identity=MYSQL # 分页插件配置 pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql #server.port=9091 logging.level.com.example.demo.mapper=trace spring.datasource.url=jdbc:mysql://localhost:3306/sys spring.datasource.username=root spring.datasource.password=950930 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
2.3实体类
package com.example.demo.model; import javax.persistence.*; @Table(name = "SYS_USER") public class SysUser { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String username; private String password;
省略get,set方法
2.4通用mapper类MyMapper,
package com.example.demo.util; import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.MySqlMapper; public interface MyMapper<T> extends Mapper<T>,MySqlMapper<T> { }
实体mapper只需要继承MyMapper即可,业务方法中便可以使用通用mapper中的方法
SysUserMapper:
package com.example.demo.mapper; import com.example.demo.model.SysUser; import com.example.demo.util.MyMapper; public interface SysUserMapper extends MyMapper<SysUser> { }2.5server层
package com.example.demo.service; import com.example.demo.model.SysUser; import java.util.List; public interface SysUserService { List<SysUser> findAll(); }
server实现层:
package com.example.demo.service.Impl; import com.example.demo.mapper.SysUserMapper; import com.example.demo.model.SysUser; import com.example.demo.service.SysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class SysUserServiceImpl implements SysUserService { @Autowired private SysUserMapper sysUserMapper; @Override public List<SysUser> findAll() { return sysUserMapper.selectAll(); } }
2.6SysUserController
package com.example.demo.controller; import com.example.demo.model.SysUser; import com.example.demo.service.SysUserService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class SysUserController { @Autowired private SysUserService sysUserService; @RequestMapping("all") public PageInfo<SysUser> findAll(@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum){
//调用PageHelper的start方法实现分页设置,pageNum为当前页数,3为每页有3行数据,如下即当前为第1页有3行数据,如通过http://localhost:9091/all/?pageNum=3跳到第3页 PageHelper.startPage(pageNum,3); List<SysUser> list = sysUserService.findAll();
//使用pageInfo PageInfo<SysUser> pageInfo = new PageInfo<>(list); return pageInfo; } }2.7最主要的一点,记得配置pageHelper,之前试过好多次分页失败都是配置错误
在springBoot启动类注入
package com.example.demo; import com.github.pagehelper.PageHelper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import java.util.Properties; @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { //pageHelper配置项 @Bean public PageHelper pageHelper() { System.out.println("MyBatisConfiguration.pageHelper()"); PageHelper pageHelper = new PageHelper(); Properties p = new Properties(); p.setProperty("offsetAsPageNum", "true"); p.setProperty("rowBoundsWithCount", "true"); p.setProperty("reasonable", "true"); pageHelper.setProperties(p); return pageHelper; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
三.项目启动访问http://localhost:9091/all
注意点:
1.分页的配置是否加上
2.项目注解的注入,serviceImpl层的@Service,mapper层的@Mapper ,启动类的@MapperScan(mapper全类名)