一 导航查询(客户和联系人是一对多的关系,以客户和联系人为例)
根据ID查询要客户,如果要知道该客户所有联系人,就可以使用导航查询,代码如下:
try
{
session = HibernateUtils.getSession();
ts = session.beginTransaction();
代码部分
//导航查询,根据客户查询出所有的联系人
Custum custum = session.get(Custum.class,2);
Set<LinkMan> linkmans = custum.getLinkmans();
for(LinkMan lm :linkmans)
System.out.println(lm.getLkm_name()+"::"+lm.getLkm_gender());
ts.commit();
}
二 OID 查询 ID 查询数据
Custum custum = session.get(Custum.class,2);
System.out.println(custum);
三 条件查询
HQL查询语句操作的是实体类和实体类属性字段,一般格式如下:from 实体类名称 where 实体类属性名1=? and(or)...
(1)添加参数,使用Query对象的setParameter方法,代码如下:
ts = session.beginTransaction();
Query query = session.createQuery("from LinkMan where lkm_id=?");
query.setParameter(0,6);
List<LinkMan> list = query.list();
(2)模糊查询 一般格式如下:from 实体类名称 where 实体类属性 like ?,在添加参数的时候,要加上模糊条件,代码如下:
Query query = session.createQuery("from LinkMan where lkm_name like ?");
query.setParameter(0,"%东%");
List<LinkMan> list = query.list();
(3)排序查询 一般格式如下:from 实体类名称 order by 实体属性名 asc/desc
Query query = session.createQuery("from LinkMan order by lkm_id desc");
List<LinkMan> list = query.list();
(4)分页查询;一般的SQL语句如下:select * from t_LinkMan limit 0,3 ,Hql不用谢HQL语句,调用函数即可实现,代码如下:
Query query = session.createQuery("from LinkMan");
//取值的开始
query.setFirstResult(0);
//每次取出的条数
query.setMaxResults(3);
List<LinkMan> list = query.list();
(5) 投影查询:不是查询实体所有的属性,而是查询某一部分,一般形式如下:select 实体类属性1,属性2 ... from 实体类名称,注:select 后面不可以加*。
Query query = session.createQuery("select lkm_id,lkm_name,lkm_gender from LinkMan");
List<Object[]> list = query.list();
for(Object[] lm :list)
System.out.println(Arrays.toString(lm));
(6)聚集函数的使用(count,sum,avg,max,min),select count(*) from 实体名称
Query query = session.createQuery("select count(*) from LinkMan");
Object obj = query.uniqueResult();
Long lobj = (Long)obj;(Object 不要直接转int)
int sum = lobj.intValue();