MyBatis — очень хорошая структура базы данных, более гибкая, чем Hibernate. Для небольшого приложения у MyBatis есть очень болезненная проблема, то есть оно не может автоматически создавать и обновлять таблицы данных.
Автоматически создавать таблицы с помощью Hibernate
Сегодня мы обсудим схему автоматического создания таблиц, которая заключается в том, чтобы ввести Hibernate и использовать Hibernate только для автоматического создания атрибутов таблицы.
- импортировать зависимости
compile("org.springframework.boot:spring-boot-starter-data-jpa")
- Исправлять
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.
- Добавьте аннотации к классу 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
}
- Стартовый проект
После запуска проекта проверьте базу данных с помощью инструмента базы данных, и вы обнаружите, что пользовательская таблица создается автоматически.
#日志
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, мы обнаружим, что размер пакета составляет 10 МБ, а скорость запуска также замедлена, что не очень хорошо! Или мы можем сделать некоторые оптимизации, такие как использование Hibernate только в среде модульного тестирования, выполнение модульного теста каждый раз при изменении класса компонента и автоматическое обновление таблицы.
- Изменить конфигурацию зависимости
Измените приведенный выше компилятор на 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'
- Написать код модульного теста
@RunWith(SpringRunner::class)
@SpringBootTest
class JpaTest {
@Test
fun test() {
}
}
Запустите модульные тесты, duangduang! ! ! Нужная нам пользовательская таблица создана
#日志
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. Если вы не хотите, чтобы пакет стал больше, подключитесь к удаленной базе данных локально и обновите ее в среде модульного тестирования.