1. 程式人生 > >A.CTable開源框架Mybatis增強自動建立表/更新表結構/實現類似hibernate共通的增刪改查

A.CTable開源框架Mybatis增強自動建立表/更新表結構/實現類似hibernate共通的增刪改查

mybatis-enhance-actable-0.0.1

不用再為mybatis無法自動建立表,不提供基本的增刪改查而苦惱啦!有了A.CTable這將不再成為你苦惱的理由,而且學習簡單,只要進行簡單的配置,然後稍微看下原始碼註解就可以上手了,A.CTable使用的是jdk1.7,大家使用時注意下,jdk版本和編碼格式UTF-8的問題。

繼之前的兩篇文章闡述,我的第一個開源專案Mybatis_BuildTable_V0.2之後

新版本的Mybatis增強自動建立表框架A.CTable應運而生,初衷是為了將一系列技術融匯貫通到一個框架中,讓
大家不用為了搭框架困惱,所以之前那版Mybatis_BuildTable_V0.2專案結構複雜,讓使用的小夥伴感覺很不爽,因此根據大家提出的意見,我將老專案中的程式碼重新提取了重構了一下,並修復了一系列bug。

後來想著要取個什麼名字好呢,想來想去還是Auto Create Table——A.CTable(ps:笑哭表情),這個槽點可以笑一年我懂~~

迴歸正題,之前兩篇文章已經對該A.CTable做了技術以及用途方面的講解,因此我這裡就不再詳細描述了,直接把專案裡的使用說明貼過來給大家過過眼。

A.CTable使用說明

該專案是從之前寫過的一個框架中抽取出來的,本身是對Mybatis做的增強功能,為了能夠使習慣了hibernate框架的開發者能夠快速的入手Mybatis,我給他取名叫做 “A.CTable” 本意是自動建表的意思,A.CTable是一個基於Spring和Mybatis的Maven專案,增強了Mybatis的功能,過配置model註解的方式來建立表,修改表結構,並且實現了共通的CUDR功能提升開發效率,目前僅支援Mysql,後續可能會擴充套件針對其他資料庫的支援。

A.CTable是採用了Spring、Mybatis技術的Maven結構,詳細介紹如下:

**######### mybatis增加功能自動建立表——A.CTable版本說明################**

1. 該版本修復了修改主鍵同時修改其型別引起的error
2. 該版本修復了根據model建立時沒有建立父類中的欄位的問題(ps:目前只支援掃描一層繼承)
3. 該笨笨增加了對唯一約束的支援
4. 從原有的框架中剝離出來,支援任意結構的spring+mybatis的框架使用
5. 再次宣告A.CTable目前僅支援mysql資料庫

使用步驟方法

1.使用該功能的專案需要依賴mybatis-enhance-actable-0.0.1-SNAPSHOT.jar
2.在你的web專案上建立個目錄比如config下面建立個檔案autoCreateTable.properties檔案的內容如下:

mybatis.table.auto=update
mybatis.model.pack=com.sunchenbin.store.model

本系統提供三種模式:

  1. 當mybatis.table.auto=create時,系統啟動後,會將所有的表刪除掉,然後根據model中配置的結構重新建表,該操作會破壞原有資料。

  2. 當mybatis.table.auto=update時,系統會自動判斷哪些表是新建的,哪些欄位要修改型別等,哪些欄位要刪除,哪些欄位要新增,該操作不會破壞原有資料。

  3. 當mybatis.table.auto=none時,系統不做任何處理。

3.mybatis.model.pack這個配置是用來配置要掃描的用於建立表的物件的包名

4.spring的配置檔案中需要做如下配置:

<!-- 自動掃描(自動注入mybatis-enhance-actable的Manager)必須要配置,否則掃描不到底層的mananger方法 -->
    <context:component-scan base-package="com.gitee.sunchenbin.mybatis.actable.manager.*" />

    <!-- 這是mybatis-enhance-actable的功能開關配置檔案,其實就是將上面第2點說的autoCreateTable.properties檔案註冊到spring中,以便底層的mybatis-enhance-actable的方法能夠獲取到-->
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath*:config/autoCreateTable.properties</value>
            </list>
        </property>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="properties" ref="configProperties" />
    </bean>

    <!-- mybatis的配置檔案中需要做兩項配置,因為mybatis-enhance-actable專案底層是直接依賴mybatis的規範執行sql的,因此需要將其中的mapping和dao對映到一起 -->
    1. classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml
    2. com.gitee.sunchenbin.mybatis.actable.dao.*

    舉例這兩個配置配置的詳細位置

    <!-- myBatis檔案 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自動掃描entity目錄, 省掉Configuration.xml裡的手工配置 -->
        <property name="mapperLocations">
            <array>
              <value>classpath*:com/sunchenbin/store/mapping/*/*.xml</value>
              <value>classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml</value>
            </array>
        </property>
        <property name="typeAliasesPackage" value="com.sunchenbin.store.model.*" />
        <!-- <property name="configLocation" value="classpath:core/mybatis-configuration.xml" /> -->
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.sunchenbin.store.dao.*;com.gitee.sunchenbin.mybatis.actable.dao.*" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

程式碼用途講解

  1. SysMysqlColumns.java這個物件裡面配置的是mysql的資料型別,這裡配置的型別越多,意味著建立
    表時能使用的型別越多

  2. LengthCount.java是一個自定義的註解,用於標記在SysMysqlColumns.java裡面配置的資料型別上的,標記該型別需要設定幾個長度,如datetime/varchar(1)/decimal(5,2),分別是需要設定0個1個2個

  3. Column.java也是一個自定義的註解,用於標記model中的欄位上,作為建立表的依據如不標記,不會被掃描到,有幾個屬性用來設定欄位名、欄位型別、長度等屬性的設定,詳細請看程式碼上的註釋

  4. Table.java也是一個自定義的註解,用於標記在model物件上,有一個屬性name,用於設定該model生成表後的表名,如不設定該註解,則該model不會被掃描到

  5. 系統啟動後會去自動呼叫SysMysqlCreateTableManagerImpl.java的createMysqlTable()方法,沒錯,這就是核心方法了,負責建立、刪除、修改表。

共通的CUDR功能使用