我们做一些web项目中,在一些查询页面上,总会有搜索框,今天就在此记录一下自己的做法。
在页面上的搜索框是这样的
在我的xml中,因为我是用的存储过程分页,这是我项目里面的,重点就是后面的if标签,因为是测试,所以我就写了三个条件。
Mybatis中的xml:
然后再Mapper的接口里面,要接收这些参数
List selectCaptialinfotest(@Param("pageSize") int pageSize,
@Param("pageIndex") int pageIndex,
@Param("capitalName") String capitalName,
@Param("capitalType") String capitalType,
@Param("ownername") String ownername);
你的xml里面有几个#{},你就得写几个@Param传值
然后就在service实现,这个就不写了,很简单,就是return一个mapper里面的接口。
然后在Controller里面接收前台的值,和返回JSON给前台页面
Controller代码:
@RequestMapping("selectCaptialinfotest")
@ResponseBody
public Page selectCaptialinfotest(HttpServletRequest request,int pageSize,int pageIndex,@RequestParam(value="capitalName",defaultValue="") String capitalName,
@RequestParam(value="capitalType",defaultValue="") String capitalType,
@RequestParam(value="keepername",defaultValue="") String keepername) {
//获取总条数,即totalRecord
int count = capitalInfomapper.getEmployeeTotal();
System.out.println("得到的capitalname:"+capitalName);
List mlis=IcapitalInfoService.selectCaptialinfotest(pageSize, pageIndex,capitalName,capitalType,keepername);
String token = request.getParameter("access_token");
BASIC_USER_INFO basicuserinfo = JWTutils.unsign(token, BASIC_USER_INFO.class);
logger.info("用户"+basicuserinfo.getUserId()+"查询资产信息:");
//返回所有的分页参数和数据
return new Page(200,"success",pageIndex,pageSize,count,mlis);
}
获取总行数,是因为我的前台需要这个值,然后我的Page类是一个泛型,里面定义的是Json数据的类型。
@RequestMapping和@ResponseBody就不用多说了吧,@RequestParam括号里面的defaultValue是设置默认值,我写个空的话就是搜索框不输入值就是搜索所有的数据,因为在我的xml里面if标签有判断。
下面附上我的Page类,做分页给前台JSON很好用也很常用的一个类。
Page:
package YW.Eos.Frame.pojo;
import java.util.List;
public class Page {
private int pagNum;// 当前的页数
private int pageSize;// 每页显示数量,limit函数第二个参数
private int totalRecord;// 总记录数
private int count;// 总页数
private int startIndex;// 开始位置,limit函数第一个参数
private int start;
private int end;
private int code;
private String message;
private List data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Page(int code,String msg,int pageIndex,int pageSize,int count,List data) {
this.pagNum=pageIndex;
this.code=code;
this.message=msg;
this.pageSize=pageSize;
this.count=count;
this.data=data;
}
public Page(int pagNum, int pageSize, int totalRecord) {
this.pagNum = pagNum;
this.pageSize = pageSize;
this.totalRecord = totalRecord;
// 计算总页数
if (totalRecord % pageSize == 0) {
this.count = totalRecord / pageSize;
} else {
this.count = (totalRecord / pageSize) + 1;
}
// 确定limit函数的第一个参数的值
this.startIndex = pagNum * pageSize;
this.start = 1;
this.end = 5;
if (count <= 5) {
this.end = this.count;
} 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.count) {
this.end = count;
this.start = end - 5;
}
}
public int getPagNum() {
return pagNum;
}
public void setPagNum(int pagNum) {
this.pagNum = pagNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
}
sql server和Mysql都可以用,因为mysql是limit函数,但是sql server需要调用储存过程。
好的 记录到此 ,有问题可留言。