gpt4 book ai didi

java - JOOQ 初始化 DAO 最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:28 26 4
gpt4 key购买 nike

我想知道初始化 JOOQ 生成的 DAO 的最佳实践。现在,我正在使用以下方法初始化 JOOQ 生成的 DAO。在以下情况下,StudentDao 是 JOOQ 生成的。

public class ExtendedStudentDAO extends StudentDao {
public ExtendedStudentDAO () {
super();
}

public ExtendedStudentDAO (Connection connection) {
Configuration configuration = DSL.using(connection,
JDBCUtils.dialect(connection)).configuration();

this.setConfiguration(configuration);
}

//adding extra methods to DAO using DSL
public String getStudentName(Long ID)
throws SQLException {

try (Connection connection = ServiceConnectionManager.getConnection()) {

DSLContext dslContext = ServiceConnectionManager
.getDSLContext(connection);

Record1<String> record = dslContext
.select(Student.Name)
.from(Student.Student)
.where(Student.ID
.equal(ID)).fetchOne();

if (record != null) {
return record.getValue(Student.Name);
}

return null;
}
}
}

我对使用上面的 DAO 有疑问,我的示例代码如下。

try (Connection connection = ServiceConnectionManager.getConnection()) {

ExtendedStudentDAO extendedStudentDAO =new ExtendedStudentDAO(connection);

Student stud=new Student();
.....
....

//insert method is from Generated DAO
extendedStudentDAO.insert(stud);

//this method is added in extended class
extendedStudentDAO.getStudentName(12);

}

最佳答案

有两种方式来看待这种初始化:

每次需要时创建 DAO

您的方法是正确的,但可能会被认为有点重。每次需要时,您都在创建一个新的 DAO

从 jOOQ 3.7 开始,DAO 是一个非常轻量级的对象。包装您的 ConnectionConfiguration 也是如此。

一旦你的项目发展(或在未来的 jOOQ 版本中),这可能不再是真的,因为你的 Configuration 初始化(或 jOOQ 的 DAO 初始化)可能会变得更重。

但这是一个小风险,而且很容易修复:

使用依赖注入(inject)管理DAOConfiguration引用

大多数人只会为他们的应用程序设置一个 jOOQ Configuration,也只会设置一个 DAO 实例(每个 DAO 类型) ,服务中的某处。在这种情况下,您的Configuration 不能共享Connection 引用,而是通过ConnectionProvider SPI 向jOOQ 提供一个Connection。 .就您而言,这似乎微不足道:

class MyConnectionProvider implements ConnectionProvider {
@Override
public Connection acquire() {
return ServiceConnectionManager.getConnection();
}

@Override
public void release(Connection connection) {
try {
connection.close();
}
catch (SQLException e) {
throw new DataAccessException("Error while closing", e);
}
}
}

关于java - JOOQ 初始化 DAO 最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com