构建基于maven的综合项目(7)-hibernate查询

构建基于maven的综合项目(七)--hibernate查询
一、hibernate 查询相关
    1、Query查询,要求hql熟练
    2、Criteria查询,面向对象的方式查询,hibernate生成sql语句较多,返回结果不满意,还未找到适合的解决方法
public Page getQueryAccountsForPage(Page page) {
		/*
		 * 中文条件查询,最好使用?占位符并使用query.setParameter方式
		 * jdbc url必须设置编码jdbc:mysql://localhost:3306/notepad?useUnicode=true&characterEncoding=utf8
		 * */
		final String hql = "from Account where email like ? or user.userName like ? order by user.registTime desc";
		final String[] parameter = {new String("%" + page.getKeyWord() + "%"),new String("%" + page.getKeyWord() + "%")};
		final int offset = (page.getCurrentPage() - 1) * page.getPageSize();
		final int length = page.getPageSize();
		int count = getHibernateTemplate().find(hql,parameter).size();
		List<Account> list = getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session session) 
				throws HibernateException,SQLException {
				Query query = session.createQuery(hql);
				query.setParameter(0, parameter[0]);
				query.setParameter(1, parameter[1]);
				query.setFirstResult(offset);
				query.setMaxResults(length);
				return query.list();
			}			
		});
		/*
		 * 使用criteria分页查询
		 * 如果一个用户有多个角色,那么查询该用户时,会返回多个该用户对象
		 * 未找到合适办法
		 * */
//		List<Account> list = getHibernateTemplate().executeFind(new HibernateCallback() {
//			public Object doInHibernate(Session session) 
//				throws HibernateException, SQLException {
//				Criteria criteria = session.createCriteria(Account.class);
//				//设置关联属性
//				criteria.createCriteria("user", "user");
//				//设置模糊查询
//				if(keyWord.length() > 0){
//					criteria.add(
//						Restrictions.or(
//							Restrictions.like("email", "%" + keyWord + "%"),
//							Restrictions.like("user.userName", "%" + keyWord + "%")
//						)
//					);
//				}
//				//设置分页起始
//				criteria.setFirstResult(offset);
//				criteria.setMaxResults(length);
//				//设置排序
//				criteria.addOrder(Order.desc("user.registTime"));
//				return removeRepeatForAccount(criteria.list());
//			}
//		});
		page.setCount(count);
		page.setList(list);
		return page;
	}