Hibernate中的分页查询

一、hibernate分页查询:
方法:

setFirstResult:设置查询开始的记录
	setMaxResults:设置每次查询的条数
/**
	 * 	查找全部文章的重载
	 * 	分页查询
	 * @param currentPage 	当前页面
	 * @param maxResults	每页最大条数
	 * @return
	 */
	public List<Article> findAllArticle(Integer currentPage,Integer maxResults ) {
		
		String hql = "FROM Article" ;
		//如果要根据外键的字段进行分页查询,则应该是
		//String hql = "From Article WHERE user.userId=xxx ;这里的user是Article类中外键的对象引用
			Query query = session.createQuery(hql) ;
			//设置开始查询的对象索引  当前页面-1 乘以每页最大条目数
			query.setFirstResult((currentPage-1)*maxResults) ;
			//设置每页最大条目数
			query.setMaxResults(maxResults) ;
			return  query.list() ;
			 
	}

二、hibernateTemlate的分页查询(多使用这种方法,简便)
1.有条件的分页查询

public List<Draft> findAllDraft(Integer authorId , Integer currentPage, Integer maxResults) {
		
		Draft draft = new Draft() ;
		draft.setAuthorId(authorId);  //这是要设置的条件,满足这个条件的会被分页查找出来
		return hibernateTemplate.findByExample(draft, (currentPage-1)*maxResults, maxResults) ;

注意!findByExample方法会忽略掉对象draft中的null值,就是说如果属性为null,就不会将该属性写入sql语句的条件中。
但是!基本类型的默认值不是null,而是0!所以,如果存在除了主键外的基本类型,那么将会被写进到sql语句的条件中。
因此,在使用的对象的类中(draft对象的类Draft),不要用基本类型,而要用包装类,防止在这个时候导致查询不到结果
	}

2.查找所有的分页查询(detachedCriteria)

public List<Dustbin> findAllDustbin(Integer currentPage, Integer MAXRESULTS) {
		DetachedCriteria criteria = DetachedCriteria.forClass(Dustbin.class) ;
		return (List<Dustbin>) hibernateTemplate.findByCriteria(criteria, (currentPage-1)*MAXRESULTS, MAXRESULTS) ;
	}

方法是findByCriteria方法
利用了detachedCriteria对象,该对象不用从session里获取,但可以用任意一个session方法使用

猜你喜欢

转载自blog.csdn.net/weixin_40616523/article/details/85226379