用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就能看到整个过程。

猜你喜欢

转载自blog.csdn.net/lihuihao2/article/details/82154100