Boot Musim Semi Dengan SQLite

1. Ikhtisar

Dalam tutorial singkat ini, kita akan membahas langkah-langkah untuk menggunakan database SQLite dalam aplikasi Spring Boot yang mendukung JPA.

Spring Boot mendukung beberapa database dalam memori yang terkenal di luar kotak, tetapi SQLite membutuhkan lebih banyak dari kami.

Mari kita lihat apa saja yang diperlukan.

2. Pengaturan Proyek

Untuk ilustrasi kami, kami akan mulai dengan aplikasi Spring Data Rest yang telah kami gunakan di tutorial sebelumnya.

Di pom, kita perlu menambahkan dependensi sqllite-jdbc :

 org.xerial sqlite-jdbc 3.25.2 

Ketergantungan ini memberi kita apa yang kita butuhkan untuk menggunakan JDBC untuk berkomunikasi dengan SQLite. Tetapi, jika kita akan menggunakan ORM, itu tidak cukup.

3. Dialek SQLite

Lihat, Hibernate tidak dikirimkan dengan Dialek untuk SQLite . Kita perlu membuatnya sendiri.

3.1. Memperluas Dialek

Langkah pertama kita adalah memperluas kelas org.hibernate.dialect.Dialect untuk mendaftarkan tipe data yang disediakan oleh SQLite:

public class SQLiteDialect extends Dialect { public SQLiteDialect() { registerColumnType(Types.BIT, "integer"); registerColumnType(Types.TINYINT, "tinyint"); registerColumnType(Types.SMALLINT, "smallint"); registerColumnType(Types.INTEGER, "integer"); // other data types } }

Ada beberapa, jadi periksa kode sampel untuk selebihnya.

Selanjutnya, kita perlu mengganti beberapa perilaku Dialek default .

3.2. Dukungan Kolom Identitas

Misalnya, kita perlu memberi tahu Hibernate bagaimana SQLite menangani kolom @Id , yang dapat kita lakukan dengan implementasi IdentityColumnSupport kustom :

public class SQLiteIdentityColumnSupport extends IdentityColumnSupportImpl { @Override public boolean supportsIdentityColumns() { return true; } @Override public String getIdentitySelectString(String table, String column, int type) throws MappingException { return "select last_insert_rowid()"; } @Override public String getIdentityColumnString(int type) throws MappingException { return "integer"; } }

Untuk mempermudah di sini, mari pertahankan tipe kolom identitas menjadi Integer saja. Dan untuk mendapatkan nilai identitas berikutnya yang tersedia, kami akan menentukan mekanisme yang sesuai.

Kemudian, kami cukup mengganti metode yang sesuai di kelas SQLiteDialect kami yang sedang berkembang :

@Override public IdentityColumnSupport getIdentityColumnSupport() { return new SQLiteIdentityColumnSupport(); }

3.3. Nonaktifkan Penanganan Kendala

Dan, SQLite tidak memiliki dukungan untuk batasan database, jadi kita perlu menonaktifkannya dengan mengganti metode yang sesuai untuk kunci utama dan asing:

@Override public boolean hasAlterTable() { return false; } @Override public boolean dropConstraints() { return false; } @Override public String getDropForeignKeyString() { return ""; } @Override public String getAddForeignKeyConstraintString(String cn, String[] fk, String t, String[] pk, boolean rpk) { return ""; } @Override public String getAddPrimaryKeyConstraintString(String constraintName) { return ""; }

Dan, sebentar lagi, kami akan dapat merujuk dialek baru ini di konfigurasi Spring Boot kami.

4. Konfigurasi DataSource

Selain itu, karena Spring Boot tidak menyediakan dukungan konfigurasi untuk database SQLite , kami juga perlu mengekspos kacang DataSource kami sendiri :

@Autowired Environment env; @Bean public DataSource dataSource() { final DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(env.getProperty("driverClassName")); dataSource.setUrl(env.getProperty("url")); dataSource.setUsername(env.getProperty("user")); dataSource.setPassword(env.getProperty("password")); return dataSource; }

Dan terakhir, kami akan mengonfigurasi properti berikut di file persistence.properties kami :

driverClassName=org.sqlite.JDBC url=jdbc:sqlite:memory:myDb?cache=shared username=sa password=sa hibernate.dialect=com.baeldung.dialect.SQLiteDialect hibernate.hbm2ddl.auto=create-drop hibernate.show_sql=true

Perhatikan bahwa kita perlu menyimpan cache seperti yang dibagikan agar pembaruan database tetap terlihat di beberapa koneksi database.

Jadi, dengan konfigurasi di atas, aplikasi akan mulai dan akan meluncurkan database dalam memori yang disebut myDb , yang dapat digunakan oleh konfigurasi Spring Data Rest.

5. Kesimpulan

Dalam artikel ini, kami mengambil contoh aplikasi Spring Data Rest dan mengarahkannya ke database SQLite. Namun, untuk melakukannya, kami harus membuat dialek Hibernate ubahsuaian.

Pastikan untuk memeriksa aplikasinya di Github. Jalankan saja dengan mvn -Dspring.profiles.active = sqlite spring-boot: run dan telusuri ke // localhost: 8080 .