Spring Boot:MyBatis项目通过JPA实现自动创建数据表

阅读 1028
收藏 24
2018-06-04
原文链接:www.jianshu.com

MyBatis是一个非常好的数据库框架,相比Hibernate更加灵活。对于一个小型的应用来说,MyBatis有一个非常痛苦的问题,就是无法自动创建数据表和更新数据表。

结合Hibernate实现自动创建表

今天来探讨一种自动创建表的方案,就是引入Hibernate,仅仅使用Hibernate自动创建表的属性。

  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,其实这种命名策略是比较好的。但是有时候我们可能更加希望属性名称和数据库名称统一,所以增加这个配置后生成的表和属性就和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. 启动项目
    启动项目后,通过数据库工具查看数据库,就会发现自动创建了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就会发现,包足足大了10MB,启动速度也变慢了,感觉不是很好!或者我们可以进行一些优化,比如只在单元测试环境才使用Hibernate,每次修改bean类的时候就执行一遍单元测试,自动更新表。

  1. 修改依赖配置
    把上面的compile改成testCompile,由于bean类用到注解代码,对于的注解包还是必须引入,这部分的代码量很少,对大小不会产生影响。
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!!!我们要的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)

总结

如果需要更新远程服务器的数据库,可以考虑直接依赖Hibernate。如果不想包变大,就在本地连接远程数据库在单元测试环境下更新。

评论