美文网首页Spring-BootSpring BootJava后端
Spring Boot:MyBatis项目通过JPA实现自动创建

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

作者: ImWiki | 来源:发表于2018-06-04 02:48 被阅读95次

    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。如果不想包变大,就在本地连接远程数据库在单元测试环境下更新。

    相关文章

      网友评论

        本文标题:Spring Boot:MyBatis项目通过JPA实现自动创建

        本文链接:https://www.haomeiwen.com/subject/gmzssftx.html