大數據web平臺有時須要查看不一樣指標按不一樣類型和篩選條件來出結果, 且系統作不到實時出結果, 故須要在web系統中選擇指標和條件後建立任務進行非實時計算, 一段時間後計算結果寫入結果表, 訪問頁面並查看處理結果.java
邏輯與mybatis dml執行是同樣的: xml提供sql->mapper映射->testweb
1.xmlsql
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.demo.DynaDemoMapper"> <!-- 建表 --> <!-- 1.ddl使用update標籤 --> <!-- 2.ddl使用${}取值 --> <!-- 3.動態列實際上只是普通的foreach, 常見問題是使用#{}取值形成語法錯誤 --> <update id="createAutoTaskResult" parameterType="map"> create table ${tableName} ( date date, <foreach collection="cloums" item="listItem" separator=","> ${listItem} varchar(30) </foreach> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 </update> <!-- 1.表名取值${} --> <!-- 2.由於是未知列故返回結果不能再是對象, 此處使用map, 實際上返回的是list<map>, 若是表裏有id等惟一值也能夠 單純返回map, key用ID --> <select id="selectTaskResult" parameterType="map" resultType="java.util.Map"> select * from ${tableName} where date between #{startDate,jdbcType=DATE} and #{endDate,jdbcType=DATE} </select> </mapper>
1.mapperjson
public interface DynaDemoMapper { void createAutoTaskResult(@Param("tableName")String tableName, @Param("cloums")List<String> cloums); /** * @Description: 單純返回id做爲key的map * @MapKey("id") * Map<Long, Object> selectTaskResult(@Param("tableName")String tableName, @Param("startDate")Date startDate, @Param("endDate")Date endDate) */ List<Map<String, Object>> selectTaskResult(@Param("tableName")String tableName, @Param("startDate")Date startDate, @Param("endDate")Date endDate); }