后台傳list到前台,前台怎么解析,怎么將解析的數據填充到已經存在列名table中


需求背景:
mybatis如何直接 執行傳入的任意sql語句 並按照順序取出查詢的結果集 ,並將數據傳輸到前台,並渲染到已經存在列名的table的對應字段中


特別需要注意的是這種需求和往常的不一樣,平時的都是直接傳一些屬性值到dao.xml文件中 在xml中進行接收,拼接sql語句。

往常的編寫過程如下:

XXXService.java

	public SqlConfig getSqlConfigByTitle(String sqlTitle) {
		// TODO Auto-generated method stub
		return sqlConfigurationDao.getSqlConfigByTitle(sqlTitle);
	}

  

 XXXDao.java

	public SqlConfig getSqlConfigByTitle(String sqlTitle);

XXXDao.xml

<select id="getSqlConfigBySQLVersion" resultMap="resultMap">

select * from cf_sql s
where s.sqlVersion=#{sqlVersion}
</select>

  

我的這種需求是:在已經存在的一個表中查尋出已經存在的sql,之后通過service層 的某個方法傳輸到Dao.java 的某個方法中,之后再在Dao.xml中通過#{....}進行sql拼接,查出的數據多條記錄,對於每一條記錄都是由多個屬性組成,但是如果sql語句不同的話,查詢出的字段的數目也不一樣,所以這里就不好通過resultTMap去映射了,因為一般resultMap會在Dao.xml中進行bean屬性值和數據庫列值的映射

 

此情景中的解決辦法:

 

Dao.xml

<select id="superManagerSelect" parameterType="String" resultType="java.util.LinkedHashMap">
${value}
</select>

具體的為什么用resultType="java.util.LinkedHashMap"  可見另一篇博文:https://www.cnblogs.com/isme-zjh/p/12809477.html

Dao.java

    public List<LinkedHashMap<String, Object>> superManagerSelect(String value);

Service.java

public List<LinkedHashMap<String, Object>> superManagerSelect(String sqlContext) {
		// TODO Auto-generated method stub
		return sqlConfigurationDao.superManagerSelect(sqlContext);
	}
	

  Controller.java

注意控制器里面的處理:

  List<String> dataList =new ArrayList<String>();
  dataList.add(linkedHashMap.values().toString());將LinkedHashMap<String, Object> 
dataList

中的內容一項一項的輸出的結果如下(Console欄中輸出):
[id,name,sex][001,zhangsan1,男]
[id,name,sex][002,zhangsan2,女]
[id,name,sex][003,zhangsan3,男]
[id,name,sex][004,zhangsan4,男]

    @ResponseBody
    @RequestMapping(value="dataSelect")
    public List<String> dataSelect(@RequestParam("sqlId")String sqlId) {
        System.out.println("==========sqlId==========>"+sqlId);
        List<String> dataList =new ArrayList<String>();
        
        if((!sqlId.equals(""))&&(!(sqlId==null))){  //注意字符串中的 判空操作
            SqlConfig    sqlc = SqlConfigService.getSqlConfigById(sqlId);
            String sqlContext =     sqlc.getSqlContext();
            //測試LinkedHashMap
            
            result = SqlConfigService.superManagerSelect(sqlContext);
            for (LinkedHashMap<String, Object> linkedHashMap : result) {
                dataList.add(linkedHashMap.values().toString());
            }
            
            for (String item : dataList) {
                System.out.println("$$$====>"+item);
            }

    } 
        return dataList;
    }

前台html   代碼

<script>


var sqlId = $("#sqlId").val();
			$.ajax({
				type: 'post',
				url: '${ctx}/sys/dataSelect',
				data:{"sqlId":sqlId},
				dataType: 'json',
				success: function(data){
					if(data!=null){
						var array = eval(data);
						var con="";                                此段代碼是在已經有列名的table中填充數據了!
						$.each(array,function(index,item){
							var str1 =item.replace("[","");
							var str2 =str1.replace("]","");
							//alert(str2);
							var arr = str2.split(',');
							con += "<tr>";
							for(var i=0;i<arr.length;i++){
							con+="<td>"+arr[i];
							con+="</td>";
							}
							con+="</tr>";
						})
						
						$("#myBody").html(con);
					}else{
						
					}
				}
			});
</script>

  




<table id="contentTable" class="table table-striped table-bordered table-condensed"> <thead> <tr> <c:forEach items="${ls}" var="item"> <!-- 這是要填充列名稱的位置-->
<th>${item}</th> </c:forEach> </tr> </thead> <tbody id="myBody"> <!-- 這是要填充數據的位置--> </tbody> </table>

 

這就是這種特殊情況的解決辦法!

最終的效果是:

通過點擊調用不同的sql會從數據庫中查詢出來 不同的數據通過js  填充到已經提前的渲染出列名的table中

 

效果如圖:

 

 

 

 

var sqlId = $("#sqlId").val();$.ajax({type: 'post',url: '${ctx}/sys/dataSelect',data:{"sqlId":sqlId},dataType: 'json',success: function(data){if(data!=null){var array = eval(data);var con="";$.each(array,function(index,item){var str1 =item.replace("[","");var str2 =str1.replace("]","");//alert(str2);var arr = str2.split(',');con += "<tr>";for(var i=0;i<arr.length;i++){con+="<td>"+arr[i];con+="</td>";}con+="</tr>";})//alert(con);$("#myBody").html(con);}else{}}});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM