构建基于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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值