怎么使用sql server 2008 分页按条件查询的结果分页显示?求大神给代码

Hibernate(11)
IIndexDaopackage com.ucap.netcheck.import com.bination.beans.IndexCombinationBimport com.mon.Pimport com.mon.dao.GenericDimport com.ucap.netcheck.entity.S/**&& &* @Title: IIndexDao.java &* @Package com.ucap.netcheck.index.dao &* @Description: &* @author Zuoquan Tu &* @date
下午6:35:31 &* @version V1.0&& &*/public interface IIndexDao {&&/**&& * queryJoinedActivity(通过这个方法实现获取首页的分页信息)&& * && * @Title: queryJoinedActivity&& * @Description: 通过这个方法实现获取首页的分页信息&& * @param @param pageNo 要查找的页数&& * @param @param pageRow 每页显示记录数&& * @param @param params 查找条件&& * @param @return 设定文件&& * @return Page&IndexCombinationBean&& 返回首页制定页面的结果集的结果集&& * @throws& */&public Page&IndexCombinationBean& queryIndexInfoByPage(&&&int pageNo,int pageRow, Object... params);}IndexDaoImplpackage com.ucap.netcheck.dao.import java.util.ArrayLimport java.util.Limport mons.lang.StringUimport org.springframework.stereotype.Rimport org.springframework.transaction.annotation.Timport com.bination.beans.IndexCombinationBimport com.mon.Pimport com.mon.dao.BaseDAO;import com.ucap.netcheck.dao.IIndexDimport com.ucap.netcheck.entity.CheckSimport com.ucap.netcheck.entity.Simport com.ucap.netcheck.entity.SiteSimport com.ucap.netcheck.entity.TaskSimport com.ucap.netcheck.exception.DAOE/**&& &* @Title: IndexDaoImpl.java &* @Package com.ucap.netcheck.index.dao &* @Description: &* @author Zuoquan Tu&* @date
下午6:37:29 &* @version V1.0&& &*/@Repository@Transactionalpublic class IndexDaoImpl extends BaseDAO implements IIndexDao {&&/**& * 通过条件查询分页信息& * params[0]:表示检查名称& * params[1]:表示首页网址& * params[2]:表示网站标识码& * params[3]:表示当前状态& * params[4]:表示的是用户id& */&@SuppressWarnings(&unchecked&)&public Page&IndexCombinationBean& queryIndexInfoByPage(&&&int pageNo,int pageRow, Object... params) {&&try {&&&//Map&String, Object& map = new HashMap&String, Object&();&&&List&Object& lists = new ArrayList&Object&();&&&String sql = &SELECT new com.bination.beans.IndexCombinationBean(& +&&&&&&&&&&&&&&&&& &s.wzmc,s.url,s.siteCode,cs.taskStatus,cs.taskRunNum,& +&&&&&&&&&&&&&&&&& &cs.taskOpenNum,cs.userId) & +&&&&&&&&& &FROM & + Site.class.getSimpleName() + & s,&&&&&&&&&&&&&&&&&& + CheckService.class.getSimpleName() + & cs,&&&&&&&&&&&&&&&&&& + SiteService.class.getSimpleName() + & ss && + &&&&&&&&& &WHERE ss.siteCode = s.siteCode AND ss.servId = cs.servId &;&&&&&&//通过网站名称进行查询&&&if (StringUtils.isNotBlank((String)params[0])) {&&&&sql += & AND s.wzmc like ? &;&&&&lists.add(&%& + (String)params[0] + &%&);&&&}&&&if (StringUtils.isNotBlank((String)params[1])) {&&&&sql += & AND s.url like ? &;&&&&lists.add(&%& + (String)params[1] + &%&);&&&}&&&if (StringUtils.isNotBlank((String)params[2])) {&&&&&&&&&&&&&&& sql += & AND s.siteCode like ? &;&&&&&&&&&&&&&&& lists.add(&%& + (String)params[2] + &%&);&&&}&&&if (null != (TaskStatus)params[3]) {&&&&//sql += & AND cs.taskStatus like ? &;&&&&//lists.add(&%& + (String)params[3] + &%&);&&&&&&&&sql += & AND cs.taskStatus =?&;&&&&lists.add((TaskStatus)params[3]);&&&&&&&&&&&}&&&if (null != (Integer)params[4]) {&&&&sql += & AND cs.userId =? &;&&&&lists.add((Integer)params[4]);&&&}&&&&&&Page&IndexCombinationBean& pages = this.queryByPage(sql, pageNo, pageRow, lists);&&&&&&//System.out.println(&pages.getRecordList().size() = & + pages.getRecordList().size());&&&&&} catch (Exception ex) {&&&throw new DAOException(&分页查询所有-&ERROR&, ex);&&}&}}IndexCombinationBeanpackage com.bination.import com.ucap.netcheck.entity.TaskS/**&& &* @Title: IndexCombinationBean.java &* @Package com.bination.beans &* @Description: 对应site表,task表,SiteService,CheckService表中的内容,供首页使用&* @author Tuzuoquan&* @date
下午6:54:50 &* @version V1.0&& &*/public class IndexCombinationBean {&&& /**&&&& * 网站名称&&&& */&private S&&/**& * 首页地址& */&private S&&/**& * 网站标识码,对应task表中的uuid& */&private String siteC&&/**& * 任务状态& */&private TaskStatus taskS&&/**& * 任务执行了的次数& */&private int taskRunN&&/**& * 任务开通总次数& */&private int taskOpenN&&/**& * 用户id& */&private int userId;&public IndexCombinationBean(String wzmc, String url, String siteCode,&&&TaskStatus taskStatus, int taskRunNum, int taskOpenNum, int userId) {&&this.wzmc =&&this.url =&&this.siteCode = siteC&&this.taskStatus = taskS&&this.taskRunNum = taskRunN&&this.taskOpenNum = taskOpenN&&this.userId = userId;&}&public String getWzmc() {&&&}&public void setWzmc(String wzmc) {&&this.wzmc =&}&public String getUrl() {&&&}&public void setUrl(String url) {&&this.url =&}&public String getSiteCode() {&&return siteC&}&public void setSiteCode(String siteCode) {&&this.siteCode = siteC&}&public TaskStatus getTaskStatus() {&&return taskS&}&public void setTaskStatus(TaskStatus taskStatus) {&&this.taskStatus = taskS&}&public int getTaskRunNum() {&&return taskRunN&}&public void setTaskRunNum(int taskRunNum) {&&this.taskRunNum = taskRunN&}&public int getTaskOpenNum() {&&return taskOpenN&}&public void setTaskOpenNum(int taskOpenNum) {&&this.taskOpenNum = taskOpenN&}&public int getUserId() {&&return userId;&}&public void setUserId(int userId) {&&this.userId = userId;&}}=====================================================================要转换成的对象:package com.kuman.cartoon.entity./**&* 用于分类导航部分的显示&* @author toto&*/public class CategoryNavigationBean {&&private I&&/**& * 内容ID& */&private I&&/**& * 封面& */&private S&&& &&& /**&&&& * 文件路径+文件名称,在附件表中&&&& */&&& private String file_&&& &&& /**&&&& * 文件名,在附件表中&&&& */&&& private String file_&&& &&& /**&&&& * 名称(标题)&&&& */&&& private S&&& &&& /**&&&& * 作者&&&& */&&& private S&&& &&& /**&&&& * 类型&&&& */&&& private S&&& &&& /**&&&& * 采集日期(时间)&&&& */&&& private String cj_&&& &&& /**&&&& * 序号&&&& */&&&&&& &&& /**&&&& * 排行类型&&&& */&&& private int categoryC&&& &public String getCover() {&&&}&public void setCover(String cover) {&&this.cover =&}&public Integer getNrid() {&&&}&public void setNrid(Integer nrid) {&&this.nrid =&}&public String getFile_path() {&&return file_&}&public void setFile_path(String file_path) {&&this.file_path = file_&}&public String getFile_name() {&&return file_&}&public void setFile_name(String file_name) {&&this.file_name = file_&}&public String getMc() {&&&}&public void setMc(String mc) {&&this.mc =&}&public String getZz() {&&&}&public void setZz(String zz) {&&this.zz =&}&public String getType() {&&&}&public void setType(String type) {&&this.type =&}&public String getCj_date() {&&return cj_&}&public void setCj_date(String cj_date) {&&this.cj_date = cj_&}&public int getPorder() {&&&}&public void setPorder(int porder) {&&this.porder =&}&public Integer getId() {&&&}&public void setId(Integer id) {&&this.id =&}&public int getCategoryCycle() {&&return categoryC&}&public void setCategoryCycle(int categoryCycle) {&&this.categoryCycle = categoryC&}}分页查询部分的代码:/**& * 按照条件查找到分类导航所需的信息& */&@Override&@Transactional(propagation = Propagation.REQUIRED)&public Page findCategoryNavigation(int page, int rows, String mc,&&&Integer type, Integer categoryCycle) {&&try {&&&List&Object& params = new ArrayList&Object&();&&&String sql = &select t.id,c.nrid,a.file_path || '/' || a.file_name as cover,& +&&&&&&&&&&&&&&&&& &a.file_path,a.file_name,c.mc,c.zz,c.type,c.cj_date,t.porder,t.category_cycle as categoryCycle & + &&&&&&&&& &from DM_CATEGORY_NAVIGATION t,DM_CONTENT c,DM_AFFIX a & + &&&&&&&&&&&&&&&&&&&&&&&& &where c.nrid = t.content_id & +& &&&&&&&&&&&&&&&&&&&&&&&& &and a.nrid = c.nrid & +& &&&&&&&&&&&&&&&&&&&&&&&& &and a.nrid = t.content_id & + &&&&&&&&&&&&&&&&&&&&&&&& &and a.file_type = 'HZHB_YLTS' &;&&&&&&//标题&&&if (StringUtils.isNotBlank(mc)) {&&&&sql += &and c.mc like ? &;&&&&params.add(&%& + mc + &%&);&&&}&&&//类型&&&if (null != type) {&&&&sql += &and c.type = ? &;&&&&params.add(type);&&&}&&&//排行类型:1.日,2.周,3.月&&&if (null != categoryCycle) {&&&&sql += &and t.category_cycle = ? &;&&&&params.add(categoryCycle);&&&}&&&sql += &order by& t.porder desc&;&&&&&&SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(sql);&&&for (int i = 0; i & params.size(); i++) {&&&&query = (SQLQuery) query.setParameter(i, params.get(i));&&&}&&&query.addScalar(&id&,StandardBasicTypes.INTEGER)&&&&&&& .addScalar(&nrid&, StandardBasicTypes.INTEGER)&&&&&&& .addScalar(&cover&,StandardBasicTypes.STRING)&&&&&&& .addScalar(&file_path&,StandardBasicTypes.STRING)&&&&&&& .addScalar(&file_name&,StandardBasicTypes.STRING)&&&&&&& .addScalar(&mc&,StandardBasicTypes.STRING)&&&&&&& .addScalar(&zz&, StandardBasicTypes.STRING)&&&&&&& .addScalar(&type&, StandardBasicTypes.STRING)&&&&&&& .addScalar(&cj_date&,StandardBasicTypes.STRING)&&&&&&& .addScalar(&porder&, StandardBasicTypes.INTEGER)&&&&&&& .addScalar(&categoryCycle&,StandardBasicTypes.INTEGER)&&&& .setResultTransformer(Transformers.aliasToBean(CategoryNavigationBean.class));&&&&&&Page pageInfo = new Page();&&&pageInfo.setPageNum(page);&&&pageInfo.setNumPerPage(rows);&&&&&&pageInfo.setAllRows(query.list().size());&&&&&&query.setFirstResult((page - 1) * rows);&&&query.setMaxResults(rows);&&&pageInfo.setRecordList(query.list());&&&&&&int allPages = pageInfo.getAllRows() / pageInfo.getNumPerPage();&&&if (pageInfo.getAllRows() % pageInfo.getNumPerPage() == 0) {&&&&pageInfo.setAllPages(allPages);&&&} else {&&&&//总页数&&&&pageInfo.setAllPages(allPages + 1);&&&}&&&return pageI&&} catch (Exception e) {&&&e.printStackTrace();&&}&&&}
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1072209次
积分:18549
积分:18549
排名:第317名
原创:755篇
转载:403篇
评论:102条
(1)(4)(35)(5)(6)(3)(1)(6)(4)(12)(14)(3)(18)(29)(28)(17)(23)(12)(7)(18)(51)(46)(76)(93)(57)(42)(12)(27)(11)(25)(16)(23)(5)(6)(23)(64)(51)(9)(15)(18)(23)(17)(11)(9)(32)(41)(14)(74)(21)(1)
阅读:7023
文章:32篇
阅读:39618SQL Server 分页 查询语句_百度知道如何在Sql Server上使用一条SQL查询结果总数并且分页_百度知道真正高效的SQLSERVER分页查询(多种方案)
字体:[ ] 类型:转载 时间:
Sqlserver数据库分页查询一直是Sqlserver的短板,分页查询每页30条,查询第1500页(即第条数据)进行测试,分析出最高效的查询,感兴趣的朋友可以参考下哈
Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID、YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案、最简单、普通的方法:
代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC
平均查询100次所需时间:45s 第二种方案:
代码如下: SELECT * FROM (  SELECT TOP 30 * FROM (SELECT TOP 45030 * FROM ARTICLE ORDER BY YEAR DESC, ID DESC) f ORDER BY f.YEAR ASC, f.ID DESC) s ORDER BY s.YEAR DESC,s.ID DESC
平均查询100次所需时间:138S 第三种方案:
代码如下: SELECT * FROM ARTICLE w1, ( SELECT TOP 30 ID FROM ( SELECT TOP 50030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC ) w ORDER BY w.YEAR ASC, w.ID ASC ) w2 WHERE w1.ID = w2.ID ORDER BY w1.YEAR DESC, w1.ID DESC
平均查询100次所需时间:21S 第四种方案:
代码如下: SELECT * FROM ARTICLE w1 WHERE ID in ( SELECT top 30 ID FROM ( SELECT top 45030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC ) w ORDER BY w.YEAR ASC, w.ID ASC ) ORDER BY w1.YEAR DESC, w1.ID DESC
平均查询100次所需时间:20S 第五种方案:
代码如下: SELECT w2.n, w1.* FROM ARTICLE w1, (   SELECT TOP 50030 row_number() OVER (ORDER BY YEAR DESC, ID DESC) n, ID FROM ARTICLE ) w2 WHERE w1.ID = w2.ID AND w2.n & 50000 ORDER BY w2.n ASC
平均查询100次所需时间:15S 查询第条记录 第一种方案:
代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 1000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC
平均查询100次所需时间:80s 第二种方案:
代码如下: SELECT * FROM (    SELECT TOP 30 * FROM (SELECT TOP 1030 * FROM ARTICLE ORDER BY YEAR DESC, ID DESC) f ORDER BY f.YEAR ASC, f.ID DESC ) s ORDER BY s.YEAR DESC,s.ID DESC
平均查询100次所需时间:30S 第三种方案:
代码如下: SELECT * FROM ARTICLE w1, ( SELECT TOP 30 ID FROM ( SELECT TOP 1030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC ) w ORDER BY w.YEAR ASC, w.ID ASC ) w2 WHERE w1.ID = w2.ID ORDER BY w1.YEAR DESC, w1.ID DESC
平均查询100次所需时间:12S 第四种方案:
代码如下: SELECT * FROM ARTICLE w1 WHERE ID in ( SELECT top 30 ID FROM ( SELECT top 1030 ID, YEAR FROM ARTICLE ORDER BY YEAR DESC, ID DESC ) w ORDER BY w.YEAR ASC, w.ID ASC ) ORDER BY w1.YEAR DESC, w1.ID DESC
平均查询100次所需时间:13S 第五种方案:
代码如下: SELECT w2.n, w1.* FROM ARTICLE w1,(    SELECT TOP 1030 row_number() OVER (ORDER BY YEAR DESC, ID DESC) n, ID FROM ARTICLE ) w2 WHERE w1.ID = w2.ID AND w2.n & 1000 ORDER BY w2.n ASC
平均查询100次所需时间:14S 由此可见在查询页数靠前时,效率3&4&5&2&1,页码靠后时5&4&3&1&2,再根据用户习惯,一般用户的检索只看最前面几页,因此选择3 4 5方案均可,若综合考虑方案5是最好的选择,但是要注意SQL2000不支持row_number()函数,由于时间和条件的限制没有做更深入、范围更广的测试,有兴趣的可以仔细研究下。 以下是根据第四种方案编写的一个分页存储过程:
代码如下: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sys_Page_v2]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[sys_Page_v2] GO CREATE PROCEDURE [dbo].[sys_Page_v2] @PCount int output, --总页数输出 @RCount int output, --总记录数输出 @sys_Table nvarchar(100), --查询表名 @sys_Key varchar(50), --主键 @sys_Fields nvarchar(500), --查询字段 @sys_Where nvarchar(3000), --查询条件 @sys_Order nvarchar(100), --排序字段 @sys_Begin int, --开始位置 @sys_PageIndex int, --当前页数 @sys_PageSize int --页大小 AS SET NOCOUNT ON SET ANSI_WARNINGS ON IF @sys_PageSize & 0 OR @sys_PageIndex & 0 BEGIN RETURN END DECLARE @new_where1 NVARCHAR(3000) DECLARE @new_order1 NVARCHAR(100) DECLARE @new_order2 NVARCHAR(100) DECLARE @Sql NVARCHAR(4000) DECLARE @SqlCount NVARCHAR(4000) DECLARE @Top int if(@sys_Begin &=0) set @sys_Begin=0 else set @sys_Begin=@sys_Begin-1 IF ISNULL(@sys_Where,'') = '' SET @new_where1 = ' ' ELSE SET @new_where1 = ' WHERE ' + @sys_Where IF ISNULL(@sys_Order,'') && '' BEGIN SET @new_order1 = ' ORDER BY ' + Replace(@sys_Order,'desc','') SET @new_order1 = Replace(@new_order1,'asc','desc') SET @new_order2 = ' ORDER BY ' + @sys_Order END ELSE BEGIN SET @new_order1 = ' ORDER BY ID DESC' SET @new_order2 = ' ORDER BY ID ASC' END SET @SqlCount = 'SELECT @RCount=COUNT(1),@PCount=CEILING((COUNT(1)+0.0)/' + CAST(@sys_PageSize AS NVARCHAR)+') FROM ' + @sys_Table + @new_where1 EXEC SP_EXECUTESQL @SqlCount,N'@RCount INT OUTPUT,@PCount INT OUTPUT', @RCount OUTPUT,@PCount OUTPUT IF @sys_PageIndex & CEILING((@RCount+0.0)/@sys_PageSize) --如果输入的当前页数大于实际总页数,则把实际总页数赋值给当前页数 BEGIN SET @sys_PageIndex = CEILING((@RCount+0.0)/@sys_PageSize) END set @sql = 'select '+ @sys_fields +' from ' + @sys_Table + ' w1 ' + ' where '+ @sys_Key +' in (' +'select top '+ ltrim(str(@sys_PageSize)) +' ' + @sys_Key + ' from ' +'(' +'select top ' + ltrim(STR(@sys_PageSize * @sys_PageIndex + @sys_Begin)) + ' ' + @sys_Key + ' FROM ' + @sys_Table + @new_where1 + @new_order2 +') w ' + @new_order1 +') ' + @new_order2 print(@sql) Exec(@sql) GO
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 sqlserver2012分页 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信