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; }
}