Hibernate 检索方式
Hql查询方式:
以下代码通过查询条件显示数据:
List list = session.createQuery(
"from Person p where p.personName = :personName")
.setString("personName", "scott").list();
Hql 的 like 查询
List list = session.createQuery(
"from Person p where p.personName like :personName ")
.setString("personName", "%a%").list();
查询指定范围值:
List list = session.createQuery("from Person p where p.id > :pid and p.id < :nid")
.setInteger("pid", new Integer(60))
.setInteger("nid",new Integer(70))
.list();
for(int i=0;i<list.size();i++){
Person person = (Person)list.get(i);
System.out.println("--- id ="+person.getPersonid());
System.out.println("--- name="+person.getPersonName());
}
在映射文件中定义命名查询语句
Person.hbm.xml 定义如下:
<query name="findPersonByname">
<![CDATA[ from Person p where p.personName like :name]]>
</query>
程序代码如下:
List list = session.getNamedQuery("findPersonByname")
.setString("name","%a%").list();
Hql 翻页查询:
setFirstResult(int firsResult):设定从哪个对象开始检索,参数表示这个对象在查询结果中的索引位置,索引起始值为 0.
setmaxResult(int maxResult):设定一次最多检索出的对象数目.
以下示例演示了翻页操作 :
List list = session.createQuery("from Person p").setFirstResult(5)
.setMaxResults(5).list();
HQL 投影查询:
投影查询是指查询结果仅包括部分实体或者实体的部分属性. 投影是通过 select 关键字来实现的.
Hql 投影查询中使用 聚合函数:
Query query = session
.createQuery(
"select max(id) as max,min(id) as min ,sum(id) as sum ,personName from Person group by personName order by personName desc");
List list = query.list();
for (int i = 0; i < list.size(); i++) {
Object[] object = (Object[]) list.get(i);
Integer maxid = (Integer) object[0];
Integer minid = (Integer) object[1];
Integer sumid = (Integer) object[2];
String personName = (String)object[3];
}
也可以返回类实例:
Query query = session.createQuery("select new com.test.pojo.MyPerson(p.personid,p.personName,p.email) from Person p where p.personName like :personName")
.setString("personName", "%a%");
List list = query.list();
Iterator ite = list.iterator();
while(ite.hasNext()){
MyPerson myperson = (MyPerson)ite.next();
}
QBC (Query By Criteria) 查询:
由 Criteria 接口,Criterion 接口和Expression 类组成。它支持在运行时动态产生查询语句。
以下代码返回多条记录:
List list = session.createCriteria(Person.class)
.addOrder(
Order.desc("personName")).list();
QBC 显示分页:
List list = session.createCriteria(Person.class)
.addOrder(Order.desc("personName"))
.setFirstResult(5)
.setMaxResults(5).list();
QBC 检索单个对象:
Person person = (Person) session.createCriteria(Person.class)
.setMaxResults(1).uniqueResult();
设定查询条件:
List list = session.createCriteria(Person.class)
.add(Restrictions.eq("personName", "jack")).list();
以下语句查询不等于 “jack” 的记录
List list = session.createCriteria(Person.class)
.add(Restrictions
.not(Restrictions.eq("personName", "jack")))
.list();
以下语句查询指定范围值的记录:
(gt() 大于, ge()大于等于 , lt() 小于, le()小于等于)
(查询personid 大于67 且小于72的记录)
List list = session.createCriteria(Person.class)
.add(Restrictions.gt("personid",new Integer(67)))
.add(Restrictions.le("personid", new Integer(72)))
.list();
以下语句查询 Person 表中为空的那些记录:
List list = session.createCriteria(Person.class)
.add(Restrictions.isNotNull("tel")).list();
以下代码返回 in( ) 列表中相匹配的那些记录
String[] personName = { "scott", "mike" };
List list = session.createCriteria(Person.class)
.add(Restrictions.in("personName", personName))
.list();
以下代码返回不等于 in( ) 列表中的那些记录
String[] personName = { "scott", "mike" };
List list = session.createCriteria(Person.class)
.add(Restrictions.not(
Restrictions.in("personName", personName)))
.list();
以下代码演示了 between 用法
List list = session.createCriteria(Person.class)
.add(Restrictions.between("personid",
new Integer(47), new Integer(65)))
.list();
以下代码演示了字符串模糊查询:
List list = session.createCriteria(Person.class)
.add(Restrictions.
like("personName", "a", MatchMode.ANYWHERE)).list();
以下代码演示了逻辑与 的用法 .(返回 person 表中
pesonName 为 “jack” 并且 personid 大于 71 的记录)
List list = session.createCriteria(Person.class)
.add(
Restrictions.and(
Restrictions.eq("personName","jack"),
Restrictions.ge("personid",new Integer(71))))
.list();
以下代码演示了QBC 迫切左外连接.
FetchMode.DEFAULT ,表示采用映射文件中配置得检索策略.
FetchMode.JOIN
覆盖映射文件中配置的检索策略,在程序中显示指定
迫切左外连接检索策略.
FetchMode.LAZY :覆盖映射文件中配置的检索策略,中程序中
显示指定 延迟检索策略
List list = session.createCriteria(Person.class)
.setFetchMode("adds",FetchMode.JOIN)
.add(Restrictions.eq("personName", "jack"))
.list();
以下代码演示了 QBC 内联接
List list = session.createCriteria(Adds.class)
.createAlias("person", "p")
.add(Restrictions.like("p.personName", "a", MatchMode.ANYWHERE))
.add(Restrictions.like("this.addName", "an", MatchMode.ANYWHERE))
.list();
投影查询是指查询结果仅包括部分实体或者实体的部分属性. 投影是通过 select 关键字来实现的.
以下代码通过投影查询返回记录数量:
List list = session.createCriteria(Person.class)
.setProjection(Projections.rowCount())
.add(
Restrictions.like("personName", "a", MatchMode.ANYWHERE))
.list();
for(int i=0;i<list.size();i++){
Integer count = (Integer)list.get(i);
System.out.println("--- count ="+count);
}
以下代码通过 QBC 投影查询返回指定的列:
Criteria criteria = session.createCriteria(Person.class);
criteria.setProjection(Projections.projectionList().add(
Projections.property("personName")).add(
Projections.property("email")));
List list = criteria.list();
Iterator ite = list.iterator();
while (ite.hasNext()) {
Object[] object = (Object[])ite.next();
String personName = (String)object[0];
String email = (String)object[1];
}
在投影查询中使用 聚合函数:
Criteria criteria = session.createCriteria(Person.class);
criteria.setProjection(
Projections.projectionList()
.add(Projections.max("personid"))
.add(Projections.min("personid"))
.add(Projections.sum("personid"))
.add(Projections.property("personName"))
.add(Projections.avg("personid"))
.add(Projections.count("personid"))
.add(Projections.groupProperty("personName")))
.addOrder(Order.asc("personName"));
List list = criteria.list();
for(int i = 0;i<list.size();i++){
Object[] object = (Object[])list.get(i);
Integer maxValue = (Integer)object[0];
Integer minValue = (Integer)object[1];
Integer sumValue= (Integer)object[2];
String personname = (String)object[3];
Double avgValue = (Double)object[4];
Integer countValue = (Integer)object[5];
}
以下代码演示了两个表关联后作投影查询:
List list = session.createCriteria(Person.class)
.createAlias("adds","a")
.add(Restrictions.like
("personName", "a", MatchMode.ANYWHERE))
.add(Restrictions.like
("a.addName", "an", MatchMode.ANYWHERE))
.setProjection(Projections.projectionList()
.add(Projections.property("personid"))
.add(Projections.property("personName"))
.add(Projections.property("a.addsid"))
.add(Projections.property("a.addName")))
.list();