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