文档库 最新最全的文档下载
当前位置:文档库 › Hibernate 中的HQL查询的总结(夏杰)

Hibernate 中的HQL查询的总结(夏杰)

Hibernate 中的HQL查询的总结(夏杰)
Hibernate 中的HQL查询的总结(夏杰)

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 list = getSession().createQuery(

"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 queryList(String hql) {

session = HibernateUtil.getSession();

List list = null;

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 queryTypeListNumber(String hql, int showNumber,Type type) {

session = HibernateUtil.getSession();

List list = null;

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 list=query.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 re_objectDao = new ObjectDao();//实例化持久化类

List list = null;//定义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()+"'";

相关文档