Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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/2/spring/11.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 SpringJDBC模板的实体或DTO方法?_Java_Spring_Spring Jdbc - Fatal编程技术网

Java SpringJDBC模板的实体或DTO方法?

Java SpringJDBC模板的实体或DTO方法?,java,spring,spring-jdbc,Java,Spring,Spring Jdbc,我有一个Java批处理作业,它使用普通JDBC执行大量查询和大量连接。我决定将普通的JDBC代码转换为使用JDBCTemplate的SpringJDBC项目。 它纯粹是一个命令行批处理程序,没有GUI。大约有40个表,4-5个表有300多个列。我不确定是为这些表创建实体类还是创建DTO pojo类 我理解DTO类是为了解耦实体类和视图。由于我没有GUI,而且我只处理带有大量连接的手工查询的DB,所以只使用实体类而不是DTO类是否更好?我没有使用JPA,而是使用SpringJDBC 所以代码看起来

我有一个Java批处理作业,它使用普通JDBC执行大量查询和大量连接。我决定将普通的JDBC代码转换为使用JDBCTemplate的SpringJDBC项目。 它纯粹是一个命令行批处理程序,没有GUI。大约有40个表,4-5个表有300多个列。我不确定是为这些表创建实体类还是创建DTO pojo类

我理解DTO类是为了解耦实体类和视图。由于我没有GUI,而且我只处理带有大量连接的手工查询的DB,所以只使用实体类而不是DTO类是否更好?我没有使用JPA,而是使用SpringJDBC

所以代码看起来像

 List<Customer> customers = jdbcTemplate.query(
                sql,
                new BeanPropertyRowMapper(Customer.class));

这里的客户应该是实体类还是DTO?请告知。

传统方法是:

在@Repository级别使用CustomerEntity

在@Service level上使用CustomerDto

在您的情况下,我更愿意使用:

CustomerEntity-如果它对应于CUSTOMERS表行。CustomerEntity可以有关系,例如List

对于聚合数据,选择具有多个联接的查询可以使用CustomerReportDto,也可以仅使用CustomerReport

端点响应的CustomerResponse


我建议两者都用

使用实体进行数据库操作,如插入、更新等

使用DTO将数据从RESTAPI传递到服务或服务到RESTAPI。 为此,您需要在服务级别使用DTO到实体和实体到DTO的转换器。
有时,从前端或REST API,我们将获得一些额外的信息,这些信息可能需要一些计算,但不需要DB,因此在这种情况下,最好使用DTO和实体。

如果您希望在对象模型上工作,而不是在数据库上工作,但如果您不需要在对象模型上工作,则实体是表示数据库结构的一种很好的方法需要查询结果结构的类。不管您称它为实体还是dto。我假设即使对于相同的表,查询也不会返回相同的结构,因此需要更接近传统dto方法的方法。顺便说一句,如果SQL是只读选择的,那么即使使用JPA/Hibernate,也可以直接查询dto。任何关于如何在spring boot JDBC模板和REST API中使用dto的示例代码他都没有REST API。他仍然可以使用。不必使用GUI或REST。某种情况下,他可以使用服务。当然,他可以如果有意义,就使用它们。然而,当他写自己有命令行批处理作业时,写一个与RESTAPI相关的答案就没有什么意义了。@Sanjay。。这是一个独立的命令行批处理作业,它将命中数据库并生成报告。它不公开任何服务或API。您能具体说明一下为什么我必须在我的案例中使用DTO..CustomerReport作为查看对象类吗?假设我有一个select查询,其中包含来自不同表的多个联接,那么在这种情况下,我可以有一个视图对象类或dto?@Stunner Yes。这有点像风景。因此,您可以使用CustomerReport。您可以将其视为没有DTO后缀的DTO。