HQL实用技术

1.HQL语句是面向对象的查询语言。
   例如:from Emp s where s.empno='7788' order by s.empno  ;注意点:语句中所有的变量都是和实体类对应,Emp是类名,empno是类中的属性名。


2.执行HQL,并返回结果。关键代码如下:
    String hql = "from Emp order by ename"; // 定义hql语句
    Query query = session.createQuery(hql); // 通过Query接口查询hql
    List<Emp> list = query.list(); // 获取查询结果,返回值为包含Emp类的List类型。list的大小就是查询出来的行数,取出来的每个Emp是某一列数据。
3.获取查询结果有两个方式:一个是List<Emp> list = query.list();  另一个为Iterator<Emp> iter = query.iterate();


4.参数的绑定,按参数位置绑定。两个点:一个是使用“?”作为占位符,另一个是通过int类型的下标为参数赋值。关键代码如下:
    String hql = " from Emp  where empno = ?  and ename = ?   ";  // 使用“?”作为占位符
    Query query  = session.createQuery(hql);
    query.setInteger(0, 7788); // 通过下标为参数赋值
    query.setString(1, "SCOTT");


5.参数的绑定,按照参数名称绑定。两个点:一个是使用":参数名"的方式作为占位符,另一个是通过参数名为参数赋值,关键代码如下:
    String hql = " from Emp  where empno = :myemp  and ename = :myename   ";  // 使用“:参数名”作为占位符
    Query query  = session.createQuery(hql);
    query.setInteger("myemp", 7788); // 通过参数名为参数赋值
    query.setString("myename", "SCOTT");


6.绑定参数类型。绑定任意参数类型代码:query.setParameter(arg0, arg1);
   query.setString(arg0, arg1);
   query.setDoulbe(arg0, arg1);
   query.setDate(arg0, arg1);
   query.setInteger(arg0, arg1);


7.setProperties() 绑定命名参数和一个对象中的属性值。
  Emp qemp  = new Emp();
qemp.setEmpno(7788);
qemp.setEname("SCOTT");
// 要点:一必须使用参数名称的方式作为占位符。二自定义的参数名称需要和Emp中的属性名保持一致。
String hql = " select  new Emp(empno,job) " +
"from Emp  where empno = :empno and ename= :ename   ";
Query query  = session.createQuery(hql);
query.setProperties(qemp);
8.分页。分页的三个要素:1.记录总数。2.每页的记录数。3.需要查询的页数。
        hibernate提供了两个方法来进行分页:
        query.setMaxResults(pageSize); // 设置每页行数,相当于设置行数的最大值
query.setFirstResult((pageIndex-1) * pageSize); // 设置从第几条数据开始查询,不包括本条数据








9.投影。投影即为有针对性的从数据库中查询某几列数据。作用和优点:提高查询效率,只返回我们需要的列。


                String hql = " select  empno,ename from Emp   "; // 表示只查询empno 和ename两列。
// 通过投影的方式查询,可以吧<>中间的对象,想象为一行列数据,只要拿到<>中间的数据类型就可以输出各个列数据
// list的大小对应的是查询出来的行数
List<Object[]> list = query.list(); // 如果只查询一列则是Object,多列则为Object[]
System.out.println("这里是查询出来的行数:"+list.size());
for(Object[] obj: list){
System.out.println("这是是每行的列数:"+obj.length); // object[]的长度就是hql语句中查询的列的个数
System.out.println(obj[0]);
System.out.println(obj[1]);
}


10.投影。将查询结果通过构造函数封装为实体类。要点:1.实体类要有相应的构造函数,和无参的构造函数。2.hql语句中通过 new 来封装实体类
              String hql = " select  new Emp(empno,ename) from Emp   "; 
              List<Emp> list = query.list();

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值