自己總結的hql新增、刪除、查詢與sql的新增、刪除、查詢區別
阿新 • • 發佈:2019-02-16
一、當儲存的是Hibernate 物件的時候:
/**
* @功能描述 儲存或者修改收文記錄
* @param main void
*/
@SuppressWarnings("unchecked")
public void saveOrUpdateRecive( TbDocumentReceiveMain main) {
this.saveOrUpdate(main);
this.flush();
}
TbDocumentMain 類的一個物件,表示資料庫中的一條記錄,每次可以給類的物件賦值之後在呼叫</span><pre name="code" class="html">saveOrUpdate儲存或者修改之後的物件
二、刪除
(1)sql刪除
/** * @描述:刪除TB_DOCUMENT_RECEIVE_DEPT記錄 * @param receiveDeptId * void * @建立人 :kj */ @SuppressWarnings("unchecked") public void deleteDemp(String receiveDeptId) { StringBuffer sql = new StringBuffer(); sql.append("delete TB_DOCUMENT_RECEIVE_DEPT where RECIVE_MAIN_ID = ? "); SQLQuery query = this.createSQLQuery(sql.toString(), null, null, new Object[]{receiveDeptId}); query.executeUpdate(); }
三、查詢
(1)、當查詢的記錄對應的是一張表裡面的資料,並且該表對應一個類的物件
例;
解釋:TbDocumentFile對應資料庫裡面的表TB_DOCUMENT_FILE表如下圖所示/** * * @功能描述 根據收文ID和型別查詢附件 * @param id * @return List<TbDocumentFile> */ @SuppressWarnings("unchecked") public List<TbDocumentFile> queryFileByDocumentid( String id,String type) { List<TbDocumentFile> list = this.createQuery("from TbDocumentFile where documentId = ? and type = ?", new Object[]{id,type}).list(); return list; }
List<TbDocumentFile> list = this.createQuery("from TbDocumentFile where documentId = ? and type = ?", new Object[]{id,type}).list();
這句將要查詢的引數放在object數組裡面,需要注意的是這裡的查詢語句是:"from TbDocumentFile where documentId = ? and type = ?", new Object[]{id,type})我們可以看出:
1、from前面沒有select 關鍵字,並且from後面跟的不是表名,<span style="font-family: Arial, Helvetica, sans-serif;">而是資料表對應的類的類名</span>
2、where 後面跟的不是<span style="background-color: rgb(240, 240, 240);">TB_DOCUMENT_FILE中的欄位DOCUMENT_ID ,而是</span></span><span style="font-family: Arial, Helvetica, sans-serif;">DOCUMENT_ID 欄位對類屬性:</span><span style="font-family: Arial, Helvetica, sans-serif;">documentId </span>
查詢出來的記錄存放在List<TbDocumentFile> list 這個list數組裡面,數組裡面的每一條資料元素就是一個TbDocumentFile物件即一條資料表中的一條記錄
下面給大家看看查詢的到的list資料:
由這張表和上面一張資料庫儲存的表可以看出他們的一一對應關係。
(2)、當查詢的資料不是來自一張表而是多表聯查
例:
/**
* @描述:根據員工ID獲取崗位類別
* @param empid 員工id
* @return 00 正所長, 01副所長 ,02 科室主任 ,03 科員
* String
* @建立人 :kj
*/
@SuppressWarnings("unchecked")
public String queryPostType(String empid) {
String postType = "03" ;
String sql ="select e.post_type_code as code ,d.name from cen_reg.t_employee e "
+ "left join cendic.d_dictionary_item d on d.code = e.post_type_code and d.d_code='DIC_PT_GWLB' "
+ "where e.id = '"+empid+"'";
List<Map<String,String>> list = this.createSQLQuery(sql, null, null, null)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
.list();
if(list != null && list.size() > 0){
String temp = list.get(0).get("CODE");
if(StringUtils.equals(temp, "01")){
//還需要判斷正副 所長
sql = " select id from TB_DOCUMENT_MANAGER t where t.emp_id = ? " ;
list = this.createSQLQuery(sql, null, null, new Object[]{empid}).list();
if(list != null && list.size() > 0){
//正所長
postType = "00" ;
}else{
//副所長
postType = temp ;
}
}
if(StringUtils.equals(temp, "02")){
postType = temp ;
}
}
return postType ;
}
由這句sql語句可以知道:查詢的資料code 來自表cen_reg.t_employee表,查詢的name來自表cendic.d_dictionary_item
String sql ="select e.post_type_code as code ,d.name from cen_reg.t_employee e "
+ "left join cendic.d_dictionary_item d on d.code = e.post_type_code and d.d_code='DIC_PT_GWLB' "
+ "where e.id = '"+empid+"'";
這種情況呼叫函式createSQLQuery來獲取返回值
List<Map<String,String>> list = this.createSQLQuery(sql, null, null, null)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
.list();
返回的list在Debug下儲存結構為: