一.回顾基本的SQL查询
select/update/delect ... from ... where ...group by... having ...order by... asc/desc
insert into ... value ...
update ... set ...
1.单表查询 select * from xx;
2.多表查询 A a1,a2 B b1,b2
1)内关联
a)相等
from A a inner join B b on a.a1 <> b.b1 //a1,b1为字段名,a、b为表的别名
b)不相等
from A a inner join B b on a.a1 = b.b1
2)外关联
a)左外
from A a outer left join B b on a.a1 = b.b1;
b)右外
from A a outer right join B b on a.a1 = b.b1;
c)全关联
from A a full join B b on a.a1=b.b1;
3)笛卡尔乘积
from A a cross join B b;
3.嵌套查询
二.HQL和SQL的对比
不同: HQL SQL
1) HQL中少了select关键字
2)from后跟: 实体类名 表名
3)查询条件: 字段名 查询条件:实体类的属性名
4)大小写: 区分(类名,属性名) 不区分(表名,字段名)
相同: 查询的关键字都不区分大小写
其他:
hql语句和sql语句的语法以及子句的意义都是一样的
sql面向表和字段进行查询 关键字、表、字段不区分大小写 结果是记录集合
hql面向对象和属性进行查询 关键字不区分大小写,对象和属性区分大小写 对象的集合
有问号占位符(序号是从0开始)(setXXX(序号,值))
可以用 :别名 的方式
setXXX("别名",值)
Hibernate支持分页
Query.setFirstResult(当前页的第一条记录位置)
Query.setMaxResult(每页的记录数)
sql面向表和字段进行查询 关键字、表、字段不区分大小写 结果是记录集合
hql面向对象和属性进行查询 关键字不区分大小写,对象和属性区分大小写 对象的集合
有问号占位符(序号是从0开始)(setXXX(序号,值))
可以用 :别名 的方式
setXXX("别名",值)
Hibernate支持分页
Query.setFirstResult(当前页的第一条记录位置)
Query.setMaxResult(每页的记录数)
Query.list执行hql语句,返回List结果集(实体对象,Object[])
投影查询出的结果,是什么数据结构?(二维的Object数组)
三.hql语句小结
注意: 从Hibernate框架中获取session对象的方式有哪些?
只有:SessionFacotry.openSession() 因为HibernateSessionFactory.getSession 是MyEclipse做的
1.实体查询:
- //查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并放入list集合中
- Session session = HibernateSessionFactory.getSession();
- String sql = "from User";
- List list = session.createQuery(hql).list();
- Session session = HibernateSessionFactory.getSession();
- Transaction trans = session.beginTransaction();