最近有小火伴問我mybatis有無自動創建表結構的功能,由于他們之前1直使用hibernate用習慣了,天經地義的認為,在實體類上配置下注解或寫寫映照文件,系統啟動后就能夠自動創建表。
我只能很遺憾的告知他,mybatis并沒有這個功能,看他興趣闌珊的模樣,我只能安慰他,就算沒有這功能,我們可以自己開發啊~~
所以就有了下面這套系統,已開源大家可以下來看看~~
Mybatis_BuildTable_V0.2
https://git.oschina.net/sunchenbin/Mybatis_BuildTable_V0.2.git
該項目架構使用的是SpringMvc+Mybatis+Maven,功能特點是通過配置model注解的方式來創建表,修改表結構,目前僅支持Mysql,由于重點是突出mybatis自動創表的功能,所以在框架上沒有話太多心思。
使用規范:
核心代碼都在model-store-repo中
1.SysMysqlColumns.java這個對象里面配置的是mysql的數據類型,這里配置的類型越多,意味著創建表時能使用的類型越多
2.LengthCount.java是1個自定義的注解,用于標記在SysMysqlColumns.java里面配置的數據類型上的,標記該類型需要設置幾個長度,如datetime/varchar(1)/decimal(5,2),分別是需要設置0個1個2個
3.Column.java也是1個自定義的注解,用于標記model中的字段上,作為創建表的根據如不標記,不會被掃描到,有幾個屬性用來設置字段名、字段類型、長度等屬性的設置,詳細請看代碼上的注釋
4.Table.java也是1個自定義的注解,用于標記在model對象上,有1個屬性name,用于設置該model生成表后的表名,如不設置該注解,則該model不會被掃描到
ok,系統啟動后會去自動調用SysMysqlCreateTableManagerImpl.java的createMysqlTable()方法,沒錯,這就是核心方法了,負責創建、刪除、修改表。
model-store-frontend/resources/config/autoCreateTable.properties
你會發現有這樣1個配置文件,其中有兩項配置
1.mybatis.table.auto=update
2.mybatis.model.pack=com.sunchenbin.store.model
本系統提供兩種模式:
1.當mybatis.table.auto=create時,系統啟動后,會將所有的表刪除掉,然后根據model中配置的結構重新建表,該操作會破壞原有數據。
2.當mybatis.table.auto=update時,系統會自動判斷哪些表是新建的,哪些字段要修改類型等,哪些字段要刪除,哪些字段要新增,該操作不會破壞原有數據。
3.mybatis.model.pack這個配置是用來配置要掃描的用于創建表的對象的包名
系統配置的是使用maven來啟動的,web依賴repo,frontend和mobile依賴web,所以要運行frontend和mobile,必須先instal1下web和repo
至于如何用maven啟動項目….不再多說了。
嗯~~ 有的朋友說這套系統的實際意義不大,見仁見智了,對有的人來說是沒意義的,而對另外一部份人講可能會有很大的幫助…好了,就醬~
后續我準備重構1下,打成jar包以供大家使用。