SSM框架实现分页,返回分页的JSON数据

先看一下返回的JSON数据:

{
    "pagNum": 1,
    "pageSize": 5,
    "totalRecord": 12,
    "totalPage": 3,
    "startIndex": 0,
    "dateList": [
        {
            "employee_id": 2,
            "employee_account": "44",
            "username": "44",
            "password": "44",
            "age": 44,
            "address": "0000",
            "departmentname": "生产技术部"
        },
        {
            "employee_id": 3,
            "employee_account": "44",
            "username": "44",
            "password": "44",
            "age": 44,
            "address": "0000",
            "departmentname": "生产技术部"
        },
        {
            "employee_id": 4,
            "employee_account": "897",
            "username": "张红",
            "password": "0989",
            "age": 45,
            "address": "河北省石家庄市公园路45号",
            "departmentname": "系统服务部"
        },
        {
            "employee_id": 6,
            "employee_account": "6767",
            "username": "龙飞",
            "password": "9889789",
            "age": 24,
            "address": "江苏省南京市人民路88号",
            "departmentname": "广告部"
        },
        {
            "employee_id": 10,
            "employee_account": "11111111",
            "username": "测试一",
            "password": "1111111",
            "age": 11111,
            "address": "四川成都市",
            "departmentname": "广告部"
        }
    ],
    "start": 1,
    "end": 3
}

所用到的几个类:

  • Employee.java:实体类
  • Page.java:分页类
  • EmployeeDao.java:持久层接口
  • EmployeeMapping.xml:数据库映射文件
  • EmployeeService.java:服务层接口
  • EmployeeServiceImpl.java:服务层接口实现类
  • EmployeeController.java:控制器类

起主要作用的是Page类:

	private int pagNum;// 当前的页数
	private int pageSize;// 每页显示数量,limit函数第二个参数
	private int totalRecord;// 总记录数
	private int totalPage;// 总页数
	private int startIndex;// 开始位置,limit函数第一个参数
	private List<T> dateList;
	private int start;
	private int end;

	public Page() {
	}

	public Page(int pagNum, int pageSize, int totalRecord) {
		this.pagNum = pagNum;
		this.pageSize = pageSize;
		this.totalRecord = totalRecord;
		// 计算总页数
		if (totalRecord % pageSize == 0) {
			this.totalPage = totalRecord / pageSize;
		} else {
			this.totalPage = (totalRecord / pageSize) + 1;
		}
		// 确定limit函数的第一个参数的值
		this.startIndex = pagNum * pageSize;
		this.start = 1;
		this.end = 5;
		if (totalPage <= 5) {
			this.end = this.totalPage;
		} else {// pagNum=6;start=4;end=8
			this.start = pagNum - 2;
			this.end = pagNum + 2;
		}
		if (start < 0) {
			this.start = 1;
			this.end = 5;
		}
		// 举个例子:一共有10页,现在就在第10页,那么根据上面的逻辑end=12,错误;则end=this.totalPage;且下面导航栏还是要出现5个,则start=end-5
		if (end > this.totalPage) {
			this.end = totalPage;
			this.start = end - 5;
		}
	}

从数据库获取相关信息:

  • dao接口:
public interface EmployeeDao {
	//获取数据的总条数,即totalRecord
	int getEmployeeTotal();
	//获取指定的数据
	List<Employee> getAllEmployee(Page<Employee> page);
}
  • mapping文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.oa.dao.EmployeeDao">
	<select id="getEmployeeTotal" resultType="java.lang.Integer">
		SELECT COUNT(1) FROM
		employee
	</select>
	<select id="getAllEmployee"
		resultType="com.example.oa.domain.Employee"
		parameterType="com.example.oa.domain.Page">
		SELECT
		e.employee_id,
		e.employee_account,
		e.username,
		e.`password`,
		e.age,
		e.address,
		d.departmentname
		FROM
		employee e,
		department d
		WHERE
		e.departmentid = d.departmentid LIMIT
		#{startIndex},#{pageSize}
	</select>
</mapper>
  • service层接口:
public interface EmployeeService {
	//返回分页数据和主题信息
	Page<Employee> getEmployee(Page<Employee> page);
}
  • service实现类:
@Service
public class EmployeeServiceImpl implements EmployeeService {
	@Autowired
	private EmployeeDao employeeDao;
	private Logger log = Logger.getLogger(EmployeeServiceImpl.class);

	@Override
	public Page<Employee> getEmployee(Page<Employee> page) {
		//获取总条数,即totalRecord
		int total = employeeDao.getEmployeeTotal();
		Page<Employee> allpage = new Page<Employee>(page.getPagNum(), page.getPageSize(), total);
		log.info("allpage:" + allpage.toString());
		//将获取到的集合数据,添加到page中的datalist参数中
		allpage.setDateList(employeeDao.getAllEmployee(allpage));
		//返回所有的分页参数和数据
		return allpage;
	}

}
  • 控制层:
@Controller
@RequestMapping(value = "/employeeController")
public class EmployeeController {
	@Autowired
	private EmployeeService employeeService;

	@RequestMapping(value = "/getAll")
	@ResponseBody
	public Page<Employee> getAll(Page<Employee> page) {
		Page<Employee> page1 = employeeService.getEmployee(page);
		return page1;
	}
}
  • 数据表的话,自己建一张表就行了(以下是我的SQL)
