#1
This guide shows how to perform CRUD operations with ClickHouse using Spring Boot and Spring Data JDBC.

1. Add Dependencies

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>com.clickhouse</groupId>
  <artifactId>clickhouse-jdbc</artifactId>
  <version>0.6.2</version>
</dependency>

2. Configure ClickHouse

spring.datasource.url=jdbc:clickhouse://localhost:8123/default
spring.datasource.driver-class-name=com.clickhouse.jdbc.ClickHouseDriver
spring.datasource.username=default
spring.datasource.password=
spring.sql.init.mode=always

3. Create Table

ClickHouse does not auto-generate schemas, so create manually:
CREATE TABLE users (
  id UInt32,
  name String,
  age UInt8
) ENGINE = MergeTree()
ORDER BY id;

4. Define Entity

@Table("users")
public class User {
  @Id
  private Long id;
  private String name;
  private int age;
}

5. Repository

public interface UserRepository extends CrudRepository<User, Long> {}

6. Service Layer

@Service
public class UserService {
  private final UserRepository repo;

  public UserService(UserRepository repo) {
    this.repo = repo;
  }

  public User save(User user) { return repo.save(user); }
  public Iterable<User> findAll() { return repo.findAll(); }
  public Optional<User> findById(Long id) { return repo.findById(id); }
  public void delete(Long id) { repo.deleteById(id); }
}

7. REST Controller

@RestController
@RequestMapping("/users")
public class UserController {
  private final UserService service;

  public UserController(UserService service) {
    this.service = service;
  }

  @PostMapping
  public User create(@RequestBody User user) {
    return service.save(user);
  }

  @GetMapping
  public Iterable<User> all() {
    return service.findAll();
  }

  @GetMapping("/{id}")
  public Optional<User> get(@PathVariable Long id) {
    return service.findById(id);
  }

  @DeleteMapping("/{id}")
  public void delete(@PathVariable Long id) {
    service.delete(id);
  }
}

Test

  • POST /users → create new user
  • GET /users → list all users
  • GET /users/{id} → fetch user by id
  • DELETE /users/{id} → remove user

image quote pre code