Mybatis自動創(chuàng)建表和更新表結(jié)構(gòu)
作者:孫琛斌
最近有小伙伴問我mybatis有沒有自動創(chuàng)建表結(jié)構(gòu)的功能,因為他們之前一直使用hibernate用習(xí)慣了,理所當(dāng)然的認(rèn)為,在實體類上配置下注解或者寫寫映射文件,系統(tǒng)啟動后就可以自動創(chuàng)建表。
我只能很遺憾的告訴他,mybatis并沒有這個功能,看他興致闌珊的樣子,我只能安慰他,就算沒有這功能,我們可以自己開發(fā)啊~~
所以就有了下面這套系統(tǒng),已開源大家可以下來看看~~
Mybatis_BuildTable_V0.2
https://git.oschina.net/sunchenbin/Mybatis_BuildTable_V0.2.git
該項目架構(gòu)使用的是SpringMvc+Mybatis+Maven,功能特點是通過配置model注解的方式來創(chuàng)建表,修改表結(jié)構(gòu),目前僅支持Mysql,因為重點是突出mybatis自動創(chuàng)表的功能,所以在框架上沒有話太多心思。
使用規(guī)范:
核心代碼都在model-store-repo中
1.SysMysqlColumns.java這個對象里面配置的是mysql的數(shù)據(jù)類型,這里配置的類型越多,意味著創(chuàng)建表時能使用的類型越多
2.LengthCount.java是一個自定義的注解,用于標(biāo)記在SysMysqlColumns.java里面配置的數(shù)據(jù)類型上的,標(biāo)記該類型需要設(shè)置幾個長度,如datetime/varchar(1)/decimal(5,2),分別是需要設(shè)置0個1個2個
3.Column.java也是一個自定義的注解,用于標(biāo)記model中的字段上,作為創(chuàng)建表的依據(jù)如不標(biāo)記,不會被掃描到,有幾個屬性用來設(shè)置字段名、字段類型、長度等屬性的設(shè)置,詳細(xì)請看代碼上的注釋
4.Table.java也是一個自定義的注解,用于標(biāo)記在model對象上,有一個屬性name,用于設(shè)置該model生成表后的表名,如不設(shè)置該注解,則該model不會被掃描到
ok,系統(tǒng)啟動后會去自動調(diào)用SysMysqlCreateTableManagerImpl.java的createMysqlTable()方法,沒錯,這就是核心方法了,負(fù)責(zé)創(chuàng)建、刪除、修改表。
model-store-frontend/resources/config/autoCreateTable.properties
你會發(fā)現(xiàn)有這樣一個配置文件,其中有兩項配置
1.mybatis.table.auto=update
2.mybatis.model.pack=com.sunchenbin.store.model
本系統(tǒng)提供兩種模式:
1.當(dāng)mybatis.table.auto=create時,系統(tǒng)啟動后,會將所有的表刪除掉,然后根據(jù)model中配置的結(jié)構(gòu)重新建表,該操作會破壞原有數(shù)據(jù)。
2.當(dāng)mybatis.table.auto=update時,系統(tǒng)會自動判斷哪些表是新建的,哪些字段要修改類型等,哪些字段要刪除,哪些字段要新增,該操作不會破壞原有數(shù)據(jù)。
3.mybatis.model.pack這個配置是用來配置要掃描的用于創(chuàng)建表的對象的包名
系統(tǒng)配置的是使用maven來啟動的,web依賴repo,frontend和mobile依賴web,所以要運行frontend和mobile,必須先instal一下web和repo
至于如何用maven啟動項目….不再多說了。
以上所述是小編給大家介紹的Mybatis自動創(chuàng)建表和更新表結(jié)構(gòu)的全部敘述,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!