Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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/8/logging/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 JDBC数据库访问层_Java_Database_Jdbc - Fatal编程技术网

Java JDBC数据库访问层

Java JDBC数据库访问层,java,database,jdbc,Java,Database,Jdbc,我的想法正确吗? Java数据库访问层通常是如何实现的?我想我有一个类DBAL,它的函数如下 保存(对象对象对象) 删除(对象对象对象) findOne(字符串类型、字符串列、字符串值) findAll(字符串类型、字符串列、字符串值) 保存和删除将接受域对象类,例如产品、用户。。。然后执行相应的操作 findOne和findAll将接受一个类型,该类型对应于表名,然后是用于WHERE子句的列和值。非常简单,但我想知道这个想法是否正确 通常我看到很多网站都有DAO,但是ProductDAO和

我的想法正确吗?

Java数据库访问层通常是如何实现的?我想我有一个类
DBAL
,它的函数如下

  • 保存(对象对象对象)
  • 删除(对象对象对象)
  • findOne(字符串类型、字符串列、字符串值)
  • findAll(字符串类型、字符串列、字符串值)
保存
删除
将接受域对象类,例如产品、用户。。。然后执行相应的操作

findOne
findAll
将接受一个
类型
,该类型对应于表名,然后是用于
WHERE
子句的列和值。非常简单,但我想知道这个想法是否正确

通常我看到很多网站都有DAO,但是
ProductDAO
UserDAO
不会很相似吗?我可以把它们合并成一个DBAL类吗

模拟ORM


从ORM后台提交。我想知道
ResultSet.getObject将如何工作,它会像ORM一样工作吗?例如,在ORM中,我可以查询用户表并返回
列表

在Java中实现数据库访问层的方法有很多,同样的模式也适用于其他语言。最简单的形式是表数据网关。在此模式中,每个数据库表都有一个网关实例。DAL的其他模式是表行网关,其中表中每个数据库行都有一个网关实例活动记录,其中域对象知道如何与数据库本身对话数据映射器其中,数据在域对象和数据库之间移动,同时保持它们彼此独立和映射器本身独立。 这些方法各有利弊。尝试查找我提到的模式,看看什么最适合您的应用程序

人们将基本DAO(TDG、TRG、what have you)子类化的主要原因是为每个域对象类型提供一个显式的、独特的、类型安全的接口+它使客户端更容易找到实现用例所需的正确数据访问函数。相同的代码在基类中被抽象

如果您正处于应用程序的启动阶段,我建议您使用一个处理数据访问的工具(例如Hibernate)。这些工具是非常通用的,它们有一百万个问题,但至少您可以先关注正确的业务逻辑,然后再担心这些应用程序领域之外的问题。如果最终发现存在问题,并且您的软件看起来很成功,那么您可以继续进行数据访问,以提高性能,或者解决您选择的工具给您带来的其他难题。我之所以这么说,是因为要制作一个好的国产数据访问解决方案相当困难,而且它会占用您大量的时间。考虑并发问题,从数据库id到内存实例的映射等等

至于你关于ResultSet的问题。否,getObject将获取此ResultSet对象当前行中指定列的值作为对象。因此,您必须自己进行强制转换,这也是为什么如果您走这条路,最好从ResultSet为您的域对象创建一个工厂

这是一个巨大的主题,如果我不能更详细地讨论所有模式,我很抱歉。我自己也有工作要做:-)如果你决定自己做,而不是使用“标准”工具,我很乐意在你找到我在这里提到的最适合你需要的模式后,回答你更多的问题


关于。

在Java中实现数据库访问层有很多方法,同样的模式也适用于其他语言。最简单的形式是表数据网关。在此模式中,每个数据库表都有一个网关实例。DAL的其他模式是表行网关,其中表中每个数据库行都有一个网关实例活动记录,其中域对象知道如何与数据库本身对话数据映射器其中,数据在域对象和数据库之间移动,同时保持它们彼此独立和映射器本身独立。 这些方法各有利弊。尝试查找我提到的模式,看看什么最适合您的应用程序

人们将基本DAO(TDG、TRG、what have you)子类化的主要原因是为每个域对象类型提供一个显式的、独特的、类型安全的接口+它使客户端更容易找到实现用例所需的正确数据访问函数。相同的代码在基类中被抽象

如果您正处于应用程序的启动阶段,我建议您使用一个处理数据访问的工具(例如Hibernate)。这些工具是非常通用的,它们有一百万个问题,但至少您可以先关注正确的业务逻辑,然后再担心这些应用程序领域之外的问题。如果最终发现存在问题,并且您的软件看起来很成功,那么您可以继续进行数据访问,以提高性能,或者解决您选择的工具给您带来的其他难题。我之所以这么说,是因为要制作一个好的国产数据访问解决方案相当困难,而且它会占用您大量的时间。考虑并发问题,从数据库id到内存实例的映射等等

至于你关于ResultSet的问题。否,getObject将获取此ResultSet对象当前行中指定列的值作为对象。所以你必须自己做一个演员