Vårstøvel med SQLite

1. Oversikt

I denne raske opplæringen vil vi gå gjennom trinn for å bruke en SQLite-database i et JPA-aktivert Spring Boot-program.

Spring Boot støtter noen kjente databaser i minnet, men SQLite krever litt mer av oss.

La oss ta en titt på hva som skal til.

2. Prosjektoppsett

For illustrasjonen vår, vi begynner med en Spring Data Rest-app vi har brukt i tidligere veiledninger.

I pom, må vi legge til sqllite-jdbc avhengighet:

 org.xerial sqlite-jdbc 3.25.2 

Denne avhengigheten gir oss det vi trenger for å bruke JDBC for å kommunisere med SQLite. Men, hvis vi skal bruke en ORM, er det ikke nok.

3. SQLite Dialect

Se, Dvalemodus leveres ikke med en Dialekt for SQLite. Vi må lage en selv.

3.1. Forlenger Dialekt

Vårt første skritt er å utvide org.hibernate.dialect.Dialect klasse for å registrere datatypene levert av SQLite:

offentlig klasse SQLiteDialect utvider Dialect {public SQLiteDialect () {registerColumnType (Types.BIT, "integer"); registerColumnType (Types.TINYINT, "tinyint"); registerColumnType (Types.SMALLINT, "smallint"); registerColumnType (Types.INTEGER, "heltall"); // andre datatyper}}

Det er flere, så sjekk ut eksempelkoden for resten.

Deretter må vi overstyre noe standard Dialekt atferd.

3.2. Identity Column Support

For eksempel, vi trenger å fortelle dvalemodus hvordan SQLite håndterer @Id kolonner, som vi kan gjøre med en skikk IdentityColumnSupport gjennomføring:

offentlig klasse SQLiteIdentityColumnSupport utvider IdentityColumnSupportImpl {@ Override public boolean supportsIdentityColumns () {return true; } @ Override public String getIdentitySelectString (Strengtabell, Stringkolonne, int-type) kaster MappingException {return "select last_insert_rowid ()"; } @ Override public String getIdentityColumnString (int type) kaster MappingException {return "heltall"; }}

For å holde ting enkelt her, la oss holde identitetskolonnetypen til Heltall kun. Og for å få neste tilgjengelige identitetsverdi, spesifiserer vi riktig mekanisme.

Deretter overstyrer vi ganske enkelt den tilsvarende metoden i vår vekst SQLiteDialect klasse:

@ Override public IdentityColumnSupport getIdentityColumnSupport () {returner ny SQLiteIdentityColumnSupport (); }

3.3. Deaktiver håndtering av begrensninger

Og, SQLite har ikke støtte for databasebegrensningene, så vi må deaktivere dem ved å overstyre de riktige metodene for både primære og utenlandske nøkler:

@Override offentlig boolsk hasAlterTable () {return false; } @ Override offentlige boolske 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 ""; }

Og om et øyeblikk vil vi kunne referere til denne nye dialekten i vår Boot Boot-konfigurasjon.

4. Datakilde Konfigurasjon

Også siden Vårstøvel gir ikke konfigurasjonsstøtte for SQLite-database utenom boksen, vi må også avsløre våre egne Datakilde bønne:

@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 ("bruker")); dataSource.setPassword (env.getProperty ("passord")); returner datakilde; }

Og til slutt konfigurerer vi følgende egenskaper i vår utholdenhet. eiendommer fil:

driverClassName = org.sqlite.JDBC url = jdbc: sqlite: minne: myDb? cache = delt brukernavn = sa passord = sa hibernate.dialect = com.baeldung.dialect.SQLiteDialect hibernate.hbm2ddl.auto = create-drop hibernate.show_sql = ekte

Merk at vi må beholde hurtigbufferen som delt for å holde databaseoppdateringene synlige på tvers av flere databaseforbindelser.

Så, med de ovennevnte konfigurasjonene, starter appen og starter en minnedatabase kalt myDb, som den gjenværende konfigurasjonen for vårdatarest kan ta opp.

5. Konklusjon

I denne artikkelen tok vi et eksempel på Spring Data Rest-applikasjon og pekte det på en SQLite-database. For å gjøre det måtte vi imidlertid lage en tilpasset dvalemodus.

Sørg for å sjekke ut applikasjonen på Github. Bare løp med mvn -Dspring.profiles.active = sqlite spring-boot: run og bla til // lokal vert: 8080.


$config[zx-auto] not found$config[zx-overlay] not found