JFinal之旅——find方法及分页查询

xiaoxiao2021-02-28  98

先说明下项目环境:Maven项目、JDK是1.7、编码是UTF-8、JFinal是3.1版本然后tomcat是8.0 里面的命名规则都在之前的博文有写到,写博文的时候也是重新搭建了一个项目,一步步来实现功能

JFinal中的find方法 说明:一般的分页查询,都是多表查询,但JFinal的find的返回值是List(ps:M对应者模型类),但实际不然。 /** * 查询方法! * find * 2017年8月5日 下午4:22:48 */ public void find(){ //这里先介绍JFinal中的Find方法! String sql="SELECT pw_user.username,sys_usertype.usertypename FROM pw_user INNER JOIN sys_usertype ON sys_usertype.usertypeId = pw_user.usertypeId"; List<User> list=User.dao.find(sql); String userTypeName=list.get(0).get("usertypename"); renderText("结果值:"+list.toString()+"\n 读取到的值:"+userTypeName); }

说明:上面的查询语句中的usertypename不是原来User类中的字段,但还是能够从中赋值并读取 结果截图:

认识这点是很重要的

创建分页类 说明:一般分页查询,都会从前台传 2个参数:当前页及页码,但是不免会用到数据总数是否改变等情况,所以这里从前台传过来的参数有这些:当前页、当前页大小、总数据行数、最大页数。但是JFinal的page类又不能设置这些数据,就只能自己创建了实体类Pagination来接收并设置数据: package com.gx.test.common.util; import java.io.Serializable; /** * 分页页码显示(原分页插件不可设置分页数据) * @title * @filename PaginationSupport.java * @author L-z * @date 2017年8月1日 下午3:11:09 * @version 1.0 */ public class Pagination implements Serializable { private static final long serialVersionUID = 2234283310680151858L; /** 默认显示页码数 */ public static final int DEFAULT_OFFSET_SIZE = 3; /** 默认每页行数 */ public static final int DEFAULT_PAGE_SIZE = 20; /** 显示页码数 */ private int totalPage = DEFAULT_OFFSET_SIZE; /** 每页行数 */ private int pageSize = DEFAULT_PAGE_SIZE; /** 记录总数 */ private long totalRow; /** 当前页码 */ private int pageNumber = 1; public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public long getTotalRow() { return totalRow; } public void setTotalRow(long totalRow) { this.totalRow = totalRow; } public int getPageNumber() { return pageNumber; } public void setPageNumber(int pageNumber) { this.pageNumber = pageNumber; } /** * 第一条数据位置 * * @return */ public int getFirstResult() { return (pageNumber - 1) * pageSize; } /** * 获取总页数 */ public long getPageCount() { if (totalRow % pageSize == 0) return totalRow / pageSize; else return (totalRow / pageSize) + 1; } } 接收并设置参数 说明:查询条件肯定不止分页参数,所有要创建个UserDto来继承Pagination类。 使用Dto来接收参数有个好处:如果查询条件要增加或修改字段,直接在Dto里修改成员就可以的。 package com.gx.test.pojo.dto; import com.gx.test.common.util.Pagination; /** * 分页查询条件 * @title * @filename UserDto.java * @author L-z * @date 2017年8月2日 上午9:08:00 * @version 1.0 */ public class UserDto extends Pagination { /** * @title */ private static final long serialVersionUID = 1952110800486176148L; /** * 用户姓名 */ private String userName; /** * 用户类别 */ private String userType; private Integer userId; public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserType() { return userType; } public void setUserType(String userType) { this.userType = userType; } @Override public String toString() { return "UserDto [userName=" + userName + ", userType=" + userType + ", userId=" + userId + "]"; } }

下面是控制器代码

/** * 分页查询 * pageFind * 2017年8月5日 下午4:42:43 */ public void pageFind(){ //接收参数 UserDto userDto=super.getBean(UserDto.class); //手动设置值 userDto.setPageNumber(1); userDto.setPageSize(10); //实际上只要调用 serivce中的方法 传userDto参数即可! //这里我们为了简单 就直接实现serviceImpl中的方法 //暂时不设置查询条件 // sql语句:SELECT pw_user.username,sys_usertype.usertypename FROM pw_user INNER JOIN sys_usertype ON sys_usertype.usertypeId = pw_user.usertypeId"; String from =" FROM pw_user INNER JOIN sys_usertype ON sys_usertype.usertypeId = pw_user.usertypeId "; String totalRowSql="select count(*)"+from; String findSql="SELECT pw_user.username,sys_usertype.usertypename "+from ; Page<User> page=User.dao.paginateByFullSql(userDto.getPageNumber(), userDto.getPageSize(), totalRowSql, findSql); renderText("分页数据:\n"+page.toString()+"\n数据集合:"+page.getList().toString()); }

结果截图:

结论 这里主要介绍了JFinal中的find方法的强大,并且可以看到分页查询的方式、思路。这里的分页方法还不够简洁,接下来的一篇博文讲介绍JFinal中的sql管理与动态生成,来实现多表查询及分页。
转载请注明原文地址: https://www.6miu.com/read-29856.html

最新回复(0)