Эффективные операции CRUD в Spring Boot JDBC без класса сущностей

Spring Boot — это мощная платформа, упрощающая разработку Java-приложений, в том числе требующих взаимодействия с базами данных. В этой статье мы рассмотрим, как выполнять операции CRUD (создание, чтение, обновление, удаление) в Spring Boot с использованием JDBC без необходимости использования класса сущности. Этот подход может быть полезен при работе с устаревшими базами данных или в сценариях, где сопоставление таблиц базы данных с объектами Java нежелательно или невозможно.

Предварительные требования.
Прежде чем углубляться в примеры кода, убедитесь, что у вас есть следующие предварительные условия:

  • Базовые знания Spring Boot и JDBC.
  • Рабочий проект Spring Boot с конфигурацией базы данных.

Метод 1: использование JdbcTemplate
Класс JdbcTemplate, предоставляемый Spring JDBC, предлагает удобный способ взаимодействия с базой данных без необходимости использования класса сущности. Вот пример кода:

@Autowired
private JdbcTemplate jdbcTemplate;
public void create(String name, int age) {
    String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
    jdbcTemplate.update(sql, name, age);
}
public List<Map<String, Object>> readAll() {
    String sql = "SELECT * FROM users";
    return jdbcTemplate.queryForList(sql);
}
public void update(int id, String name, int age) {
    String sql = "UPDATE users SET name = ?, age = ? WHERE id = ?";
    jdbcTemplate.update(sql, name, age, id);
}
public void delete(int id) {
    String sql = "DELETE FROM users WHERE id = ?";
    jdbcTemplate.update(sql, id);
}

Метод 2: использование NamedParameterJdbcTemplate
Класс NamedParameterJdbcTemplate позволяет нам использовать именованные параметры вместо традиционных заполнителей «?». Это может сделать код более читабельным и удобным в сопровождении. Вот пример:

@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void create(String name, int age) {
    String sql = "INSERT INTO users (name, age) VALUES (:name, :age)";
    Map<String, Object> params = new HashMap<>();
    params.put("name", name);
    params.put("age", age);
    namedParameterJdbcTemplate.update(sql, params);
}
// Implement readAll(), update(), and delete() methods similar to Method 1 using named parameters

Метод 3: использование SimpleJdbcInsert и SimpleJdbcCall
Классы SimpleJdbcInsert и SimpleJdbcCall, предоставляемые Spring JDBC, могут упростить процесс вставки и вызова хранимых процедур без необходимости использования класса сущности. Вот пример:

@Autowired
private JdbcTemplate jdbcTemplate;
private SimpleJdbcInsert insertUser;
private SimpleJdbcCall callProcedure;
@PostConstruct
public void init() {
    insertUser = new SimpleJdbcInsert(jdbcTemplate)
            .withTableName("users")
            .usingGeneratedKeyColumns("id");
    callProcedure = new SimpleJdbcCall(jdbcTemplate)
            .withProcedureName("my_procedure");
}
public void create(String name, int age) {
    Map<String, Object> params = new HashMap<>();
    params.put("name", name);
    params.put("age", age);
    insertUser.execute(params);
}
public void callStoredProc() {
    Map<String, Object> inParams = new HashMap<>();
    inParams.put("param1", value1);
    inParams.put("param2", value2);
    Map<String, Object> result = callProcedure.execute(inParams);
    // Process the result as needed
}
// Implement readAll(), update(), and delete() methods using SimpleJdbcInsert and SimpleJdbcCall

В этой статье мы рассмотрели различные методы выполнения операций CRUD в Spring Boot с использованием JDBC без необходимости использования класса сущности. Мы рассмотрели использование JdbcTemplate, NamedParameterJdbcTemplate и SimpleJdbcInsert/SimpleJdbcCall. Эти подходы обеспечивают гибкость, особенно при работе с устаревшими базами данных или сценариями, где сопоставление таблиц базы данных с объектами Java нежелательно. Используя эти методы, вы можете эффективно взаимодействовать с базами данных в своих приложениях Spring Boot.