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

最後,歡迎訪問風格清新簡潔的輕博客網站[指尖一刻]

發佈了28 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章