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