Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句。
分页查询:
query.setFirstResult(位置如0);//表示从哪个位置开始查询,返回query对象
query.setMaxResult(记录条数);//表示当页共几条记录,返回一个集合
session.createQuery("select count(*) from 类名").uniqueResult();//得到记录总数
query.setFirstResult(位置如0);//表示从哪个位置开始查询,返回query对象
query.setMaxResult(记录条数);//表示当页共几条记录,返回一个集合
session.createQuery("select count(*) from 类名").uniqueResult();//得到记录总数
通过SessionFactory获得了session对象后,除了可以通过get(类名.class, id)方法得到相应的对象,还可以通过获得Query对象来取得需要的对象
HQL查询:
Query query = session.createQuery("查询语句如from UserBean");
List list = query.list();//得到一个集合
query.uniqueResult();//得到一个单个的对象
查询语句同sql查询语句很想象,只是将表名换作类名,字段名换作属性名,如果查询需要条件可以使用占位符来替换对应的属性名,也可以使用:变量名来作为占位符。
例子:
public static void query(String name) {
Session session = null;
try {
session = HibernateUtil.getSession();
//定义hql语句,目的是:通过name查询所有
String queryString = "from User as user where user.name=:n";
Query query = session.createQuery(queryString); //占位符赋值
query.setParameter("n", name);
//查询出所有的name相同的
List<User> list = query.list();// 得到所有的结果集
for (User u : list) {
System.out.println(u.toString());
}
} finally {
if (session != null) {
session.close();
}
}
}
SqlQuery查询:
List<News> list = session.createSQLQuery("select * from News").addEntity(News.class).list();
addEntity 不能忘记,这种查询方式是把查询好的结果放到一个实体中,再遍历操作,不推荐使用。
SqlQuery查询一些字段时候用addScalar:
SQLQuery query = session.createSQLQuery("select id,title from News");
query.addScalar("id", Hibernate.INTEGER); //注册字段类型,同下
query.addScalar("title",new org.hibernate.type.StringType());
List list = query.list();
for(int i=0;i<list.size();i++)
{
Object[] o = (Object[])list.get(i);
int id = (Integer)o[0];
String title = (String)o[1];
System.out.println("id:"+id+" , title:"+title);
}