Spring Boot:MyBatis項目通過JPA實現(xiàn)自動創(chuàng)建數(shù)據(jù)表

MyBatis是一個非常好的數(shù)據(jù)庫框架,相比Hibernate更加靈活。對于一個小型的應用來說,MyBatis有一個非常痛苦的問題,就是無法自動創(chuàng)建數(shù)據(jù)表和更新數(shù)據(jù)表。

結合Hibernate實現(xiàn)自動創(chuàng)建表

今天來探討一種自動創(chuàng)建表的方案,就是引入Hibernate,僅僅使用Hibernate自動創(chuàng)建表的屬性。

  1. 引入依賴
compile("org.springframework.boot:spring-boot-starter-data-jpa")
  1. 修改resources/application.properties配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

其中spring.jpa.hibernate.naming.physical-strategy是為了修改生成的表和屬性的命名策略,默認是自動轉成小寫和下劃線形式,versionCode就變成了version_code,其實這種命名策略是比較好的。但是有時候我們可能更加希望屬性名稱和數(shù)據(jù)庫名稱統(tǒng)一,所以增加這個配置后生成的表和屬性就和Java類一致。

  1. 對Bean類增加注解
@Entity
class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(unique = true, nullable = false)
    var id: Int? = null

    @Column(length = 32)
    var name: String? = null

    @Column(length = 32, unique = true, nullable = true)
    private var username: String? = null
    @Column(length = 32)
    private var password: String? = null

    @Temporal(TemporalType.TIMESTAMP)
    var created: Date? = null
}
  1. 啟動項目
    啟動項目后,通過數(shù)據(jù)庫工具查看數(shù)據(jù)庫,就會發(fā)現(xiàn)自動創(chuàng)建了user表,就是這么簡單。
#日志
Hibernate: create table user (id integer not null auto_increment, created datetime, name varchar(32), password varchar(32), username varchar(32), primary key (id)) engine=MyISAM
Hibernate: alter table user drop index UK_7vaiuu0nyrnryow6o08dk6o6t
Hibernate: alter table user add constraint UK_7vaiuu0nyrnryow6o08dk6o6t unique (username)
image.png

改進

當我們引入Hibernate,打包成Jar就會發(fā)現(xiàn),包足足大了10MB,啟動速度也變慢了,感覺不是很好!或者我們可以進行一些優(yōu)化,比如只在單元測試環(huán)境才使用Hibernate,每次修改bean類的時候就執(zhí)行一遍單元測試,自動更新表。

  1. 修改依賴配置
    把上面的compile改成testCompile,由于bean類用到注解代碼,對于的注解包還是必須引入,這部分的代碼量很少,對大小不會產(chǎn)生影響。
testCompile("org.springframework.boot:spring-boot-starter-data-jpa")
compile 'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final'
  1. 編寫單元測試代碼
@RunWith(SpringRunner::class)
@SpringBootTest
class JpaTest {
    @Test
    fun test() {

    }
}

運行單元測試,duangduang?。。∥覀円膗ser表創(chuàng)建了

#日志
Hibernate: create table user (id integer not null auto_increment, created datetime, name varchar(32), password varchar(32), username varchar(32), primary key (id)) engine=MyISAM
Hibernate: alter table user drop index UK_7vaiuu0nyrnryow6o08dk6o6t
Hibernate: alter table user add constraint UK_7vaiuu0nyrnryow6o08dk6o6t unique (username)

總結

如果需要更新遠程服務器的數(shù)據(jù)庫,可以考慮直接依賴Hibernate。如果不想包變大,就在本地連接遠程數(shù)據(jù)庫在單元測試環(huán)境下更新。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,288評論 6 342
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎的功能是IoC(控制反轉)容器,...
    simoscode閱讀 6,863評論 2 22
  • 1、談談你對Struts的理解。 答: 1.struts是一個按MVC模式設計的Web層框架,其實它就是一個大大的...
    慕容小偉閱讀 2,975評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 侄子上幼兒園時穿的衣服,未滿周歲的兒子湊合穿著,簡書的第一篇果然又是關于孩子的,當前讓我心歡喜的事情莫過這個小不點...
    祝小姐的樹洞閱讀 247評論 0 1

友情鏈接更多精彩內容