如果你也在用Mybatis,可以尝试该分页插件,这个是一个很方便使用的分页插件。
该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页
使用方法
第一步:
把PageHelper依赖的jar包添加到工程中。
官方提供的代码对逆向工程的支持不友好,可以使用自己改的 pagehelper-fix。 pagehelper下载地址
在pom文件引入pagehelper的依赖
3.4.2-fix引入的是分页插件的坐标, 3.4.2-fix在中央仓库是下载不到的
这个分页插件是一个pom工程, 导入这个工程到工作空间后, 安装到本地仓库— Run As -> Maven install , 安装后这个工程就生成jar包了
在这个分页插件的.pom文件里可以看到分页插件的坐标, 在其他地方引入坐标就可以使用了
第二步:在Mybatis配置文件(SqlMapConfig.xml)中配置拦截器插件
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
分页测试
@Test
public void testPageHelper() throws Exception{
//初始化spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml");
//从容器中获得mapper代理对象
TbItemMapper itemMapper = applicationContext.getBean(TbItemMapper.class);
//执行sql语句之前设置分页信息使用PageHelper的startPage方法
PageHelper.startPage(1, 10);
//执行查询
TbItemExample example = new TbItemExample();
List<TbItem> list = itemMapper.selectByExample(example);
//取分页信息,PageInfo. 1.总记录数 2.总页数 3.当前页码 ..
PageInfo<TbItem> pageInfo = new PageInfo<TbItem>(list);
System.out.println(pageInfo.getTotal());
System.out.println(pageInfo.getPages());
System.out.println(list.size());
}
934条信息, 94页, 每页10条
PageHelper在项目中的使用
请求的url:
/item/list
请求的参数:
page=1&rows=30
响应的json数据格式:
Easyui中datagrid控件要求的数据格式为:
{total:”2”,rows:[{“id”:”1”,”name”:”张三”},{“id”:”2”,”name”:”李四”}]}
查询商品信息, 需要返回的是json数据(一般都是通过java对象转换来的)
可以写一个pojo通过 @Respondbody直接响应pojo会自动转成json
由于多个系统以及其他的工程可能也会用到这个pojo, 因此创建到common里面
在*-common里创建EasyUIDataGridResult
public class EasyUIDataGridResult implements Serializable{
private long total;
//不添加泛型,因为这个List可能是商品列表,也可能是用户列表..
private List rows;
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
}
分页需要两个参数, page和rows
业务逻辑:查询所有商品列表,进行分页处理
返回值:EasyUIDataGridResult
dao层使用逆向工程生成的代码
定义接口
public interface ItemService {
EasyUIDataGridResult getItemList(int page, int rows);
}
接口的实现类
@Service
@Repository("itemService")
public class ItemServiceImpl implements ItemService {
// 注入mapper层接口
@Autowired
private TbItemMapper itemMapper;
@Override
public EasyUIDataGridResult getItemList(int page, int rows) {
// 设置分页信息
PageHelper.startPage(page, rows);
// 执行查询
TbItemExample example = new TbItemExample();
List<TbItem> list = itemMapper.selectByExample(example);
// 创建一个返回值对象
EasyUIDataGridResult result = new EasyUIDataGridResult();
result.setRows(list);
// 取分页结果
PageInfo<TbItem> pageInfo = new PageInfo<TbItem>(list);
// 取总记录数
long total = pageInfo.getTotal();
result.setTotal(total);
return result;
}
}
表现层
@Controller
public class ItemController {
//注入service层接口
@Autowired
private ItemService itemService;
@RequestMapping("/item/list")
@ResponseBody
public EasyUIDataGridResult getItenList(Integer page, Integer rows) {
//调用商品服务查询列表
EasyUIDataGridResult result = itemService.getItemList(page, rows);
return result;
}
}