關於hibernate的查詢語句
hibernate的查詢方式有HQL, Cretiria和SQLQuery
在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();