天天看點

bboss 動态sql使用foreach循環示例

本文介紹bboss 動态sql使用foreach循環示例。切入正題。

在sql配置檔案中配置的sql語句有時需要用到foreach循環控制語句以及循環計數器velocityCount,以便周遊外部傳入的list資料。在這裡我們簡單地介紹這個功能。

首先看看sql配置檔案中配置的sql語句:

<property name="updateLkYjZt">
  <![CDATA[
   update dtjf.t_zt_zdry_cklkyjqbxx y set y.sjqszt = '5'
  where y.yjlx='2' 
  #if($ldxxbhs && $ldxxbhs.size() > 0)
  and y.ldxxbh in (
  #foreach($ldxxbh in $ldxxbhs)
        #if($velocityCount == 0),#end #[ldxxbhs[$velocityCount]]
            
   #end      
  )
  ]]>
</property>
      

在sql語句中包含了foreach循環控制語句和循環控制變量velocityCount:

#foreach($ldxxbh in $ldxxbhs)
        #if($velocityCount == 0),#end #[ldxxbhs[$velocityCount]]            
   #end         

其中的變量$ldxxbh 儲存了每次疊代擷取到的list元素的值,變量$ldxxbhs表示一個list集合,可以通過三種方式設定:bean的get方法,map對象,sqlparams對象;詳情請參考文章《

bbossgroups 持久層模闆sql變量參數設定的三種方式

》,本例采用map方式設定這個list類型變量$ldxxbhs。

需要注意的是,需要把resources/velocity.properties檔案相關配置項按照以下配置配置:

directive.foreach.counter.name = velocityCount

directive.foreach.counter.initial.value = 0

說明:

directive.foreach.counter.name

用來定義foreach循環遞增變量名稱,通過velocity.properties檔案中全局指定這個變量名稱,預設為velocityCount,項目開發之初就要确定這個變量名稱,後續不能更改。

directive.foreach.counter.initial.value

用來定義循環變量velocityCount(名稱由directive.foreach.counter.name屬性指定)的初始值,預設從1開始,項目開發之初應将其調整為0

下面我們看看java通過ConfigSQLExcutor對象executor來執行這個帶foreach循環控制邏輯的sql語句代碼:

public void updateLkYjZt(List<String> ldxxbhs) {
				try {
			Map datas = new HashMap();
datas.put("ldxxbhs",ldxxbhs);
executor.updateBean("updateLkYjZt", datas);

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}      

其中executor.updateBean("updateLkYjZt", datas)中的參數"updateLkYjZt"對應sql配置<property name="updateLkYjZt">中name屬性的值,

Map對象datas中設定了key為“ldxxbhs”,值為list類型的變量ldxxbhs,foreach循環控制語句中通過key “ldxxbhs”來引用這個list對象,然後完成循環控制語句的執行。