Использование Angular 2 & Spring Boot & PL / SQL без JPA - PullRequest
0 голосов
/ 04 марта 2020

Добрый день, я бэкэнд-разработчик и в настоящее время изучаю Angular для фронтэнда. В моей работе нам приходится работать с огромным количеством данных. К сожалению, в JPA использование Oracle PL / SQL затруднительно (процедуры, функции). По этой причине я не должен использовать JPA для работы с огромным количеством данных в базе данных. Вместо JPA я использую чистый JDB C (используя Connection, PrepareStatement и ResultSet для вызова Oracle процедур). Однако у меня возникают трудности с операциями «Обновление, удаление» на Angular, когда я использую Rest API с чистыми JDB C и Angular.

Там есть некоторый код рабочих операций (Create, Read) :

 @PostMapping("/employees") // create operation
 @ResponseBody
 public String insertEmployee(@RequestBody Employee employee) {
   JsonObject json = new JsonObject();
   Connection conn = null;
   CallableStatement cs = null;
   try {
     String firstName = employee.getFirstName();
     String lastName = employee.getLastName();
     String emailId = employee.getEmailId();
     conn = hds.getConnection();
     cs = conn.prepareCall("{CALL NERS.EMPLOYEE_INSERT_P(?, ?, ?)}"); // calling procedure from Oracle
     cs.setString(1, firstName);
     cs.setString(2, lastName);
     cs.setString(3, emailId);
     cs.executeUpdate();
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     DataBase.close(cs);
     DataBase.close(conn);
   }
   return json.toString();
 }

@GetMapping("/employees") // read operation
 public ArrayList<Employee> getEmployee(Model model) {
   ArrayList<Employee> employees = new ArrayList<>();
   Connection conn = null;
   PreparedStatement ps = null;
   ResultSet rs = null;
   try {
     conn = hds.getConnection();
     ps = conn.prepareStatement("SELECT * FROM NERS.EMPLOYEE"); // selecting data from Oracle
     ps.execute();
     rs = ps.getResultSet();
     while (rs.next()) {
       Employee e = new Employee();
       e.setEmployeeId(rs.getInt("employee_id"));
       e.setFirstName(rs.getString("first_name"));
       e.setLastName(rs.getString("last_name"));
       e.setEmailId(rs.getString("email_id"));
       employees.add(e);
     }
     model.addAttribute("employees", employees);
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     DataBase.close(rs);
     DataBase.close(ps);
     DataBase.close(conn);
   }
   return employees;
 }

Но у меня проблемы с операциями «Обновить, Удалить», когда я использую Angular для внешнего интерфейса, прежде чем он работал с чистым HTML (каркас Thymeleaf)

 @PutMapping("/employees/{employeeId}") // update operation
  @ResponseBody
  public String updateEmployee(@RequestBody Employee employee) {
    JsonObject json = new JsonObject();
    Connection conn = null;
    CallableStatement cs = null;
    try {
      int employeeId = employee.getEmployeeId();
      String firstName = employee.getFirstName();
      String lastName = employee.getLastName();
      String emailId = employee.getEmailId();
      conn = hds.getConnection();
      cs = conn.prepareCall("{CALL NERS.EMPLOYEE_UPDATE_P(?, ?, ?, ?)}"); // calling update procedure
      cs.setInt(1, employeeId);
      cs.setString(2, firstName);
      cs.setString(3, lastName);
      cs.setString(4, emailId);
      cs.executeUpdate();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      DataBase.close(cs);
      DataBase.close(conn);
    }
    return json.toString();
  }

  @Deletemapping("/employees/{employeeId}") // delete operation
  public String deleteEmployee(@PathVariable int employeeId) {
    ArrayList<Employee> employees = new ArrayList<>();
    JsonObject json = new JsonObject();
    Connection conn = null;
    CallableStatement cs = null;
    try {
      conn = hds.getConnection();
      cs = conn.prepareCall("{CALL NERS.EMPLOYEE_DELETE_P(?)}"); // calling delete procedure
      cs.setInt(1, employeeId);
      cs.executeUpdate();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      DataBase.close(cs);
      DataBase.close(conn);
    }
    return "employees";
  }

В Angular front-end нет ошибок, я проверял их с помощью JPA. Только на заднем плане у меня проблемы. Пожалуйста, можете ли вы посоветовать несколько ссылок на учебники или ваши советы? Я буду счастлив с этим. Я ищу эту проблему в течение 2 недель. Спасибо за продвижение.

1 Ответ

0 голосов
/ 09 марта 2020

Через некоторое время я нашел решение своей проблемы, проблема заключалась в URL REST API.

...