【问题标题】:How to delete from DB in SpringMVC如何在 Spring MVC 中从数据库中删除
【发布时间】:2017-04-21 19:24:13
【问题描述】:

以下代码应使用 orderID 删除一些订单。我对该方法的参数感到困惑,好像该方法依赖于 orderID 这将如何工作?

//code I am trying to replace

public String delete(@RequestParam(value="orderId", required=false, defaultValue="-1") int orderId, Model model) {
SomeApp.getStore().getOrderList().removeIf(p -> (p.getId() == orderId));
model.addAttribute("orderList", SomeApp.getStore().getOrderList());

//with this
public String orderDelete(Map<String, Object> model) {<--does this always stay this way?
    int orderID= OrderService.delete(orderId);
    orderRepository.delete(orderID)
    return "someform/orderMaster";
} 

我有一个订单实体,以及一个扩展 CRUD 的 OrderRepo。 服务业务逻辑在 Controller(上图)中,并且 Controller 有一个用于 OrderService 的 @Autowire。

谢谢(仍然习惯 SpringMVC/JPA Data,所以对于基本问题表示歉意)

【问题讨论】:

    标签: spring-mvc service controller repository spring-data-jpa


    【解决方案1】:

    你可以传递你需要的参数;您的方法可以不带参数。你需要使用N个参数吗?

    说明: 1.@RequestParam(value="orderId", required=false, defaultValue="-1") int orderId - 这将是您的 requestUrl 中的一个参数,例如:localhost:8080/deleteSomething?orderId=11

    2.Model model - 此参数用于发送视图orderList,可以在jsp中作为${orderList}访问

    如果从视图传递一些参数,你必须使用Map&lt;String, Object&gt; model,或者你需要在视图中传递参数,在你的情况下这是不必要的。

    //Autoware your service upper 
    
    public String orderDelete(@RequestParam("orderId") int orderId) {
        orderService.deleteOrder(orderId)
    
        return "someform/orderMaster";
    

    }

    是的,首先从服务中删除您的值,然后再从 repo 中删除您的值是不正确的。查看如何实现您的 repo + 服务类。

    回购: //创建将存储所有操作的接口

    @Repository
    public class OrderRepository implements OrderDAO {
    
    //you may init it there or create a bean and autoware your session
    private SessionFactory sessionFactory;
    
    public void setSessionFactory(SessionFactory sf) {
        this.sessionFactory = sf;
    }
    
    @Override
    public void addOrder(Order order) {
        Session session = this.sessionFactory.getCurrentSession();
        session.persist(order);
    }
    
    @Override
    public void updateOrder(Order order) {
        Session session = this.sessionFactory.getCurrentSession();
        session.update(event);
    }
    
    @Override
    public void deleteOrder(int id) {
        Session session = this.sessionFactory.getCurrentSession();
        Event e = (Event) session.load(Order.class, new Integer(id));
        if (null != e) {
            session.delete(e);
        }
    }
    

    服务

    @Service
    public class EventService {
    
    @Autowired
    private OrderDAO orderDAO;
    //init somewhere bean orderDAO
    
       public void setOrderDAO(OrderDAO orderDAO) {
           this.orderDAO = orderDAO;
       }
    
       @Transactional
       public void addOrder(Order order) {
           orderDAO.addOrder(order);
       }
    
       @Transactional
       public void updateOrder(Order order) {
           orderDAO.updateOrder(order);
       }
    
       @Transactional
       public void deleteOrder(int id) {
           orderDAO.deleteOrder(id);
       }
    }
    

    【讨论】:

    • 我的 repo 扩展了 crudrepo 并且我没有被教导使用会话。
    • 没有重要的会话,如何实现你的存储库。我将展示如何正确构建代码,并且在不必要时不要调用 2 个方法。
    猜你喜欢
    • 2016-12-05
    • 2013-08-21
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多