1. 程式人生 > >自己總結的hql新增、刪除、查詢與sql的新增、刪除、查詢區別

自己總結的hql新增、刪除、查詢與sql的新增、刪除、查詢區別

一、當儲存的是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)、當查詢的記錄對應的是一張表裡面的資料,並且該表對應一個類的物件

       例;     

       /**
	 * 
	 * @功能描述 根據收文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;
	}
解釋:TbDocumentFile對應資料庫裡面的表TB_DOCUMENT_FILE表如下圖所示
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下儲存結構為: