在我的項目里,需要:
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 這些,因為下劃線本身就表示“匹配一個任意字符”,所以如果前綴里必須有下劃線,那可能要做過濾的。
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,即字符串。
TableDao.java
/*** 根據表名刪除對應表* @param tableName {@code String}* @return*/
void dropTable(String tableName);
TableDao.xml
<update id="dropTable">drop table if exists ${tableName}
</update>
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實際是我希望聯合的表格的名稱。仍然是不需要引號,所以用了${}而非#{}。
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,有點意思。
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的查詢結果放到對象中。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态