hibernate中的hql语句

1.   Query query = session.createQuery("from 类名 order by 类中属性名 默认升序asc!")注意不是表名和表中属性名,也不能直接select *
    List<Customer> list = query.list();
    for(Customer customer:list){
         syso(customer)    注意toString方法里不要加上集合,很容易形成死循环
    }

2.Query query =session.createQuery("from 类名 where name=?)按位置绑定
    query .setParameter(0,"张三");注意?从0开始

Query query =session.createQuery("from 类名 where name= :aaa);冒号与aaa之间没有空格,按名称绑定
query .setParameter(“aaa”,"张三");


3.投影查询
List<Object>=session.createQuery("select c.cust_name from 类名 c).list();
List<Object[]>=session.createQuery("select c.cust_name,c.cust_id from 类名 c).list();
    for(Object[] object : list){
        syso(Arrays.toString[object]);
    }

查询多个属性并封装到对象中
List<Customer> list = session.createQuery("select  new 类名(目标属性名1,目标属性名2) from 类名 c).list();其余全为NULL

分页查询
Query query = session.createQuery("from 类名);
query.setFirstResult(0);//起始位置,可设置为动态的
query.setMaxResults(10);//一次显示多少个
List<类名> list = query.list();
for(类名 a : list){
    syso(a);类中加上toString()
}

4.分组统计查询 聚合函数同sql count() max() min() avg() sum()等
Object object = session.createQuery(" select count(*)   from 类名).uniqueResult();//确定唯一值时用uniqueResult()
返回的是一个Long类型


// 分组统计:
        List<Object[]> list = session.createQuery("select cust_source,count(*) from Customer group by cust_source").list();
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }

5.多表查询
    SQL多表查询
    连接查询:
        交叉连接(笛卡尔积数据量大基本不用)select * from A,B
        内连接 inner join(inner可省略为隐式内连接)查两个表的公共部分
            隐式内连接 select * from A,B where A.id=B.id(省略了inner)
            显示内连接 select * from A inner join B ON A.id=B.id
        外连接outer join  
            左外连接 left outer join(outer可以省略)
                查左边表的全部信息,以及两个表的公共部分,不足用null填充
                select * from A left outer join B ON A.id=B.id
            右外连接 right outer join(outer可以省略)
                查右边表的全部信息,以及两个表的公共部分
    HQL多表查询
    连接查询:
        交叉连接(笛卡尔积数据量大基本不用)

        // SQL:SELECT * FROM cst_customer c INNER JOIN cst_linkman l ON c.cust_id = l.lkm_cust_id;
        // HQL:内连接 from Customer c inner join c.linkMans

        内连接      from Customer c inner join c.linkMans(Customer中存放的set集合)
            List<Object[]> list = session.createQuery("from Customer c inner join c.linkMans").list(); 
            for (Object[]objects : list) { 
                System.out.println(Arrays.toString(objects));
             }
            显示内连接  (封装成了Object[])
            隐式内连接 
            迫切内连接  (装到一个对象中)
                // HQL:迫切内连接 其实就在普通的内连接inner join后添加一个关键字fetch. from Customer c inner join fetch c.linkMans
                List<Customer> list = session.createQuery("select distinct c from Customer c inner join fetch c.linkMans").list();// 通知hibernate,将另一个对象的数据封装到该对                象中

        外连接outer join  
            左外连接   (封装成了Object[])
            右外连接
            迫切左外连接  (没有迫切右外连接,set集合(装到一个对象中))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值