【JAVA秒会技术之玩转高效分页】EasyUI + PageHelper实现分页

 EasyUI + PageHelper实现分页

一、EasyUI页面分页

页面逻辑:页面初始化时,通过jquery easyui的DataGrid(数据表格)url属性异步加载,返回指定的json格式数据,在通过pagination属性,展示分页工具栏。

 

表现层分析

请求URL:/XXX/list

请求参数:Integer pageInteger rowseasyui分页控件请求的参数),其中page默认为1。

返回数据:json格式的数据(easyui分页控件请求的返回值JSON数据),格式如下:

{total:“2”,rows:[

      {“id”:”1”,”name”:”张三”}

      {“id”:”2”,”name”:”李四”}

]}

==>  再将Json对应的数据格式封装成POJO类DatagridResult。

   业务逻辑分析

根据page和rows分页查询条件,使用分页插件PageHelper进行分页查询。

将商品列表和记录总数封装到PO类对象中,并且将其转化为Json格式返回。

二、PageHelper数据库分页

mybatis分页插件PageHelper目前支OracleMysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。

分页原理

 

使用方法

第一步:dao层的pom文件中添加pagehelper依赖

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

第二步:在Mybatis配置SqlMapConfig.xml中配置拦截器插件

<plugins>
	  <!-- com.github.pagehelper为PageHelper类所在包名 -->
	  <plugin interceptor="com.github.pagehelper.PageHelper">
		  <!-- 设置数据库方言 -->
		  <property name="dialect" value="mysql" />
	  </plugin>
   </plugins>

第三步:将Json对应的数据格式封装成POJO类DatagridResult并实现序列化接口

public class DatagridResult implements Serializable{
	private long total;// 记录总数
	private List rows; // 记录集合
}

第五步:开发Service层,主要逻辑:Ø 第四步:开发Dao层,使用逆向工程生成代码;

    @Override
	public DatagridResult queryItemList(Integer page, Integer rows) {
		if (page == null)
			page = 1;
		if (rows == null)
			rows = 30;
		// 1.设置分页信息
		PageHelper.startPage(page, rows);
		// 2.执行查询
		TbItemExample example = new TbItemExample();
		List<TbItem> list = mapper.selectByExample(example);
		// 3.获取分页查询后的数据
		PageInfo<TbItem> pageInfo = new PageInfo<>(list);
		// 4.封装结果对象,并返回
		DatagridResult result = new DatagridResult();
		result.setTotal(pageInfo.getTotal()); //设置总记录数
		result.setRows(list);  //设置每页展示数据集合
		return result;
	}

 第六步:开发Controller层,主要逻辑:

   @RequestMapping("/list")
   @ResponseBody
    public DatagridResult list(@RequestParam(defaultValue= "1") Integer page, Integer rows) {
		return service.queryItemList(page, rows);
	}

三、超时及警告问题解决

    原因:通过分页插件得到的结果,其实是List的子类Page(该类由分页插件提供),而该类只在服务层,表现层没有该类,在反序列化的时候,抛出该警告,不影响使用

 

    发布服务时,服务默认的响应时间为1秒,debug时需要显示设置,单位是毫秒

 





 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端动态增加和删除输入框的实现可以使用 jQuery 或者原生 JavaScript,通过 DOM 操作来实现。具体可以参考以下代码: ``` // 添加输入框 $("#addBtn").click(function() { var inputHtml = '<input type="text" name="inputs[]" />'; $("#inputContainer").append(inputHtml); }); // 删除输入框 $("#delBtn").click(function() { $("#inputContainer input:last-child").remove(); }); ``` 其中,`#addBtn` 和 `#delBtn` 分别是添加和删除按钮的 ID,`#inputContainer` 是存放输入框的容器的 ID。 后端接收动态增加的输入框数据可以通过 Spring MVC 的 @RequestParam 注解来实现。具体代码如下: ``` @RequestMapping(value = "/submit", method = RequestMethod.POST) public String submit(@RequestParam("inputs[]") List<String> inputs, Model model) { // 处理数据 model.addAttribute("result", "success"); return "result"; } ``` 其中 `@RequestParam("inputs[]")` 表示接收名为 `inputs[]` 的数组参数,对应前端动态增加的输入框的 name 属性。 实现 CRUD 操作可以使用 MyBatis 或者 Hibernate 等 ORM 框架。具体可以参考以下代码: ``` // 查询数据 List<Data> dataList = dataMapper.selectAll(); // 新增数据 Data data = new Data(); data.setName("test"); dataMapper.insert(data); // 修改数据 Data data = dataMapper.selectById(1); data.setName("test2"); dataMapper.update(data); // 删除数据 dataMapper.deleteById(1); ``` 其中,`Data` 是数据实体类,`dataMapper` 是对应的 Mapper 接口,可以使用 MyBatis Generator 自动生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值