1、HQL: Hibernate查询语言
Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念
大小写敏感问题:除了Java类与属性的名称外,查询语句对大小写并不敏感。 所以 SeLeCT与 sELEct以及 SELECT是相同的,但是 org.hibernate.eg.FOO并不等价于 org.hibernate.eg.Foo并且 foo.barSet也不等价于 foo.BARSET。
示例:
public void query(String name){
Session s=null;
try{
s=HibernateUtil.getSession();
String hql="from User as user where user.username=:name"; //使用命名参数,推荐使用,易读。
Query query=s.createQuery(hql);
query.setString("name", name);
//或者如下写法
String hqlstr ="from User as user where user.username=?"
Query que=s.createQuery(hqlstr);
que.setParameter("name", name);
List<Admin> list=query.list();
for(User useradmin:list){
System.out.println(user.getUsername());
}
}finally{
if(s!=null)
s.close();
}
}
2、Criteria 条件查询
示例1:普通条件语句
List cats = session.createCriteria(User.class)
.add( Restrictions.like("username", "liu%") )
.add( Restrictions.or(
Restrictions.eq( "age", new Integer(0) ),//eq是等于,gt是大于,lt是小于,or是或
Restrictions.isNull("age")
) )
.list();
等价sql语句:
select from cat t where t.name like ''liu%" and (t.age ==0 or t.age is null )
示例2:结果集排序语句
List cats = session.createCriteria(User.class)
.add( Property.forName("username").like("liu%") )
.addOrder( Property.forName("username").asc() )
.addOrder( Property.forName("age").desc() )
// .setMaxResults(50) 取出最多50条数据
.list();
3、普通sql语句查询
public List sql() {
Session s = session.getSession();
Query q = s.createSQLQuery("select * from user t where t.username='admin'").addEntity(User.class);
List<User> rs = q.list();
s.close();
return rs;
}