一、hibernate 查询相关
1、Query查询,要求hql熟练
2、Criteria查询,面向对象的方式查询,hibernate生成sql语句较多,返回结果不满意,还未找到适合的解决方法
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;
}