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集合(装到一个对象中))