Hibernate 检索方式1
Hibernate检索方式(一)
?
Hql查询方式:
以下代码通过查询条件显示数据:
Listlist = session.createQuery(
"fromPerson p where p.personName = :personName")
.setString("personName","scott").list();
?
Hql 的 like查询
Listlist = session.createQuery(
"fromPerson p where p.personName like :personName ")
.setString("personName","%a%").list();
?
查询指定范围值:
Listlist = session.createQuery("fromPerson p where p.id > :pid and p.id < :nid")
.setInteger("pid",newInteger(60))
.setInteger("nid",newInteger(70))
.list();
?
for(inti=0;i<list.size();i++){
Personperson = (Person)list.get(i);
System.out.println("---id ="+person.getPersonid());
System.out.println("---name="+person.getPersonName());
}
在映射文件中定义命名查询语句
Person.hbm.xml定义如下:
<queryname="findPersonByname">
<![CDATA[from Person p where p.personName like :name]]>
</query>
?
程序代码如下:
Listlist = session.getNamedQuery("findPersonByname")
.setString("name","%a%").list();
Hql 翻页查询:
setFirstResult(intfirsResult):设定从哪个对象开始检索,参数表示这个对象在查询结果中的索引位置,索引起始值为0.
setmaxResult(intmaxResult):设定一次最多检索出的对象数目.
以下示例演示了翻页操作:
Listlist = session.createQuery("fromPerson p").setFirstResult(5)
.setMaxResults(5).list();
?
HQL投影查询:
投影查询是指查询结果仅包括部分实体或者实体的部分属性.投影是通过 select关键字来实现的.
?
Hql投影查询中使用聚合函数:
?
Queryquery = session
.createQuery(
"select max(id) as max,min(id) as min ,sum(id) as sum ,personName fromPerson group by personName order by personName desc");
Listlist = query.list();
for(inti = 0; i < list.size(); i++) {
Object[]object = (Object[]) list.get(i);
Integermaxid = (Integer) object[0];
Integerminid = (Integer) object[1];
Integersumid = (Integer) object[2];
StringpersonName = (String)object[3];
}
?
?
也可以返回类实例:
Queryquery = session.createQuery("selectnew com.test.pojo.MyPerson(p.personid,p.personName,p.email) fromPerson p where p.personName like :personName")
.setString("personName","%a%");
Listlist = query.list();
Iteratorite = list.iterator();
while(ite.hasNext()){
MyPersonmyperson = (MyPerson)ite.next();
}
?
?
?
?
由Criteria接口,Criterion接口和Expression类组成。它支持在运行时动态产生查询语句。
?
以下代码返回多条记录:
Listlist = session.createCriteria(Person.class)
.addOrder(
Order.desc("personName")).list();
?
QBC显示分页:
Listlist = session.createCriteria(Person.class)
.addOrder(Order.desc("personName"))
.setFirstResult(5)
.setMaxResults(5).list();
?
QBC检索单个对象:
Personperson = (Person)session.createCriteria(Person.class)
.setMaxResults(1).uniqueResult();
?
设定查询条件:
Listlist = session.createCriteria(Person.class)
.add(Restrictions.eq("personName","jack")).list();
?
以下语句查询不等于“jack”的记录
Listlist = session.createCriteria(Person.class)
.add(Restrictions
.not(Restrictions.eq("personName","jack")))
.list();
?
以下语句查询指定范围值的记录:
(gt()大于,ge()大于等于, lt() 小于, le()小于等于)
(查询personid大于67且小于72的记录)
?
Listlist = session.createCriteria(Person.class)
.add(Restrictions.gt("personid",newInteger(67)))
.add(Restrictions.le("personid",newInteger(72)))
.list();
?
?
以下语句查询Person表中为空的那些记录:
Listlist = session.createCriteria(Person.class)
.add(Restrictions.isNotNull("tel")).list();
?
以下代码返回in( )列表中相匹配的那些记录
String[]personName = { "scott","mike"};
Listlist = session.createCriteria(Person.class)
.add(Restrictions.in("personName",personName))
.list();
?
?
以下代码返回不等于in( ) 列表中的那些记录
String[]personName = { "scott","mike"};
Listlist = session.createCriteria(Person.class)
.add(Restrictions.not(
Restrictions.in("personName",personName)))
.list();
?
以下代码演示了 between 用法
Listlist= session.createCriteria(Person.class)
.add(Restrictions.between("personid",
newInteger(47), newInteger(65)))
.list();
?
以下代码演示了字符串模糊查询:
Listlist = session.createCriteria(Person.class)
.add(Restrictions.
like("personName","a",MatchMode.ANYWHERE)).list();
?
?
以下代码演示了逻辑与的用法 .(返回person 表中
pesonName 为“jack” 并且personid 大于71 的记录)
Listlist = session.createCriteria(Person.class)
.add(
Restrictions.and(
Restrictions.eq("personName","jack"),
Restrictions.ge("personid",newInteger(71))))
.list();
?