1. 程式人生 > >用map實現sql拼接

用map實現sql拼接

今天在寫二維報表(某列的內容隨著帳號不同會變化)的時候想到了sql拼接。

首先你需要在你的實體類中定義一個map集合,看jeesit的原始碼它是把這個屬性定義在基類中,一個意思。

大概是這樣定義的(BaseEntity<T>可以代表你繼承的任何例項)

public abstract class BaseEntity<T>  {

    /** 自定義SQL(SQL標識,SQL內容)*/
   protected Map<String, String> sqlMap;
   @JsonIgnore
   @XmlTransient
   public Map<String, String> getSqlMap() {
   if (sqlMap == null){
	   sqlMap = Maps.newHashMap();
	}
	   return sqlMap;
    }

   public void setSqlMap(Map<String, String> sqlMap) {
       this.sqlMap = sqlMap;
  }
}

我們在邏輯處理的時候應該這樣用

//為了方便我們寫個公共方法,很明顯是給map儲存一個字串就行了
public static void dataScopeFilter(BaseEntity<?> entity, String sqlMapKey,String sql) {
		
	entity.getSqlMap().put(sqlMapKey, sql.toString());
		
}
//底下代表BaseEntity將會是一個bc04的例項物件
public Rp01 get0() {
		
		String sql = " select * from bc04 "
		dataScopeFilter(bc04, "dnsf", sql);
}



在mybatis這樣通過鍵值對拼進去就行了,但是隻有在bc04能取到

<select id="outjob" resultType="java.lang.Integer">
     ${sqlMap.dnsf}
</select>

如果還有不懂的想看看原始碼,直接下載jeesite原始碼檢視他的基類,並搜尋dataScopeFilter就能看到整個過程。