用map實現sql拼接
阿新 • • 發佈:2018-11-07
今天在寫二維報表(某列的內容隨著帳號不同會變化)的時候想到了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就能看到整個過程。