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();
}
由 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();