当前位置: 首页 > 面试题库 >

将SQL与Java代码分开

柴彬
2023-03-14
问题内容

当我必须连接到数据库时,这是我经常遇到的一个问题。如何将SQL与普通的Java代码分开?我通常为数据库连接使用一个单独的类,但是,当您在每个数据库中有多个数据库和多个表时,总是很难做到这一点100%

例如,如果要将所有Java
SQL放在名为DBConnector.java的类中,我们如何通用地为不同的插入,删除,数据检索等进行编码?我认为理想的情况是,所有SQL语句都应该在同一类中,并且应该与数据库应用程序范围内的同一操作的不同风格兼容,从而在逻辑上与其余代码分离。

public void insertData (String db, String table, <Whatever Fields to be Inserted>)
{
  //generic SQL INSERT statement and execution 
}

public ResultSet retrieveData (String db, String table, <Whatever Fields Relevant>) 
{
  //generic retrieval of data
}

有什么办法可以做到这一点?还是我们应该只是为不同类型的插入,查询等添加功能

谢谢!


问题答案:

如果您想要一个声音体系结构,那么您将需要至少几个层次来分离问题。

首先,从模型类开始(大多数情况下,数据库中的每个表都需要一个)。自己编写它们,或使用ORM(例如EclipseLink,Hibernate)自动生成它们。这些应该是POJO(普通的旧Java对象),这意味着它们是simple具有属性的对象(例如Name,StringId类型,integer类型等)。您的模型对象应该是数据的载体,仅此而已(一定没有逻辑或处理能力)。

然后,为所有模型类创建DAO(数据访问对象)(如果需要,可以构建要继承的GenericDao类)。在这里,您将通过将 模型
对象作为参数的方法来提供CRUD操作(插入,更新,删除)。这是特定于数据库后端的,尽管您可以根据需要插入与数据库无关的DAO层。

第三,每个逻辑类组都有一个 服务管理器
层(这是所有前端和控制器代码都应与之对话的所有所需功能的层)。可以调用一种典型的方法registerCustomer(...)(可以使用不同的DAO类)。或findCustomerByName()

以这种方式构造您的应用程序称为MVC(模型-视图-控制器),因此如果您需要更多信息,这就是google的术语。

这样,您通常将没有比DAO层更高的SQL查询,这意味着您的应用程序是a)可维护的,并且b)以后更改后端更容易。



 类似资料:
  • 我有这样的东西: 现在,有一个需求,添加一个公共API,用于检查输入类型是否有效,只有当validateFlag为true时。 你能在这里建议一些设计吗?最适合搭配什么? 我在想这样的事情:

  • 下面是WebPack4配置代码: 新的配置代码从项目中使用的节点模块中获取所有代码。但我只希望拆分供应商库(我在enrtry配置部分定义),而不希望拆分node_modules中的所有代码。 在本例中:“babel-polyfill”,“react”,“react-dom”,“jquery”,“bootstrap”

  • 问题内容: 为什么Maven将资源与Java源代码保存在单独的“源文件夹”中? 根据我的经验,在Java中,资源文件通常被视为Java源文件,当“编译”时,只需将它们与类按原样复制,然后最终打包在jar中,并由 classloader 的方法访问/ ,通过。 我个人觉得将资源文件与Java源代码分开是没有用的。 你怎么看? 为什么Maven将资源与资源分开是有充分的理由的? 有没有在不使用任何计数

  • 问题内容: 我有一个用Scala编写的应用程序,我的一些团队成员希望使用Java版本。这是一个演示应用程序,可以使用用Scala编写的另一个API,并且他们希望该应用程序的Java版本能够使用Java中的API。但是,该应用程序有些大,我不想用Java手动重排代码(他们也不想学习Scala)。是否有任何工具可以从Scala代码自动生成(可读)Java代码? 问题答案: 他们希望应用程序的Java版

  • 问题内容: 我想知道我的Java程序中是否包含很多代码,这会影响代码的性能吗(例如,程序会变慢)?Java中的逻辑与C中的逻辑相同吗? 问题答案: 它会影响我的代码的性能吗(例如,程序会更慢)? 不,这不会影响代码的性能。 二进制文件(类文件)的大小不会增加,因为导入 没有 使用任何剪切和粘贴机制来实现。 例如,它只是避免必须写的语法糖 这是一个小测试,证明了这一点: (修改中) Java中导入背

  • 我已经编写了Java代码,需要与Repast Simphony集成。 但是当我试图为reover Simphony设置与我的代码相同的工作空间时,我遇到了这个错误: 语法错误,注释仅在源代码级别为1.5或更高时可用 有什么建议吗?