Hibernate 中的HQL查询的总结
一.Spring+Hibernate 中
1.保存一个实体
getHibernateTemplate().save(user);
2.根据id号从数据库中查询到一个实体
User
user=(User)getHibernateTemplate().load(User.class,fromUse rId));
3.删除一个实体
方法一:直接删除getHibernateTemplate().delete((Message);
方法二:嵌套一个根据id号查询到一个实体,再删除
getHibernateTemplate().delete((Message)getHibernateTempla te().load(Message.class, msgId));
4.查询符合添加的记录的个数,函数count(*)
Object obj = getSession().createQuery("select count(*)from Message where recepUser.id="+recepUserId+" and msgType=1")
.uniqueResult();//表示只返回一个结果
5.修改一个实体
getHibernateTemplate().update(message);
6.设定查询记录的起始位置和得到的记录数
List
"from Message where (fromUser.id="+userId+" or recepUser.id="+userId+") and msgType=2 order by id desc
").setMaxResults(想要得到的记录数).setFirstResult(取得记录的起点).list();
7. intValue()返回的结果是整数
int msgCount=((Long)getSession().createQuery("select count(*) from Message where from User.id="+userId+" or recepUser.id="+userId).uniqueResult()).intValue();
二.只有Hibernate 中
1.保存数据
/**
* 保存数据
*
* @param t传入的泛型
* @return
*/
public boolean save(T t) {
session = HibernateUtil.getSession();
try {
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
return false;
} finally {
HibernateUtil.closeSession(session);
}
return true;
}
2.删除数据
/**
* 删除数据
*
* @param t传入的泛型
* @return
*/
public boolean delete(T t) {
session = HibernateUtil.getSession();
try {
session.beginTransaction();
session.delete(t);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
return false;
} finally {
HibernateUtil.closeSession(session);
}
return true;
}
3.修改数据
/**
* 修改数据
*
* @param t传入的泛型
* @return
*/
public boolean update(T t) {
session = HibernateUtil.getSession();
try {
session.beginTransaction();
session.update(t);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
return false;
} finally {
HibernateUtil.closeSession(session);
}
return true;
}
4.查询单条数据,返回查询得到的唯一的结果实体对象
/**
* 查询单条数据
*
* @param hql
* @return返回查询得到的唯一的结果实体对象
*/
public T queryFrom(String hql) {// T表示泛型对象,T泛型定义T t = null;// 引用实体对象
session = HibernateUtil.getSession();
try {
session.beginTransaction();
Query query = session.createQuery(hql);// 执行传递来的hql查询語句
t = (T) query.uniqueResult();// 将查询结果转换为实体
对象
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtil.closeSession(session);
}
return t;// 返回查询得到的实体对象
}
5.通过泛型定义的查询多条语句方法
/**
* 通过泛型定义的查询多条语句方法
*
* @param hql
*
* @return 查询得到的结果集List
*/
public List
session = HibernateUtil.getSession();
List
try {
session.beginTransaction();
Query query = session.createQuery(hql);// 执行传递来的hql查询语句
list = query.list();// 将查询返回的结果集转换成List集
合
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtil.closeSession(session);
}
return list;// 返回查询得到的集合对象
}
6. 返回指定条数的查询结果的方法
/**
* 返回指定条数的查询结果的方法
*
* @param hql
* @param showNumber所要查询的数据的结果的条数
* @return返回查询得到的集合对象
*/
public List
session = HibernateUtil.getSession();
List
try {
session.beginTransaction();
Query query = session.createQuery(hql);// 执行传递来的hql查询语句
// for(int i=0;i 数组遍历出来,遍历赋值给hql语句中的未知待定数据 // query=query.setParameter(i, params[i]); // } query=query.setParameter(0, type); query.setMaxResults(showNumber);// 设这所要查询的数 据的结果的条数 list = query.list();// 将查询返回的结果集转换成List集 合 session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { HibernateUtil.closeSession(session); } return list;// 返回查询得到的集合集合对象 } 7.查询所有用户信息 String hql = "from User"; list = session.createQuery(hql) //创建Query对象 .list(); 8.保存用户 session.save(user); 9.通过用户名和密码查询用户(参数不一定,用动态赋值) //HQL查询语句 String hql = "from User u where https://www.wendangku.net/doc/1d1325905.html,ername=? and u.password=?"; Query query = session.createQuery(hql) //创建Query对象 .setParameter(0, username)//动态赋值 .setParameter(1, password);//动态赋值 10.判断指定用户名的用户是否存在 //HQL查询语句 String hql = "from User u where https://www.wendangku.net/doc/1d1325905.html,ername=?"; Query query = session.createQuery(hql) //创建Query对象 .setParameter(0, username);//动态赋值 Object user = query.uniqueResult();//返回User对象 //如果用户存在exist为true if(user != null){ exist = true; } 11.根据id删除一条留言信息 //加载指定id的留言信息 Message message = (Message)session.get(Message.class, id); session.delete(message); //删除留言 12.查询所有文章中都有哪些作者(Group By) hql = "select author from ArticleInfo group by author";//查询文章详细信息的hql语句 List authorList = objectDao.queryListObject(hql);//执行查询 request.setAttribute("authorList", authorList); 13.分组查询,各部门名称和各部门的人数(Group By) hql="select u.dept,count(*) from User u group by u.dept"; Query query=session.creatQuery(hql); List //object[]是数组,可以同时多个属性查询obj[o],obj[1],obj[2],,,, //for循环输出信息 For(object[] obj;list){ Sysout.("部门"+obj[0]); Sysout.("人数"+obj[1]) } 14.查询文章的回复 // 文章回复内容的详细查询hql = "from ReArticleInfo where re_id=" + id + " order by id desc";//查询文章详细内容的hql语句 ObjectDao List 15.In的条件嵌套查询(双重条件,条件在其他表中)跨表 hql_article_commend = "from ArticleInfo where commend='是' and author in (select account from UserInfo where freeze='解冻')"; hql_article_vistor = "from ArticleInfo where author in (select account from UserInfo where freeze='解冻') order by visit desc"; 16.多对一映射在user表中,通过Author对象查询user String hql="from Category c where c.typeName='"+category.getTypeName()+"'and c.author='"+category.getAuthor().getId()+"'";