javascript動態創建表格,springboot-mybatis動態操作表格

 2023-12-09 阅读 35 评论 0

摘要:問題描述 在我的項目里,需要: 根據名稱查找表格,判斷表格是否存在;動態創建表格;刪除表格;修改表格的engine;使用load data快速導入大量數據;分組統計數據并存入指定對象中。 為了解決這些問題,我單獨寫了一個

問題描述

在我的項目里,需要:

  1. 根據名稱查找表格,判斷表格是否存在;
  2. 動態創建表格;
  3. 刪除表格;
  4. 修改表格的engine;
  5. 使用load data快速導入大量數據;
  6. 分組統計數據并存入指定對象中。
    為了解決這些問題,我單獨寫了一個TableDao,將表格相關的操作放在一起。以下僅給出示例。

解決方案

1.根據名稱查找表格

TableDao.java

/*** 查找prefix開頭的表名* @param prefix {@code String}* @return*/
List<String> getTableNamesWithPrefix(String prefix);/*** 返回該名稱的表的數量* @param tableName* @return 0 表示不存在,1表示存在*/
int isTableExist(String tableName);

TableDao.xml

<select id="getTableNamesWithPrefix" parameterType="java.lang.String" resultType="java.lang.String">select table_name from information_schema.tableswhere table_schema='你的數據庫名字'and table_name like concat(#{prefix}, '%')
</select><select id="isTableExist" parameterType="java.lang.String" resultType="java.lang.Integer">select count(*) from information_schema.tableswhere table_schema='你的數據庫名字'and table_name=#{tableName}
</select>

這里我遇到過一個坑:如果你的前綴是 ‘pre_’ ,那么 getTableNameWithPrefix 會匹配 prev、prev_、pre_v 這些,因為下劃線本身就表示“匹配一個任意字符”,所以如果前綴里必須有下劃線,那可能要做過濾的。

2.動態創建表格

TableDao.java

/*** 創建id_XXX表* @param tableName {@code String}* @return*/
void createIdTable(String tableName);

TableDao.xml

<update id="createIdTable" parameterType="java.lang.String">create table ${tableName} (你的sql) engine=myisam;
</update>

注意:${tableName}是將tableName直接嵌入這里,而#{tableName}實際放入的是帶引號的tableName,即字符串。

3.刪除表格

TableDao.java

/*** 根據表名刪除對應表* @param tableName {@code String}* @return*/
void dropTable(String tableName);

TableDao.xml

<update id="dropTable">drop table if exists ${tableName}
</update>

4.修改表格的engine

TableDao.java

void modifyIdEngine(List<String> tableNames);

TableDao.xml

<update id="modifyIdEngine" parameterType="list">alter table id engine=merge union<foreach item="item" collection="list" separator="," open="(" close=")">${item}</foreach>insert_method=no;
</update>

這里我做了一個分表,前面傳進來的tableNames實際是我希望聯合的表格的名稱。仍然是不需要引號,所以用了${}而非#{}。

5.使用load data快速導入大量數據

TableDao.java

/*** 使用load data infile 方式給 id 表導入數據* @param path {@code String} 文件路徑* @param name {@code String} 表名* @return*/
void loadIdTable(String path, String name);

TableDao.xml

<select id="loadIdTable" parameterType="java.lang.String">load data infile #{path} into table ${name} fields terminated by "\t" lines terminated by "\n" (列名們)
</select>

這里用的標簽是select,有點意思。

6.分組統計數據并存入指定對象中

TableDao.java

/*** 查看每個taxon有多少條數據* @param name {@code String} 表名* @return*/
List<NumPerTaxon> getTaxonGroupForSingleTable(String name);

TableDao.xml

<resultMap id="SumResultMap" type="com.example.demo.對象類名">    <result column="taxon" jdbcType="VARCHAR" property="taxon" /><result column="number" jdbcType="INTEGER" property="number" />
</resultMap>
<select id="getTaxonGroupForSingleTable" parameterType="java.lang.String" resultMap="SumResultMap">select taxon, count(*) numberfrom${name}group by taxon
</select>

這里我封裝了一個類(有一個String類型的taxon變量和一個int類型的number變量),然后將group by的查詢結果放到對象中。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/195576.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息