This guide shows how to build
reporting APIs with
Spring Boot and
SAP HANA Express to fetch aggregated and summarized data.
1. Create Sales Table in HANA
CREATE COLUMN TABLE SALES (
ID INTEGER PRIMARY KEY,
PRODUCT NVARCHAR(100),
AMOUNT DECIMAL(10,2),
REGION NVARCHAR(50),
SALE_DATE TIMESTAMP
);
Insert some data for testing:
INSERT INTO SALES VALUES (1, 'Laptop', 1200, 'US', CURRENT_TIMESTAMP);
INSERT INTO SALES VALUES (2, 'Phone', 800, 'EU', CURRENT_TIMESTAMP);
2. Configure Spring Boot
application.properties:
spring.datasource.url=jdbc:sap://localhost:39015/?databaseName=HXE
spring.datasource.username=SYSTEM
spring.datasource.password=YourPassword
spring.datasource.driver-class-name=com.sap.db.jdbc.Driver
3. Repository for Reporting Queries
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Repository
public class ReportingRepository {
private final JdbcTemplate jdbc;
public ReportingRepository(JdbcTemplate jdbc) {
this.jdbc = jdbc;
}
public List<Map<String, Object>> salesByRegion() {
String sql = "SELECT REGION, SUM(AMOUNT) AS TOTAL FROM SALES GROUP BY REGION";
return jdbc.queryForList(sql);
}
public List<Map<String, Object>> salesByProduct() {
String sql = "SELECT PRODUCT, SUM(AMOUNT) AS TOTAL FROM SALES GROUP BY PRODUCT";
return jdbc.queryForList(sql);
}
}
4. Expose REST API
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/reports")
public class ReportingController {
private final ReportingRepository repo;
public ReportingController(ReportingRepository repo) {
this.repo = repo;
}
@GetMapping("/region")
public List<Map<String, Object>> salesByRegion() {
return repo.salesByRegion();
}
@GetMapping("/product")
public List<Map<String, Object>> salesByProduct() {
return repo.salesByProduct();
}
}
5. Run and Test
Run Spring Boot app:
mvn spring-boot:run
Call APIs:
GET /reports/region → [{ "REGION": "US", "TOTAL": 1200 }, { "REGION": "EU", "TOTAL": 800 }]
GET /reports/product → [{ "PRODUCT": "Laptop", "TOTAL": 1200 }, { "PRODUCT": "Phone", "TOTAL": 800 }]
image quote pre code