spring+hibernate+mysql 分页

最近在做毕业设计,想着每天记录下做了什么吧,这样也方便看看进度。接下来先总结下前几天做的东西,有些是以前就记录好的,这里copy下。

这个是15号做的笔记,我不大习惯做笔记,但是发现这个习惯真的得好好养成,现在就逼自己一下吧。基本上所有的东西都是网上找的。

今天的毕设的事情,碰到了MySQL数据库分页的事情,
现在还没做完,不过网上找到了好些资料, 主要问题大概是解决了的。

MySQL中一般的分页作法大多利用Limit限制回传的资料笔 数来达成分页效果
例如下面的代码
Select * From news limit 0, 100第一页
Select * From news limit 100,100第二页
Select * From news limit 200,100第三页
mysql >   SELECT   *   FROM   table  LIMIT  5 , 10 ;   //  检索记录行  6 - 15

// 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为  - 1 : 
mysql
>   SELECT   *   FROM   table  LIMIT  95 , - 1 //  检索记录行  96 - last.

// 如果只给定一个参数,它表示返回最大的记录行数目: 
mysql
>   SELECT   *   FROM   table  LIMIT  5 ;      // 检索前  5  个记录行

// 换句话说,LIMIT n 等价于 LIMIT  0 ,n。

或者
定位到id值后再用id值作条件
优化的作法
第一页
Select * From news Where id >=(
           Select id From news Order By id limit 0,1 ) limit 100
第二页
Select * From news Where id >=(
            Select id From news Order By id limit 100,1
) limit 100
第三页
Select * From news Where id >=(
            Select id From news Order By id limit 200,1
) limit 100

本来这样就没事了的,但是我的项目用到了Hibernate, HQL语言不支持limit, limit是对mysql数据专用分页的。
网上又有资料说

  1. String hql = "from User order by createTime";  
  2. Query q = this.getSession().createQuery(hql);  
  3. q.setFirstResult(0);  
  4. q.setMaxResults(10);  
  5. q.list()

这样也就解决了HQL语言的分页。

但是问题又来了的,项目中不单单是Hibernate,还有Spring。Spring对Hibernate封装了一个HibernateTemplate。

这样的话,可以这么做:

final String sql = "from Video where userId='"+user.getId()+"'";
        //List<Video> videoList = hibernateTemplate.find(sql);
        List<Video> videoList=null;
        videoList =hibernateTemplate.executeFind(new HibernateCallback(){
            @Override
            public Object doInHibernate(Session arg0)
                    throws HibernateException, SQLException {
                // TODO Auto-generated method stub
                Query query= arg0.createQuery(sql);
                query.setFirstResult(n);
                query.setMaxResults(4);
                List<Video> list=query.list();
                return list;
            }
           
        });

这样问题就基本上解决了的。哈哈 ^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值