今天在写二维报表(某列的内容随着帐号不同会变化)的时候想到了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就能看到整个过程。