5、jeecg 筆記之 minidao 條件判斷


 1、前言

 我們知道 mybatis 中的動態sql語句是基於 OGNL 表達式的。
 額外補充一點:mybatis 中的 #{} 和 ${} ,可直接跳過。
 
#{}表示一個占位符號,#{}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,#{}中可以寫成value或其它名稱。
#{}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
 
${}表示一個拼接符號,會引用sql注入,所以不建議使用${}。
${}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,${}中只能寫成value。
${}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。

 來看看今天的重點對象,minidao,那么它里邊的語法又是什么呢?

 

2、怎么寫

  怎么寫之前先來看一下官方的描述:
 
Jeecg針對springjdbc+freemarker做了封裝,出了這么一個輕量級持久層,可以讓Hiberate擁有mybatis一樣SQL靈活能力,同時支持事務統一、SQL標簽能力。
 
  這樣是不是已經很明確了呢,freemarker 語法,那么 freemaker 是什么呢?
  freemaker 是前端引擎,只負責展示,沒有復雜邏輯,而它的語法是 FTL 指令,類似於 HTML 標簽。
  來看看 minidao 中怎么用吧。
 

2.1 if 判斷

<#if status?exists && status?length gt 0>
  and   t.status= :status
</#if>

 

2.2 if elese 

<#if status?exists && status?length gt 0>
      and   t.status= :status
<#else>
      and 1=1
</#if>
 

2.3 list 進行遍歷

<#list items as item>
    ${item.userName}
</#list>
更加詳細的參考: http://qy85.iteye.com/blog/1612093 
 

3、需要注意

 既然我們知道了, minidao 中,封裝了 freemaker 便簽,那么同樣我們也知道,在 freemaker ftl中,參數是通過 ${},而我們在系統發現,很多都是這樣用的 :參數,那么這又是怎么一回事?
 

4、sql 參數使用方式

 

 4.1 占位符方式-【:字段名】

 這種方式是我們在系統中最常見的了,來看看他的與缺點。

 優點: 防止sql注入;sql執行計划只解析一次;字段值根據類型自動轉換,不需要手工處理

 缺點: 只能傳參數原生態值;參數為List情況循環體不適用

 官方示例:

SELECT * FROM employee where 1=1 
<#if employee.age ?exists>
and age = :employee.age
</#if>
<#if employee.name ?exists>
and name = :employee.name
</#if>
<#if employee.empno ?exists>
and empno = :employee.empno
</#if>

 

4.2 模版語言方式 -【${字段名}】

你要的 ftl 方式的來了。

缺點: Sql直接拼裝,有SQL注入風險;參數值需根據類型手工轉換;

優點: 可以對參數值進行腳本處理;參數為List對象,循環體對象必須用該方式;(用戶體驗沒有變化,直接將${}改為: 即可

特點: 持多參數,支持參數多層,參數為list必須采用模板語言方式

官方示例:

SELECT * FROM employee where 1=1 
<#if employee.age ?exists>
   and age = '${employee.age}'
</#if>
<#if employee.name ?exists>
   and name = '${employee.name}'
</#if>
<#if employee.empno ?exists> and empno = '${employee.empno}' </#if>

 

上邊之所以提到 mybatis  #{} 和 ${} ,其實是為了體現 :字段名 和  ${}

總之,推薦使用占位符的形式。

 

 
18年專科畢業后,期間一度迷茫,最近我創建了一個公眾號用來記錄自己的成長。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM