SSM全注解方式使用PageHelper实现分页查询

       在使用SSM整合项目时,经常会遇到分页展示数据的情况,我们可以自己构建页面对象,其中需要包含几个关键属性,比如总记录数,当前页面数,页面的显示条数,以及从数据库查询到数据。另外,我们还可以使用PageHelper插件来辅助完成分页查询的功能,接下来总结一下全注解方式实现PageHelper分页查询功能。

 pom.xml文件中的依赖注入:

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.1.2</version>
</dependency>

配置类中配置PageInterceptor插件的bean对象,并且在SqlSessionfactory中设置plugins属性:

/**项目整体环境搭建*/
@PropertySource("classpath:configs.properties")
public class AppRootConfig {
	/**配置mybatis*/
	@Bean("druidDataSource")
	public DruidDataSource getDruidDataSource(
			@Value("${jdbcDriver}")String driver,
			@Value("${jdbcUrl}")String url,
			@Value("${jdbcUser}")String username,
			@Value("${jdbcPassword}")String password){
		DruidDataSource dataSource=new DruidDataSource();
		dataSource.setDriverClassName(driver);
		dataSource.setUrl(url);
		dataSource.setUsername(username);
		dataSource.setPassword(password);
		return dataSource;
	}
	/**配置PageInterceptor插件*/
	@Bean
	public PageInterceptor getPageInterceptor(){
		PageInterceptor pageIntercptor=new PageInterceptor();
		Properties properties=new Properties();
		properties.setProperty("value", "true");
		pageIntercptor.setProperties(properties);
		return pageIntercptor;
	}
	@Bean("sqlSessionFactory")
	public SqlSessionFactoryBean getSqlSessionFactory(
			DruidDataSource ds, PageInterceptor pageInterceptor) throws IOException{
		SqlSessionFactoryBean factory=new SqlSessionFactoryBean();
		factory.setDataSource(ds);
		ResourcePatternResolver resolver=new PathMatchingResourcePatternResolver();
		Resource[] mapperLocations=resolver.getResources("classpath:mapper/*.xml");
		factory.setMapperLocations(mapperLocations);
		Interceptor[] plugins={pageInterceptor};
		factory.setPlugins(plugins);
		return factory;
	}
	@Bean
	public MapperScannerConfigurer getScanner(){
		MapperScannerConfigurer scanner=new MapperScannerConfigurer();
		scanner.setBasePackage("com.jt.**.dao");
		return scanner;
	}
}

配置完成之后,进行一个测试,对数据库中的sys_configs表格进行分页查询,先在mapper.xml文件编写sql语句:

<select id="findAllObjects" resultType="com.jt.sys.entity.SysConfig">
	select * from sys_configs
</select>

dao层接口:

/**dao层接口*/
public interface SysConfigDao {
	List<SysConfig> findAllObjects(@Param("name")String name);
}

业务层接口:

/**业务逻辑层接口*/
public interface SysConfigService {
	PageInfo<SysConfig> findAllObjects(String name,Integer pageNum);
}

业务层实现类,这里的PageInfo是核心对象,它封装了分页查询时所需要的关键数据:

/**业务逻辑层实现类*/
@Service
public class SysConfigServiceImpl implements SysConfigService{
	@Autowired
	private SysConfigDao sysConfigDao;
	@Override
	public PageInfo<SysConfig> findAllObjects(String name,Integer pageNum) {
		Integer pageSize=3;
		PageHelper.startPage(pageNum, pageSize);
		List<SysConfig> list = sysConfigDao.findAllObjects(name);
		PageInfo<SysConfig> pageInfo=new PageInfo<>(list);
		return pageInfo;
	}
}

请求控制层:

/**请求控制层*/
@Controller
@RequestMapping("/config/")
public class SysConfigController {
	@Autowired
	private SysConfigService sysConfigService;
	@RequestMapping("doConfigListUI")
	public String doConfigListUI(){
		return "sys/config_list";
	}
	@RequestMapping("doFindPageObjects")
	@ResponseBody
	public JsonResult doFindPageObjects(String name,Integer pageNum){
		PageInfo<SysConfig> po = sysConfigService.findAllObjects(name,pageNum);
		return new JsonResult(po);
	}
}

       可以看到最后将一个PageInfo对象传递给了客户端,在客户端输出这个对象,如图下图所示。其中包含了许多分页查询所需要的关键数据,比如list是数据库数据的集合,pageNum是当前页码数,pageSize是每页显示条数,pages是页面总数,total是总记录数,有了这些数据可以通过js进行分页显示。


猜你喜欢

转载自blog.csdn.net/sunroyfcb/article/details/80768204