最近在做毕业设计,想着每天记录下做了什么吧,这样也方便看看进度。接下来先总结下前几天做的东西,有些是以前就记录好的,这里copy下。
这个是15号做的笔记,我不大习惯做笔记,但是发现这个习惯真的得好好养成,现在就逼自己一下吧。基本上所有的东西都是网上找的。
MySQL中一般的分页作法大多利用Limit限制回传的资料笔
例如下面的代码
Select * From news limit 0, 100第一页
Select * From news limit 100,100第二页
Select * From news limit 200,100第三页
// 为了检索从某一个偏移量到记录集的结束所有的记录行,
mysql > SELECT * FROM table
// 如果只给定一个参数,它表示返回最大的记录行数目:
mysql > SELECT * FROM table
// 换句话说,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,
网上又有资料说
- String hql = "from User order by createTime";
- Query q = this.getSession().
createQuery(hql); - q.setFirstResult(0);
- q.setMaxResults(10);
- q.list()
这样也就解决了HQL语言的分页。
但是问题又来了的,项目中不单单是Hibernate,
这样的话,可以这么做:
final String sql = "from Video where userId='"+user.getId()+"'";
//List<Video> videoList = hibernateTemplate.find(sql);
List<Video> videoList=null;
videoList =hibernateTemplate.
@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;
}
});