Hibernate 查询方式
1
、
Hibernate
查询
HQL
语句
限制查询结果记录数与起始记录
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("from Customer");
query.setFirstResult(10); //
设置查询记录开始位置,索引从
0
开始。
query.setMaxResults(10);//
设置查询返回的最大记录个数。
List list=query.list();
注意:条件查询
Session session=HibernateSessionFactory.getSession();
Query query=session.createQuery("
from Customer cus where
cus.name='zhou'");
2
、取表中部分列时
(1)
单一属性查询。还是返回一个集合,只不过集合中存储的不是表的实例而是对象。
Session session = null;
session = HibernateSessionFactory.getSession();
List cnames = session.createQuery("
select
cname
from
Customer").list();
for (int i=0;i< cnames.size();i++) {
String name = (String)cnames.get(i);
System.out.println(name);
}
(2)
多个属性的查询
,
使用对象数组。
Session session = null;
session = HibernateSessionFactory.getSession();
//查询多个属性,其集合元素是对象数组
//数组元素的类型,跟实体类的属性的类型相关
List students = session.createQuery("
select
sno, sname
from
Students").list();
for (int i=0;i< students.size();i++) {
Object[] obj = (Object[])students.get(i);
System.out.println(obj[0] + ", " + obj[1]);
}
(3)
多个属性的查询
,
使用
List
集合装部分列
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("
select
new
list(cus.name,cus.phone)
from Customer cus");
List list = query.list();
for (int i = 0; i < list.size(); i++) {
List temp=(List)list.get(i);
System.out.println(temp.get(0)); //0是索引
}
(4)
使用
Map
集合装部分列
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("
select
new
map(cus.name,cus.phone)
from Customer cus");
List list = query.list();
for (int i = 0; i < list.size(); i++) {
Map temp=(Map)list.get(i);
System.out.println(temp.get("1")); //"1"是key
}
3
、内连接
Query query=session.createQuery("
select c.name, s.name
from Student s join s.classes c ").list();
for (Iterator iter = students.iterator();iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + ", " + obj[1]);
}
4、外连接
select c.name, s.name from Classes c left join c.students s
select c.name, s.name from Classes c right join c.students s
5
、带参数的查询
(1) ?
作为参数如"
from Customer cus where cus.name=
?";
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("from Customer cus where
cus.name=?");
query.setParameter(0, "zhou");
List list = query.list();
(2)
参数名称
:name 如"
from Customer cus where
cus.name=
:name";
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("from Customer cus where cus.name=
:name ");
query.setParameter("name", "zhou");
List list = query.list();
(3)
条件查询,使用
?的方式传递参数
Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name
LIKE ?");
query
.setParameter(0, “%周%”); //传递参数参数的索引是从0开始的。 如条件查询,
使用
":
参数
"
名称的方式传递参数
Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name
LIKE
:myname");
query.setParameter("myname", "张三");//传递参数
因为setParameter方法返回Query接口,所以可用省略方式来查询
List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name
LIKE :myname and s.id = :myid")
setParameter("myname", "%周%").setParameter("myid", 15).list();
6
、嵌入原生
sql
测试
SQLQuery sqlQuery = session.
createSQLQuery("
select *
from t_student");
List students = sqlQuery.list();
for (Iterator iter = students.iterator();iter.hasNext();) {
Object[] obj = (Object[])iter.next();
System.out.println(obj[0] + ", " + obj[1]);
}