CREATE TABLE `employee` (
  `employee_id` int(11) NOT NULL AUTO_INCREMENT,
  `employee_account` varchar(255) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(100) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  `departmentid` int(11) DEFAULT NULL,
  `role` int(3) NOT NULL,
  PRIMARY KEY (`employee_id`),
  KEY `departmentid` (`departmentid`) USING BTREE,
  CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`departmentid`) REFERENCES `department` (`departmentid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='员工表';


至此,SSM框架的分页功能实现完成。完整代码以上传到码云,有需要请下载:Paging

参考博文:

Java Web(十一) 分页功能的实现
Java 实现分页功能

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
前端代码: ``` // 分页展示Hdfs文件列表 function listFiles(pageNum) { $.ajax({ url: "/hdfs/list", type: "GET", dataType: "json", data: {"pageNum": pageNum}, success: function (result) { var data = result.data; var html = ""; $.each(data.list, function (index, item) { var isDir = item.isDir ? "文件夹" : "文件"; var size = item.isDir ? "-" : (item.size / 1024).toFixed(2) + "KB"; html += "<tr><td>" + item.pathSuffix + "</td><td>" + isDir + "</td><td>" + size + "</td><td>" + item.owner + "</td><td>" + item.group + "</td><td>" + item.permission + "</td><td>" + item.modificationTime + "</td><td><button class='btn btn-primary' onclick='downloadFile(\"" + item.path + "\")'>下载</button>" + "<button class='btn btn-danger' onclick='deleteFile(\"" + item.path + "\")'>删除</button></td></tr>"; }); $("#file_list").html(html); $("#page_info").html("第 " + data.pageNum + " 页,共 " + data.pages + " 页,总 " + data.total + " 条记录"); $("#page_nav").html("<ul class='pagination'><li><a href='#' onclick='listFiles(1)'>首页</a></li>" + "<li><a href='#' onclick='listFiles(" + data.prePage + ")'>上一页</a></li>" + "<li><a href='#' onclick='listFiles(" + data.nextPage + ")'>下一页</a></li>" + "<li><a href='#' onclick='listFiles(" + data.pages + ")'>末页</a></li></ul>"); } }); } // 上传文件 function uploadFile() { var formData = new FormData(); formData.append("file", $("#file")[0].files[0]); $.ajax({ url: "/hdfs/upload", type: "POST", data: formData, processData: false, contentType: false, cache: false, success: function (result) { if (result.code == 200) { alert("上传成功"); listFiles(1); } else { alert(result.msg); } } }); } // 删除文件 function deleteFile(path) { if (confirm("您确认要删除该文件吗?")) { $.ajax({ url: "/hdfs/delete", type: "POST", dataType: "json", data: {"path": path}, success: function (result) { if (result.code == 200) { alert("删除成功"); listFiles(1); } else { alert(result.msg); } } }); } } // 下载文件 function downloadFile(path) { window.location.href = "/hdfs/download?path=" + path; } ``` 后端代码: ``` // 分页展示Hdfs文件列表 @GetMapping("/list") @ResponseBody public ResultDTO listFiles(@RequestParam(defaultValue = "1") Integer pageNum) { try { PageHelper.startPage(pageNum, 10); List<FileStatus> fileStatuses = hdfsService.listFiles("/"); PageInfo<FileStatus> pageInfo = new PageInfo<>(fileStatuses); Map<String, Object> data = new HashMap<>(); data.put("list", fileStatuses); data.put("pageNum", pageInfo.getPageNum()); data.put("pages", pageInfo.getPages()); data.put("total", pageInfo.getTotal()); data.put("prePage", pageInfo.getPrePage()); data.put("nextPage", pageInfo.getNextPage()); return ResultDTO.success(data); } catch (IOException e) { return ResultDTO.fail("获取文件列表失败:" + e.getMessage()); } } // 上传文件 @PostMapping("/upload") @ResponseBody public ResultDTO uploadFile(@RequestParam("file") MultipartFile file) { try { if (file.isEmpty()) { return ResultDTO.fail("上传文件不能为空"); } String fileName = file.getOriginalFilename(); String filePath = "/uploads/" + fileName; boolean result = hdfsService.uploadFile(file.getInputStream(), filePath); if (result) { return ResultDTO.success("上传成功"); } else { return ResultDTO.fail("上传失败"); } } catch (IOException e) { return ResultDTO.fail("上传失败:" + e.getMessage()); } } // 删除文件 @PostMapping("/delete") @ResponseBody public ResultDTO deleteFile(@RequestParam String path) { try { boolean result = hdfsService.deleteFile(path); if (result) { return ResultDTO.success("删除成功"); } else { return ResultDTO.fail("删除失败"); } } catch (IOException e) { return ResultDTO.fail("删除失败:" + e.getMessage()); } } // 下载文件 @GetMapping("/download") @ResponseBody public void downloadFile(@RequestParam String path, HttpServletResponse response) { try { InputStream inputStream = hdfsService.readFile(path); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(path.substring(path.lastIndexOf("/") + 1), "UTF-8")); IOUtils.copy(inputStream, response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { e.printStackTrace(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值