public class Page {
private int page = 1; //初始页
private int rows = 10; //一页多少行数据
private String q;// 要查询的 关键字
private String order = "asc";// 是'asc'或'desc'
protected String sort = "d.id";// 那个字段进行排序 public int getBegin() {
return (page - 1) * rows;
} public int getEnd() {
return rows;
}
// 上面4个属性给mapper使用,limit,order里面使用 public int getPage() {
return page;
} public void setPage(int page) {
this.page = page;
} public int getRows() {
return rows;
} public void setRows(int rows) {
this.rows = rows;
} public String getQ() {
return q;
} public void setQ(String q) {
this.q = q;
} public String getOrder() {
return order;
} public void setOrder(String order) {
this.order = order;
} public String getSort() {
return sort;
} public void setSort(String sort) {
this.sort = sort;
}
}
定义一个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;
}
}