1 public class Page { 2 private int page = 1; //初始页 3 private int rows = 10; //一页多少行数据 4 private String q;// 要查询的 关键字 5 private String order = "asc";// 是'asc'或'desc' 6 protected String sort = "d.id";// 那个字段进行排序 7 8 public int getBegin() { 9 return (page - 1) * rows; 10 } 11 12 public int getEnd() { 13 return rows; 14 } 15 // 上面4个属性给mapper使用,limit,order里面使用 16 17 public int getPage() { 18 return page; 19 } 20 21 public void setPage(int page) { 22 this.page = page; 23 } 24 25 public int getRows() { 26 return rows; 27 } 28 29 public void setRows(int rows) { 30 this.rows = rows; 31 } 32 33 public String getQ() { 34 return q; 35 } 36 37 public void setQ(String q) { 38 this.q = q; 39 } 40 41 public String getOrder() { 42 return order; 43 } 44 45 public void setOrder(String order) { 46 this.order = order; 47 } 48 49 public String getSort() { 50 return sort; 51 } 52 53 public void setSort(String sort) { 54 this.sort = sort; 55 } 60 }
定义一个page类,简单的处理一哈,这个应该都看得懂,很简单
这个PageMapper就是Dao接口里面的 定义一个泛型,方便封装,其余的类想用分页直接继承,改一下类型
public interface PageMapper<T> { Integer findCountByQuery(Query query); //查询的行数 List<T> findLimitByQuery(Query query); //模糊查询 }
下面就贴一下xml文件的 代码,就是写的sql 映射这一些,现在开发都用的映射,写xml配置,以前是用的注解,不会的度娘吧
下面
StudentQuery里面的定义就看自己的需求,get、set方法,这个会不 继承上面的pege就好了
<!-- 根据条件查询count --> <!-- findCountByQuery 方法名 dao接口的两个 这个是查询的行数 parameterType就是返回 --> <select id="findCountByQuery" resultType="int" parameterType="StudentQuery"> select count(id) from t_student <!--用的包含--> <include refid="whereSql" /> </select> <!-- 根据条件查询limit --> <!--里面的跟上面差不多 只是id要对应方法名哦--> <select id="findLimitByQuery" resultType="Student" parameterType="StudentQuery"> select id,name,teacher from t_student <include refid="whereSql" /> limit #{begin},#{end} </select> <!-- 公共的查询条件 根据name模糊查询 当然了 支持多个查询,在后面if就行了跟着这个写 --> <sql id="whereSql"> <where> <if test="name!=null and name!=''"> and name like name('%',#{name},'%') </if> </where> </sql>
下面就是service和实现类的
public interface PageService<T> { /** * 分页 * @param query * @return */ PageList findByQuery(Query query); }
public abstract class BaseServiceImpl<T> implements IBaseService<T> { @Autowired BaseMapper<T> baseMapper; @Override public PageList findByQuery(Query query) { PageList pageList = new PageList(); Integer count = baseMapper.findCountByQuery(query); if (count == null || count == 0) { return pageList; } List<T> rows = baseMapper.findLimitByQuery(query); pageList.setRows(rows); pageList.setTotal(count); return pageList; } }
好了 最后只需要调用service的方法就搞定了
controller里面直接调用方法返回给前端json数据就好了
注意一点,
StudentQuery 是个人自己定义的 只需要继承pege类就好了 里面就是模糊查询的参数, 这个
PageList 就可以改变的哈 我是用这个类来表示的 当然 你可以换成二维数组 分页查询的数据默认查询全部 丢到前端的就是pagelist 学会变通一下 前端的就不写了 本人是写后台的 没看懂的可以留言
import java.util.ArrayList; import java.util.List; public class PageList { private int total; //多少行 private List rows = new ArrayList(); //显示的数据存到集合里面 public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public List getRows() { return rows; } public void setRows(List rows) { this.rows = rows; } @Override public String toString() { return "PageList [total=" + total + ", rows=" + rows + "]"; } }
/** * controller * * @author Administrator * */ @RequestMapping("/Student") @Controller public class Controller { @Autowired PageService service; /** * * @param query * @return */ @ResponseBody @RequestMapping("all") public JSONObject selectAll(StudentQuery query) { JSONObject jsonObject = new JSONObject(); jsonObject.put("student", service.findByQuery(query)); return jsonObject; }
}