Spring Boot ile H2 In-Memory DB Kullanımı
Java geliştiricileri için günümüzde en popüler Framework’lerden biri olan Spring Boot, hızlı ve etkili bir şekilde uygulama geliştirmeyi sağlar.
Biz de bu makalede, Spring Boot’un sunduğu avantajları kullanarak in-memory veritabanı H2 ile nasıl entegre edileceğini küçük bir rest api örneği ile inceleyeceğiz.
Kısaca H2 DB
In-memory veritabanı ihtiyacını karşılama için Java ile geliştirilmiş, açık kaynak kodlu, Sql tabanlı ilişkisel veritabanıdır. Küçük boyutu, yüksek performansı ve kolay entegrasyonu ile bilinir. In-memory veritabanları, özellikle eğitim, test ve case çalışmalarında kullanmak için idealdir.
1. Proje Oluşturma
Spring Boot projemizi oluşturmak için Spring Initializr kullanabiliriz. Maven ya da Gradle proje yönetim araçlarını seçerek (bu örnekte maeven) , proje bağımlılıklarına Spring Web ve H2 Database ekleyelim.
2. Veritabanı Yapılandırma
Projemizi oluşturduktan sonra application.properties
dosyasında H2 veritabanını yapılandırmamız gerekmektedir.
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.path=/h2-console
DB yapılandırırken eğer uygulama yeniden başlatıldığında verilerin kaybolmasını istemiyorsak;
spring.datasource.url=jdbc:h2:file:D:/h2/test
url kısmına bu şekilde istediğimiz bir dosya yolunu verebiliriz.
3. Entity Sınıflarını Oluşturma
Veritabanında tablolara karşılık gelen entity sınıflarını oluşturalım. Örneğin, bir User
entity sınıfı:
@Entity
@Data
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String surname;
private Integer age;
}
4. Controller, Service ve Repository Katmanları
Entity sınıflarını kullanarak iş mantığı operasyonlarını gerçekleştirecek servis, API’ları sağlayacak controller ve veritabanı işlemlerini sağlayacak repository sınıflarını oluşturalım.
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/users")
public class UserController {
private final UserService userService;
private final ModelMapper modelMapper;
@GetMapping("/id/{id}")
ResponseEntity<UserDto> getUser(@PathVariable Long id) {
User user = userService.getUserById(id);
return ResponseEntity.ok(modelMapper.map(user, UserDto.class));
}
}
public interface UserService {
User getUserById(Long id);
}
@RequiredArgsConstructor
@Service
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
@Override
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new NotFoundException(id, User.class.getSimpleName()));
}
}
public interface UserRepository extends JpaRepository<User,Long> {
}
Uygulamayı Çalıştırma
Uygulamamızı çalıştırıp http://localhost:8080/h2-console url adresinden db console’a erişebiliriz.
application.properties dosyasında yazdığımız jdbc url bilgisi ile buradan db ekranına giriş yapıyoruz. Karşımıza aşağıdaki gibi db bilgileri ve console ekranı çıkıyor
Console üzerinden DB sorgularımız ile istediğimiz işlemleri yapabiliriz. Api sonuçlarını da bu şekilde görebiliriz.
Url: http://localhost:8080/api/users/id/1
{"name":"Adem","surname":"Demir","age":25}
Sonuç
Spring Boot ve H2 kullanarak in-memory veritabanı entegrasyonu, hızlı prototip oluşturmak, testler yazmak ve küçük çaplı uygulamalar geliştirmek için güçlü bir çözümdür. Bu makalede bahsedilen adımları takip ederek, bu teknolojileri etkili bir şekilde kullanabilirsiniz.
Bu sadece temel bir örnektir ve projenizin gereksinimlerine göre yapılandırma değişiklikleri yapabilirsiniz.
İçerik umarım faydalı olmuştur. Hoşça kalın.