一、手写Limit,手动使用泛型封装PageInfo
Controller
@RequestMapping("/queryAllLimit")
@ResponseBody
public List<Test> queryAllLimit(Integer pageSize,Integer pageNo) {
return testService.queryForList(pageSize,pageNo);
}
Service
public List<Test> queryLimit(Integer pageSize,Integer pageNo) {
return testMapper.selectLimit(pageSize, pageNo);
}
dao
@SelectProvider(type=TestSqlProvider.class,method="selectLimit")
public List<Test> selectLimit(Integer pageSize,Integer pageNo);
SqlProvider
package com.oo.test.dao;
import org.apache.ibatis.jdbc.SQL;
import com.oo.test.entity.Test;
public class TestSqlProvider {
public String selectSearch(final Test test) {
return new SQL(){{
SELECT("id,content,version");
FROM("test");
if(test.getId()!=null) {
WHERE("id = #{id}");
}
if(test.getContent() != null){
WHERE("content like '%${name}%'");
}
if(test.getVersion() != null){
WHERE("version = #{version}");
}
}}.toString();
}
public String selectLimit(Integer pageSize,Integer pageNo) {
return new SQL() {{
SELECT("id,content,version");
FROM("test limit "+(pageNo-1)*10+","+pageSize);
}}.toString();
}
}
二、PageHelper的使用
1.添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2.添加配置
package com.oo.config;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import com.github.pagehelper.PageInterceptor;
@Configuration
public class PageHelperConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
Properties properties = new Properties();
properties.setProperty("reasonable", "true");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("pageSizeZero", "true");
PageInterceptor interceptor = new PageInterceptor();
interceptor.setProperties(properties);
sqlSessionFactoryBean.setPlugins(new Interceptor[]{interceptor});
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*Mapper.xml"));
return sqlSessionFactoryBean;
}
}
3.应用 PageInfo PageHelper.startPage pageNo 第几页,pageSize分页规则,每页最多数据条数
@Autowired
TestMapper testMapper;
public List<Test> queryForList(Integer pageSize,Integer pageNo) {
if(pageSize!=null&&pageNo!=null) {
PageHelper.startPage(pageNo,pageSize);
}
return testMapper.selectAll();
}
List<Test> queryForList = testService.queryForList(pageSize,pageNo);
PageInfo<Test> pageInfo = new PageInfo<Test>(queryForList);//PageInfo分页信息,当前页,总数据条数,每页数据条数