hw5
This commit is contained in:
68
src/main/java/DAO/OrderItemDao.java
Normal file
68
src/main/java/DAO/OrderItemDao.java
Normal file
@@ -0,0 +1,68 @@
|
||||
package DAO;
|
||||
|
||||
import DTO.Order;
|
||||
import DTO.OrderItem;
|
||||
import util.DataSourceProvider;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class OrderItemDao {
|
||||
|
||||
public static List<OrderItem> getItemsForOrderId(int id) {
|
||||
List<OrderItem> result = new LinkedList<>();
|
||||
String sql = "select item_name, quantity, price from order_items where ORDER_ID=?";
|
||||
try (Connection con = DataSourceProvider.getDataSource().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement(sql)) {
|
||||
ps.setInt(1, id);
|
||||
try(ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
OrderItem item = new OrderItem();
|
||||
item.setItemName(rs.getString(1));
|
||||
item.setQuantity(rs.getInt(2));
|
||||
item.setPrice(rs.getInt(3));
|
||||
result.add(item);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void saveOrderItem(OrderItem item, int orderId) {
|
||||
String sql = "insert into order_items (order_id, item_name, quantity, price) VALUES (?,?,?,?);";
|
||||
try (Connection con = DataSourceProvider.getDataSource().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement(sql)) {
|
||||
ps.setInt(1, orderId);
|
||||
ps.setString(2, item.getItemName());
|
||||
ps.setInt(3, item.getQuantity());
|
||||
ps.setInt(4, item.getPrice());
|
||||
ps.execute();
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void saveOrderItems(List<OrderItem> items, int orderId) {
|
||||
for (OrderItem item: items){
|
||||
saveOrderItem(item, orderId);
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteOrderItemsForOrderId(int id) {
|
||||
String sql = "delete from order_items where ORDER_ID=?";
|
||||
try (Connection con = DataSourceProvider.getDataSource().getConnection();
|
||||
PreparedStatement ps = con.prepareStatement(sql)) {
|
||||
ps.setInt(1, id);
|
||||
ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,18 +9,17 @@ import java.util.List;
|
||||
|
||||
public class OrdersDao {
|
||||
|
||||
static private int nextOrderId = 0;
|
||||
|
||||
public static Order getOrderForId(int id) {
|
||||
Order order = new Order();
|
||||
String sql = "select 'order_number' from ORDERS where id=?;";
|
||||
String sql = "select order_number from ORDERS where id=?;";
|
||||
try (Connection connection = DataSourceProvider.getDataSource().getConnection();
|
||||
PreparedStatement ps = connection.prepareStatement(sql)) {
|
||||
ps.setInt(1, id);
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
if (rs.next()) {
|
||||
order.setId(id);
|
||||
order.setOrderNumber(rs.getString("order_number"));
|
||||
order.setOrderNumber(rs.getString(1));
|
||||
order.setOrderRows(OrderItemDao.getItemsForOrderId(id));
|
||||
return order;
|
||||
}
|
||||
}
|
||||
@@ -40,6 +39,7 @@ public class OrdersDao {
|
||||
Order order = new Order();
|
||||
order.setId(rs.getInt(1));
|
||||
order.setOrderNumber(rs.getString(2));
|
||||
order.setOrderRows(OrderItemDao.getItemsForOrderId(order.getId()));
|
||||
orders.add(order);
|
||||
}
|
||||
}
|
||||
@@ -48,17 +48,35 @@ public class OrdersDao {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
return orders;
|
||||
}
|
||||
|
||||
public static void saveOrder(Order order) {
|
||||
order.setId(nextOrderId++);
|
||||
String sql = "insert into orders (id, order_number) values (?, ?);";
|
||||
String sql = "insert into orders (order_number) values (?);";
|
||||
try (Connection connection = DataSourceProvider.getDataSource().getConnection();
|
||||
PreparedStatement ps = connection.prepareStatement(sql);
|
||||
PreparedStatement call = connection.prepareCall("CALL IDENTITY();")) {
|
||||
ps.setString(1, order.getOrderNumber());
|
||||
ps.executeUpdate();
|
||||
try (ResultSet rs = call.executeQuery()) {
|
||||
if (rs.next()) {
|
||||
order.setId(rs.getInt(1));
|
||||
OrderItemDao.saveOrderItems(order.getOrderRows(), order.getId());
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteOrderForId(int id) {
|
||||
String sql = "DELETE FROM orders WHERE id=?;";
|
||||
try (Connection connection = DataSourceProvider.getDataSource().getConnection();
|
||||
PreparedStatement ps = connection.prepareStatement(sql)) {
|
||||
ps.setInt(1, order.getId());
|
||||
ps.setString(2, order.getOrderNumber());
|
||||
ps.execute();
|
||||
ps.setInt(1, id);
|
||||
ps.executeUpdate();
|
||||
OrderItemDao.deleteOrderItemsForOrderId(id);
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package DTO;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public @Data class Order {
|
||||
private int id;
|
||||
private String orderNumber;
|
||||
private List<OrderItem> orderRows;
|
||||
private List<OrderItem> orderRows = new LinkedList<>();
|
||||
}
|
||||
|
||||
@@ -50,4 +50,14 @@ public class Orders extends HttpServlet {
|
||||
resp.getWriter().print(new ObjectMapper().writeValueAsString(order));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
resp.setContentType("application/json");
|
||||
String idString = req.getParameter("id");
|
||||
if (idString != null) {
|
||||
int id = Integer.parseInt(idString);
|
||||
OrdersDao.deleteOrderForId(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,16 @@
|
||||
CREATE TABLE orders (
|
||||
id BIGINT NOT NULL PRIMARY KEY ,
|
||||
order_number VARCHAR (255)
|
||||
);
|
||||
id BIGINT NOT NULL PRIMARY KEY IDENTITY,
|
||||
order_number VARCHAR (255)
|
||||
);
|
||||
|
||||
CREATE TABLE order_items (
|
||||
id BIGINT NOT NULL PRIMARY KEY IDENTITY,
|
||||
order_id BIGINT NOT NULL,
|
||||
item_name VARCHAR (255),
|
||||
quantity INT,
|
||||
price INT,
|
||||
FOREIGN KEY (order_id) REFERENCES orders (id)
|
||||
);
|
||||
|
||||
--INSERT INTO orders (order_number) values ('asdf');
|
||||
--INSERT INTO order_items (order_id, item_name, quantity, price) values (0, 'test', 1, 10);
|
||||
Reference in New Issue
Block a user