Configuração e Integração do SQLite com Spring Boot e Spring Data JPA

O SQLite é um motor de banco de dados relacional compacto, amplamente reconhecido por sua arquitetura serverless e conformidade com ACID. Diferente de sistemas tradicionais como MySQL ou PostgreSQL, o SQLite é encapsulado em uma biblioteca C e armazena os dados em um único arquivo local, o que o torna ideal para aplicações embarcadsa, prototipagem rápida e softwares que demandam baixo consumo de recursos de hardware.

Dependências Necessárias

Para habilitar o suporte ao SQLite em um projeto Spring Boot moderno (utilizando Hibenrate 6+), é necessário incluir o driver JDBC específico e o módulo de dialetos da comunidade do Hibernate, além do starter básico do Spring Data JPA.

<!-- Driver JDBC para SQLite -->
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
</dependency>

<!-- Dialeto SQLite para Hibernate 6+ -->
<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-community-dialects</artifactId>
</dependency>

<!-- Spring Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

Configuração do Application YAML

A configuração abaixo define o caminho do arquivo de banco de dados e instrui o Hibernate a utilizar o dialeto correto para gerar as consultas SQL compatíveis com a sintaxe do SQLite.

app:
  db-name: storage.db

spring:
  datasource:
    url: jdbc:sqlite:${app.db-name}
    driver-class-name: org.sqlite.JDBC
  jpa:
    database-platform: org.hibernate.community.dialect.SQLiteDialect
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate:
        format_sql: true

Definição da Camada de Modelo (Entity)

Abaixo, apresentamos uma implementação de entidade JPA. Neste exemplo, simulamos um sistema de gerenciamento de dispositivos de rede.

@Entity
@Table(name = "tb_dispositivo")
public class Dispositivo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String numeroSerie;

    private String modelo;

    private String enderecoIp;

    private String usuarioAcesso;

    private String senhaAcesso;

    private Integer statusOperacional;

    // Getters e Setters
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getNumeroSerie() { return numeroSerie; }
    public void setNumeroSerie(String numeroSerie) { this.numeroSerie = numeroSerie; }

    public String getModelo() { return modelo; }
    public void setModelo(String modelo) { this.modelo = modelo; }

    public String getEnderecoIp() { return enderecoIp; }
    public void setEnderecoIp(String enderecoIp) { this.enderecoIp = enderecoIp; }

    public String getUsuarioAcesso() { return usuarioAcesso; }
    public void setUsuarioAcesso(String usuarioAcesso) { this.usuarioAcesso = usuarioAcesso; }

    public String getSenhaAcesso() { return senhaAcesso; }
    public void setSenhaAcesso(String senhaAcesso) { this.senhaAcesso = senhaAcesso; }

    public Integer getStatusOperacional() { return statusOperacional; }
    public void setStatusOperacional(Integer statusOperacional) { this.statusOperacional = statusOperacional; }
}

Camada de Acesso a Dados (Repository)

A interface de repositório estende JpaRepository, permitindo operações de CRUD padrão e a definição de consultas customizadas através de convenções de nomenclatura.

@Repository
public interface DispositivoRepository extends JpaRepository<Dispositivo, Long> {

    /**
     * Busca um dispositivo específico através do seu número de série.
     * @param numeroSerie Identificador único do hardware
     * @return Optional contendo o dispositivo se encontrado
     */
    Optional<Dispositivo> findByNumeroSerie(String numeroSerie);

    /**
     * Lista dispositivos filtrando pelo status de operação.
     */
    List<Dispositivo> findByStatusOperacional(Integer status);
}

Ao iniciar a aplicação, o Hibernate verificará a existência do arquivo definido na URL de conexão. Caso o arquivo não exista, ele será criado automaticamente, e as tabelas serão geradas com base nas anotações das entidades, graças à propriedade ddl-auto: update.

Tags: SpringBoot sqlite java hibernate SpringDataJPA

Publicado em 8-30 07:22