美文网首页
myBiatis 动态SQL含有CLOB字段导出为String

myBiatis 动态SQL含有CLOB字段导出为String

作者: WESTWALL | 来源:发表于2018-11-19 11:06 被阅读0次

    需求

    执行一个未知的SQL,将其导出。SQL中可能含有CLOB字段。

    SQL Map

    <select id="selectSomething" parameterType="map" resultMap="PageData">
      ${sql_script}
    </select>
    

    java

    思路:重写java.util.HashMap,对CLOB字段进行处理。重写put()方法。

    import java.io.BufferedReader;
    import java.io.Reader;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    import javax.servlet.http.HttpServletRequest;
    
    import com.alibaba.druid.proxy.jdbc.ClobProxyImpl;
    /** 
     * 说明:参数封装Map
     * 创建人:
     * 修改时间:
     * @version
     */
    public class PageData extends HashMap implements Map{
        
        private static final long serialVersionUID = 1L;
        
        Map map = null;
        HttpServletRequest request;
    //  public PageData(HttpServletRequest request){
    //      this.request = request;
    //      Map properties = request.getParameterMap();
    //      Map returnMap = new HashMap(); 
    //      Iterator entries = properties.entrySet().iterator(); 
    //      Map.Entry entry; 
    //      String name = "";  
    //      String value = "";  
    //      while (entries.hasNext()) {
    //          entry = (Map.Entry) entries.next(); 
    //          name = (String) entry.getKey(); 
    //          Object valueObj = entry.getValue(); 
    //          if(null == valueObj){ 
    //              value = ""; 
    //          }else if(valueObj instanceof String[]){ 
    //              String[] values = (String[])valueObj;
    //              for(int i=0;i<values.length;i++){ 
    //                   value = values[i] + ",";
    //              }
    //              value = value.substring(0, value.length()-1); 
    //          }else{
    //              value = valueObj.toString(); 
    //          }
    //          returnMap.put(name, value); 
    //      }
    //      map = returnMap;
    //  }
        
        public PageData() {
            map = new HashMap();
        }
        
        @Override
        public Object get(Object key) {
            Object obj = null;
            if(map.get(key) instanceof Object[]) {
                Object[] arr = (Object[])map.get(key);
                obj = request == null ? arr:(request.getParameter((String)key) == null ? arr:arr[0]);
            } else {
                obj = map.get(key);
            }
            return obj;
        }
        
        public String getString(Object key) {
            return (String)get(key);
        }
        
        @SuppressWarnings("unchecked")
        @Override
        public Object put(Object key, Object value) {
            if(value instanceof ClobProxyImpl){             //读取oracle Clob类型数据
                try {
                    ClobProxyImpl cpi = (ClobProxyImpl)value;
                    Reader is = cpi.getCharacterStream();   //获取流
                    BufferedReader br = new BufferedReader(is);
                    String str = br.readLine();
                    StringBuffer sb = new StringBuffer();
                    while(str != null){                     //循环读取数据拼接到字符串
                        sb.append(str);
                        sb.append("\n");
                        str = br.readLine();
                    }
                    value = sb.toString();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return map.put(key, value);
        }
        
        @Override
        public Object remove(Object key) {
            return map.remove(key);
        }
    
        public void clear() {
            map.clear();
        }
    
        public boolean containsKey(Object key) {
            // TODO Auto-generated method stub
            return map.containsKey(key);
        }
    
        public boolean containsValue(Object value) {
            // TODO Auto-generated method stub
            return map.containsValue(value);
        }
    
        public Set entrySet() {
            // TODO Auto-generated method stub
            return map.entrySet();
        }
    
        public boolean isEmpty() {
            // TODO Auto-generated method stub
            return map.isEmpty();
        }
    
        public Set keySet() {
            // TODO Auto-generated method stub
            return map.keySet();
        }
    
        @SuppressWarnings("unchecked")
        public void putAll(Map t) {
            // TODO Auto-generated method stub
            map.putAll(t);
        }
    
        public int size() {
            // TODO Auto-generated method stub
            return map.size();
        }
    
        public Collection values() {
            // TODO Auto-generated method stub
            return map.values();
        }
        
    }
    

    相关文章

      网友评论

          本文标题:myBiatis 动态SQL含有CLOB字段导出为String

          本文链接:https://www.haomeiwen.com/subject/rcyofqtx.html