Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于Web服务和数据库的单个DAO_Java_Spring Mvc_Design Patterns_Dao - Fatal编程技术网

Java 用于Web服务和数据库的单个DAO

Java 用于Web服务和数据库的单个DAO,java,spring-mvc,design-patterns,dao,Java,Spring Mvc,Design Patterns,Dao,我正在编写我的第一个SpringMVCwebapp,对DAO和web服务请求有一个问题 本质上,我的应用程序允许用户构造一个订单,该订单通过DAO持久化到数据库。稍后,计划工作人员将从数据库检索新订单,将其提交给第三方SOAP服务,并使用一些详细信息(例如订单号)更新每个订单 我的控制器调用OrderService(压缩版本): 目前,我的OrderDao只与数据库通信,以便对订单模型执行CRUD操作。我不确定是否应该在OrderDao中创建placeOrder()方法,因为这意味着我有一个可以

我正在编写我的第一个SpringMVCwebapp,对DAO和web服务请求有一个问题

本质上,我的应用程序允许用户构造一个订单,该订单通过DAO持久化到数据库。稍后,计划工作人员将从数据库检索新订单,将其提交给第三方SOAP服务,并使用一些详细信息(例如订单号)更新每个订单

我的控制器调用OrderService(压缩版本):

目前,我的OrderDao只与数据库通信,以便对订单模型执行CRUD操作。我不确定是否应该在OrderDao中创建placeOrder()方法,因为这意味着我有一个可以访问数据库和SOAP服务的DAO,这感觉是错误的

将placeOrder()放在OrderService中感觉也不对,因为该服务将包含内部DAO调用和外部第三方SOAP调用的混合

我一直在阅读接口方面的内容,但我认为它们对我没有帮助,因为我的数据库DAO将包含create()、update()、delete(),这不适用于SOAP DAO


我是否应该创建两个DAO:OrderDaoDatabase和OrderDaoSoap?

使用分层架构的目的是鼓励解耦和分离关注点。您已经有了负责业务逻辑的服务层和与数据库通信的数据访问层(DAOs),这似乎是正确的。OrderService应该与数据库对话,OrderDAO应该与数据库对话

您的计划工似乎是另一个类。OrderDAO可以通过不同的方法(应用程序需要这些方法)公开订单数据。如果
placeOrder()
是对外部web服务的调用,则可以从OrderService中的适当方法或其他类(如果需要)调用它。现在,由于该调用在调用
addOrder()
时没有完成,因此它可能属于调度程序调用的另一个方法。另一方面,我不认为
placeOrder()
应该进入
OrderDAO
,它应该留给它所说的数据访问对象。

您的
placeOrder()
addOrder()
相同吗?在代码中找不到它。
@Service
public class OrderService {

    @Autowired
    private OrderDao orderDao;

    public List<Order> getOrderList() {

        List<Order> orders = orderDao.getAllOrders();

        return orders;
    }

    public void addNewOrder(Order order) {

        orderDao.addOrder(order);
    }
}
@Repository
public class OrderDao extends JdbcDaoSupport {

    @Autowired
    public OrderDao(DataSource dataSource) {
        setDataSource(dataSource);
    }

    public List<Order> getAllOrders() {

        String sqlQuery = "SELECT id, name, status, orderNumber FROM orders";

        List<Order> orders = getJdbcTemplate().query(sqlQuery, new OrderRowMapper());

        return orders;

    }

    public int addOrder(Order order) {

        String sqlQuery = "INSERT INTO orders (name, status) VALUES (?, ?)";

        getJdbcTemplate().update(sqlQuery, new Object[] { order.getName(), order.getStatus() });

        return getJdbcTemplate().queryForObject("SELECT LAST_INSERT_ID()", Integer.class );
    }
}
public class Order {

    private int orderId;
    private String name;
    private String status;
    private String orderNumber;

    // getters and setters etc.
}