出處 https://www.cnblogs.com/zjrodger/p/5567085.html
【前言】
對MyBatis一直停留在僅僅會用的階段,常用的場景就是通過MyBatis對表數據進行DML(insert, delete, update等)操作,從來沒有想過通過MyBatis對數據庫
進行DDL(create, alter, drop)操作,最近的項目需要利用MyBatis對數據庫進行DDL操作,自己就嘗試了一把,對MyBatis又多了點兒了解。
【具體代碼】
1、mapper接口文件內容如下。
/**
* 執行備份數據庫相關表的Mapper
*/
public interface BackupDataMapper {
/**
* 修改數據庫的表名字
* @param originalTableName
* @param newTableName
* @return
*/
int alterTableName(@Param("originalTableName") String originalTableName,
@Param("newTableName") String newTableName);
/**
* truncate指定數據庫表的數據
* @param tableName
* @return
*/
int truncateTable(@Param("tableName") String tableName);
/**
* 根據傳入的表明,創建新的表並且將原表的數據插入到新的Occur表中
* @param newTableName
* @param originalTableName
*/
void createNewTableAndInsertData(@Param("newTableName") String newTableName,
@Param("originalTableName") String originalTableName);
/**
* 統計某張表中的總數據條數。
* @param tableName
* @return 指定表中的總記錄條數。
*/
int getRecordCount(@Param("tableName") String tableName);
/**
* 獲得當前數據庫的名字
* @return
*/
String getCurDataBaseName();
/**
* 從指定數據庫中,查詢是否存在某張表
* @param dataBaseName
* @param tableName
* @return
*/
String isTargetTableExistInDB(@Param("dataBaseName") String dataBaseName,
@Param("tableName") String tableName);
}
2、mapper.xml文件內容如下。
<mapper namespace="com.zjrodger.dao.iface.BackupDataMapper">
<update id="alterTableName">
alter table ${originalTableName} rename ${newTableName}
</update>
<update id="truncateTable">
truncate table ${tableName}
</update>
<update id="createNewTableAndInsertData">
create table ${newTableName} as select * from ${originalTableName}
</update>
<select id="getRecordCount" resultType="int">
select count(1) from ${tableName}
</select>
<select id="getCurDataBaseName" resultType="string">
select database();
</select>
<select id="isTargetTableExistInDB" resultType="string">
SELECT table_name FROM information_schema.tables WHERE table_schema = #{dataBaseName} and TABLE_NAME = #{tableName}
</select>
</mapper>
3、注意點
在傳入“表名”作為參數時,一定要使用“${tableName}”的格式,而不能使用“#{tableName}”的格式。

