HQL是一种面向对象的查询语言,和SQL不一样
1 HQL中的对象名区分大小写,(除JAVA类和属性名字)
2 HQL查的是对象而不是表,并且支持多态,HQL主要依赖Query来操作
如根据名字查询一个类:
HQL:
"from User as user where user.name=?";
这是一个最简单的查询
查询的是对象不是表 而是User类 User只能是类名
query 查询:
1 创建hql
String queryString = "form Noticeinfo as notice where notice.noticetitle=?";
2创建query
Query query =s.createQuery(queryString);
Query query =s.createQuery(queryString);
3设置参数
query.setString(0, title); 位置是从0开始的,跟JDBC不一样 JDBC参数下标是从1开始的
或者:
命名参数形式:
hql:
form Noticeinfo as notice where notice.noticetitle=:title
query.setString (name, val);
4查询
query.uniqueResult() or query.list();
当你知道返回的结果只是一个对象的时候 用uniqueResult
当返回多个对象
List<Noticeinfo> list = query.list();
查询是调用query的list方法 返回对象集合,作用相当于JDBC中excutequery类似
然后便利集合就可以得到数据了
public void query(String title){
String queryString = "from Noticeinfo as notice where notice.noticetitle=?";
Query query =s.createQuery(queryString);
query.setString(0, title);
List<Noticeinfo> list = query.list();
for (Noticeinfo n :list) {
System.out.println(n.getNotice());
}
}
String queryString = "from Noticeinfo as notice where notice.noticetitle=?";
Query query =s.createQuery(queryString);
query.setString(0, title);
List<Noticeinfo> list = query.list();
for (Noticeinfo n :list) {
System.out.println(n.getNotice());
}
}
NoticeinfoDao dao = new NoticeinfoDao();
dao.query("学习");
dao.query("学习");

HQL支持多态
如果 hql为 from Object 则hibernate会将数据库所有的表都查一遍,因为所有的类都是Object
query其他方法:
1 query实现分页:
query.setFirstResult(0);
query.setMaxResults(10);
query.setMaxResults(10);
Criteria查询方式:
//1创建criteria 关联类
Criteria cri = s.createCriteria(Noticeinfo.class);
Criteria cri = s.createCriteria(Noticeinfo.class);
//2创建约束条件 noticetitle = title
cri.add(Restrictions.eq("noticetitle", title));
add 是与的关系 or或的关系,可以调用or();方法
Restriction这个类可以提供很多静态的约束方法
eq等于 gt大于 lt 小于 like ge ...etc
//查询 和query一样
List list = cri.list();
Criteria的分页和query也是一样的。
hibernate的基本的基本操作就是这些了