【原】MyBatis執行DDL:create table,drop table等等


【前言】

  對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}”的格式。

 


免責聲明!

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



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