Результат отображения пользовательского запроса JdbcTemplate в объекте - PullRequest
0 голосов
/ 03 мая 2020

Я новичок в java и пытаюсь использовать Spring Framework. У меня вопрос. Например, у меня есть таблица:

  1. сотрудник (id_employee, имя)
  2. employee_product (id_employee_product, id_employee, product_name)

, если я выберу сотрудника Данные из моей таблицы Employee, я могу сопоставить их в модели пользователя POJO и определить структуру таблиц в этой модели, например:

public class Employee {
    private final int id_employee;
    private final String nama;

    public Employee(int id_employee, String nama){
        this.id_employee = id_employee;
        this.nama = nama;
    }

    public int getId() {
        return id_employee;
    }

    public String getNama() {
        return nama;
    }
}

И это карта из jdbcTemplate:

final String sql = "SELECT id_employee, nama FROM employee";
return jdbcTemplate.query(sql, (resultSet, i) -> {
    return new Employee(
            resultSet.getInt("id_employee"),
            resultSet.getString("nama")
    );
});

Это наглядный пример выбора данных из 1 таблицы.

Мой вопрос: как сопоставить данные из запроса, если мои данные - это пользовательский запрос? Таким образом, мы используем соединение и выбираем настраиваемое поле из этих таблиц. Нужно ли создавать POJO для каждого запроса?

Иногда мне нужно выбрать только поле employee.id_employee и employee.name из таблицы моего сотрудника.

А в другом контроллере мне нужно выбрать employee.id_employee из моей таблицы employee.

В другом случае мне нужно только выбрать employee.name и employee_product.product_name

Есть ли альтернатива для сопоставления данных без создания POJO для каждого случая?

1 Ответ

2 голосов
/ 04 мая 2020

Создайте один POJO, объединяющий две таблицы, подобные этой

public class Employee {
    private int id_employee;
    private String name;
    private int id_employee_product.
    private String product_name

    //getter and setters  
    //Don't create a constructor its Entiry
}

Теперь, используя BeanPropertyRowMapper Do c Ссылка , напишите свой репозиторий как

public List<Employee> fetchEmployeeProduct(){
    JdbcTemplate jdbcTemplate = new JdbcTemplate("Your_DataSource");
    StringBuilder query = new StringBuilder();
    query.append("Your Query");
    List<Employee> employeeProductList = 
        jdbcTemplate.query(query.toString(), new BeanPropertyRowMapper<Employee>(Employee.class));
}

Убедитесь, что предложение SELECT в запросе и Employee имя файла POJO совпадают.

Один раз, если вы выполните запрос, он автоматически отобразится в POJO. Вам не нужно писать собственный маппер BeanPropertyRowMapper позаботится о маппинге.

...