1. 程式人生 > >關於hibernate的查詢語句

關於hibernate的查詢語句

hibernate的查詢方式有HQL, CretiriaSQLQuery

 

 

在DAO層獲取到hibernate模板,即hql執行crude操作:

查詢

1.根據主鍵查詢列表one

         this.getHibernateTemplate().get(User.class, id);

2.查詢列表list        注意 一定是 from開頭的

    String hql=" FROM User info WHERE id='"+id+"';

    this.getHibernateTemplate().find(sql);

 

新增

1.新增操作 引數是實體類

    (String)this.getHibernateTemplate().save(infopo);

    Serializable pk = this.getHibernateTemplate().save(contractInfo);

    return (String) pk;

     該處返回的時生成的一個主鍵

修改

1.修改操作 引數是實體類  實際是根據id修改

    this.getHibernateTemplate().update(infopo);

   刪除

1.刪除操作  引數是實體類  實際是根據id修改

    this.getHibernateTemplate().delete(pH);

 

============================SQLQuery=============================

 

SQLQuery介面用於接收一個sql語句進行查詢,

 SQLQuery是hibernate用於支援原生sql的介面類,然後呼叫list()或者uniqueResult()方法進行查詢,

 但是SQL語句不會直接封裝到實體物件中,需要我們手動寫程式碼才可以封裝到實體中

 

查詢

1.查詢列表list 

  SQLQuery sqlQuery = session.createSQLQuery(" select * from Customer");
  sqlQuery.addEntity(Customer.class);

  注意這裡查詢的必須時全部的欄位,否則會報錯列名無效;

2..查詢列表list

SQLQuery createSQLQuery=this.getSession().createSQLQuery("select a,b from t")

.addScalar("a").addScalar("b");

return createSQLQuery.list();

注意這裡可以查詢部分欄位 ,也可以查詢其他表的欄位,但是返回值的型別時Object[]…後續不知道怎麼處理了。。。

3.SQLQuery 的連表查詢

action:

List<?> list =  statisticalQueryService.findPrescription(Bean bean,startIndex,this.getNumPerPage());

       for (int i = 0; i < list.size(); i++) {

           Object []object = (Object[]) list.get(i);   // 將獲取到的值,用object[]接受

           bean= new StatisticalQueryVo();    //bean自建的 不對應資料庫表,用於接收值,和返回頁面值

           bean.setContractNo((String) object[0]);

       }

DAO:

    public List findPrescription( StatisticalQueryConditionVo statisticalQueryConditionVo,   int startIndex, int numPerPage) {

       session = this.getSession();

       StringBuilder str = new StringBuilder();

       str.append("select  t1.a,t1.b,t2.c,t2.d  from t1 left join t2 on t1.id = t2.id "); //連表查詢返回多個表的欄位

       Query query = session.createSQLQuery(hql).setFirstResult(startIndex).setMaxResults(numPerPage);//  分頁操作

       List list = query.list();

       return list;

    }

連表查詢後會返回list<?>的資料:?代替了實體類。

用Object[] ob 陣列 接受  list<?>的  遍歷值:

 

再將陣列 object的值 賦值到 實體類返回到前端即可。

新增 刪除 和 修改

 String sql = "insert  delete  update  table  where id= '?'  "

   this.getSession().createSQLQuery(sql).executeUpdate();