网页分页显示数据库内容+模糊查找

网页分页显示一般分为以下三种方式:
1.把数据库所有的数据查询出来放在内存中,
然后从内存逐页取数据(不推荐)
2.要取某一个数据,在数据库中分页查询,一次
只查询一页数据(推荐)
3.上面两种结合,从数据库中拿出一批数据缓存到
内存中(redis)

分页sql语句,不同的数据库,分页sql语句不同,现在只说一下MySQL数据库的分页
mysql:
/*
limit 语句放在sql语句的最后
limit 参数1,参数2
参数1:起始位置 (实际上从起始位置+1的那条记录开始)
(currentPage-1)*pageSize
参数2:查几条数据 ,每页的记录条数
*/
/*
int currentPage=1
int pageSize=3;
从0的下一条记录开始,查询3调数据
*/
select * from t_user limit 0,3;
/*
int currentPage=2
int pageSize=3;
从3的下一条记录开始,查询3调数据
*/
select * from t_user limit 3,3;
/*
int currentPage=3
int pageSize=3;
从6的下一条记录开始,查询3调数据
*/
select * from t_user limit 6,3;

分页的算法

假设有10页,显示的分页条中最多显示5个超链接,有如下算法:

/**
* 此方法是计算页面分页条中有多少个超链接
* @param currentPage
* @param pageSize
* @param totalCount
* @param totalPage
* @return
*/
public List<Integer> getFenYe_a_Num(
int currentPage,
int pageSize,
int totalCount,
int totalPage){
List<Integer> aNum=new ArrayList<Integer>();
//int showNum_a=CommonValue.showNum_a;
if(totalCount/pageSize>=showNum_a){
  //总页数大于等于showNum_a 5
  f(currentPage<showNum_a/2+1){
    //当前页在showNum_a的中间左边
    for(int i=1;i<=showNum_a;i++){
      aNum.add(new Integer(i));
    }
  }else if((totalPage-currentPage)<(showNum_a/2+1)){
    //判断如果是到最后,最后的那几个数字不能移动的
    for(int i=1;i<=showNum_a;i++){
      aNum.add(new Integer(totalPage-showNum_a+i));
    }
  }else{
    //不是头,也不是尾,是中间部分
    for(int i=(currentPage-(showNum_a-(showNum_a/2+1)));i<=(currentPage+(showNum_a-(showNum_a/2+1)));i++){
      aNum.add(new Integer(i));
    }
  }
}else{
  //总页数不够showNum_a 5
  for(int i=1;i<=totalPage;i++){
    aNum.add(new Integer(i));
  }
}
  return aNum;
}

显示效果如下:

第1页
1 2 3 4 5
第2页
1 2 3 4 5
第3页
1 2 3 4 5
第4页
2 3 4 5 6
第5页
3 4 5 6 7
第6页
4 5 6 7 8
第7页
5 6 7 8 9
第8页
6 7 8 9 10
第9页
6 7 8 9 10
第10页
6 7 8 9 10

有关于多模糊条件查询问题:
方案一:
select * from t_user
where user_loginname like '%%' and
user_nickname like '%知%'
原理:列名 like '%%',相当于没条件
列名 like '%条件值%' 有模糊条件

方案二:
必须借助mybatis的动态sql
<select id="findUsersByPage"
parameterType="User"
resultMap="user_Map">
select * from
<where>
<if test="loginName !=null">
user_loginname like #{loginName}
</if
<if test="nickName !=null">
and user_nickname like #{nickName}
</if
</where>
</select>

猜你喜欢

转载自www.cnblogs.com/Edwin-future/p/9568121.html
今日推荐