1. 程式人生 > >記一次iBatis自定義sql的坑

記一次iBatis自定義sql的坑

在進行定時任務排程Job時,在執行到service層時,先是報錯,原因是service方法未增加@Transaction註解

@Override
    @Transactional
    public List<Object[]> modelListBySql(Map<String, Object> paraMap)
    {
        return null;
    }

,再次除錯,控制檯列印sql語句,但是似乎程式停止了一樣沒有任何反應,然後在Dao層將封裝的查詢方法放到dao了新增斷點除錯。

public List findListBySqlId(String sqlId, Map<?, ?> paraMap)
    /*     */   {
    /* 195 */     List list = null;
    /*     */     try {
    /* 197 */       String hql = getSqlStatementById(sqlId, paraMap);
    /* 198 */       if (StringUtils.isNotBlank(hql)) {
    /* 199 */         Query query = getSession().createSQLQuery(hql);
    /* 200 */         query.setCacheable(SysPropertiesUtil.getBoolean("use_query_cache", false));
    /* 201 */         setQueryParameters(query, paraMap);
    /* 202 */         list = query.list();
    /*     */       } else {
    /* 204 */         throw new BasalException(BasalException.ERROR, "未在 SqlMap配置檔案中配置, ID為" + sqlId + 
    /* 205 */           "hql 語句");
    /*     */       }
    /*     */     } catch (Exception e) {
    /* 208 */       throw new BasalException(BasalException.ERROR, e.getCause().getMessage(), e.getCause());
    /*     */     }
    /* 210 */     return list;
    /*     */   }

程式碼走到list = query.list();後同樣沒有任何反應,生成的sql語句在本地執行也沒有任何問題。後來將配置檔案中的語句整體再包一層來查詢問題解決,這可能是sql拼接時,多表關聯查詢導致,ibatis錯誤判斷語句結尾導致的。