Hibernate里的HQL、QBC、SQL查询

-----------------------Query的list()方法 
(1)查询结果为Object对象集合
 List li=this.getSession().createQuery("from TEmp").list();
 main()方法里:
  List li=dao.getAllEmp();
  for(int i=0;i<li.size();i++){
        TEmp emp=(TEmp)li.get(i);
               System.out.println(emp.getEId()+" "+emp.getEName()+" "+emp.getESex());   
  }
(2)查询结果为Object对象组成的数组(投影查询)
 List li=this.getSession().createQuery("select a.EId,a.EName,a.ESex from TEmp as a").list();
 main()方法里
  List li=dao.getAllEmp();
  for(int i=0;i<li.size();i++){
       Object[] emp=(Object[])li.get(i);
              System.out.println(emp[0]+"  "+emp[1]+"  "+emp[2]);
  }

 

/**
  * 注册新用户并将此新添加的对象返回
  * @param user
  * @return
  */
public TUser addUser(TUser user) {
  this.beginTransaction();
  this.getSession().save(user);
  this.commitTransaction();
  return user;
}

--------------------利用HQL绑定参数查询(1.按参数位置绑定,2.按参数名称绑定)
(1)按参数位置绑定(需要用 ?来代替参数)
 public List getAllEmp(String sex){
  Query q=this.getSession().createQuery("from TEmp as a where a.ESex=?");//查询性别为男或女的员工
  //Query q=this.getSession().createQuery("from TEmp as a where a.EName=? and a.ESex=?");//多条件查询
  q.setString(0, sex);//设置参数,位置从0开始
  List li=q.list();
  this.closeSession();
  return li;
 }
 main()方法里:
  List li=dao.getAllEmp("女");
  for(int i=0;i<li.size();i++){
    TEmp emp=(TEmp)li.get(i);
    System.out.println(emp.getEId()+" "+emp.getEName()+" "+emp.getESex());
  }
 
(2)按参数名称绑定(需要用 : 来代替参数)
 public List getAllEmp(String name,String sex){
  Query q=this.getSession().createQuery("from TEmp as a where a.EName=:x and a.ESex=:y");
  q.setParameter("x","张飞");
  q.setParameter("y", "男");
  List li=q.list();
  this.closeSession();
  return li;
 }

-------------------只返回一个检索对象
(1)抓取第一条,不按编号查询
 public TEmp getOneEmp(){
  TEmp emp=(TEmp) this.getSession().createQuery("from TEmp").setMaxResults(1).uniqueResult();//返回的是第一条结果
  this.closeSession();
  return emp;
(2)根据编号来查询返回一个对象
 public TEmp getOneEmp(int e_id){
  Query q=this.getSession().createQuery("from TEmp as a where a.EId=?");
  q.setInteger(0, e_id);
  TEmp emp=(TEmp) q.uniqueResult();
  this.closeSession();
  return emp;
 }

----------------分页面查询
 public List getAllEmp(int currpage,int allcount){
  Query q=this.getSession().createQuery("from TEmp");
  q.setFirstResult(currpage);
  q.setMaxResults(allcount);
  List li=q.list();
  this.closeSession();
  return li;
 }
        //统计有多少个员工
        public int getCount(){
  int count=0;
  Query q=this.getSession().createQuery("select count(*) from TEmp");
  count=Integer.parseInt(q.uniqueResult().toString());
  return count;
 }

----------------分组查询
 public List getByGroup(){
  List li=this.getSession().createQuery("select a.ESex,count(*) from TEmp as a group by a.ESex").list();
  this.closeSession();
  return li;
 }

---------------批量更新
 public void updateAll(String name){
  this.beginTransaction();
  Query q=this.getSession().createQuery("update TEmp as a set a.EName=?");
  q.setString(0, name);
  q.executeUpdate();
  this.commitTransaction();
 }

 

---------------------------------------QBC动态查询-------------------------------------
(1)根据性别来查询
 public List getEmp(String sex){
  Criteria criteria=this.getSession().createCriteria(TEmp.class);
  criteria.add(Restrictions.eq("ESex", sex));
  List ar=criteria.list();
  this.closeSession();
  return ar;
 }
 main方法里:
 List li=dao.getEmp("女");
  for(int i=0;i<li.size();i++){
   TEmp emp=(TEmp)li.get(i);
   System.out.println(emp.getEName()+" "+emp.getESex());
  }
(2)全查询所有性别为男的员工并且关联部门
 public List getEmp(String sex){
  Criteria criteria=this.getSession().createCriteria(TEmp.class);
  criteria.add(Restrictions.eq("ESex", sex));
  criteria.createCriteria("TDept");//此处关联,不加报错
  List ar=criteria.list();
  this.closeSession();
  return ar;
 }
 main方法里:
 List li=dao.getEmp("女");
  for(int i=0;i<li.size();i++){
   TEmp emp=(TEmp)li.get(i);
   System.out.println(emp.getEName()+" "+emp.getESex()+emp.getTDept().getDName());
  }
(3)按员工姓名模糊查询(关联部门)
 public List getEmp(String name){
  Criteria criteria=this.getSession().createCriteria(TEmp.class);
  criteria.add(Restrictions.like("EName",name, MatchMode.ANYWHERE));
  criteria.createCriteria("TDept");
  List ar=criteria.list();
  this.closeSession();
  return ar;
 }
 main方法里:
 List li=dao.getEmp("操");
  for(int i=0;i<li.size();i++){
   TEmp emp=(TEmp)li.get(i);
   System.out.println(emp.getEName()+" "+emp.getESex()+emp.getTDept().getDName());
  }
 

最后,欢迎访问风格清新简洁的轻博客网站[指尖一刻]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值