hql 是hibernate查询语言 hibernate query language 是一种接近sql的查询语言。
完整的HQL语句如下:
Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc
其中的update/delete为Hibernate3中所新添加的功能。
hql查询
1.查询实体:
List<User>="from User";
【注意】:HQL语句中关键字不区分大小写,但是实体类和对象属性要区分大小写
2.查询其中几列数据返回一个数组
List<Object[]>=" select username,age from User"
可以将多个属性封装成map返回,之后根据key,取到对应的值。eg:map.get(key);
List<Map>=" select new map(username as username,age as age)from User"
3.查询其中几列数据返回一个实体类
List<User>=" select new User(username ,age,sex) from User";//提供合适的构造方法
4.查询单个对象,如果对象不存在则返回null,如果返回值不唯一,则抛出异常。
query.uniqueResult()
5.查询一个list
query.list();
6.hql分页查询:
query.setFirstResult(); //指明开始位置的下标
query.setMaxResults();//指明要提取的条数
7.hql修改
"update from User set username='xiaoxiao' where userid=?"
query.executeUpdate();
8.hql删除
"delete from User where userid=?"
query.executeUpdate();
9.where、groupby、having和orderby综合使用
hql="SELECT age, COUNT(age) num FROM User WHERE age>10 GROUP BY age HAVING COUNT(age)>1 ORDER BY num DESC";
在HAVING中,不能使用别名num,但在ORDER BY中可以使用别名num
10.使用?号占位
query.setString(0, value);
Hibernate和JDBC占位符的区别:在Hibernate占位符下标从0开始,在JDBC中的占位符下标从1开始
11.占位符也可以是 属性名=:变量名
query.setParameter("变量名", value);