首页 > 解决方案 > 如何将 OrmLite DAO 实例自动装配到 Spring 控制器中?

问题描述

所以我使用 SpringBootApplication 来创建一个快速的服务器应用程序。我也想在这个应用程序中保持持久性,所以我添加了 OrmLite 来处理我的 SQLite 数据库。

实例化 OrmLite DAO 需要ConnectionSource数据库。我如何使用我的控制器处理请求来@Autowire实例化 DAO connectionSource,以便我可以返回他们从数据库中请求的任何内容?我还有一个创建与数据库的连接的 databaseHelper 类,它在应用程序主方法中被实例化。

例如控制器:

@RestController
public class GreetingController {

 @AutoWired
 GreetingDao greetingDao;
 //how does this instance have the connectionSource Dao to the database?

}

道:

@Component
public class GreetingDao {
 Dao<int, Greeting> greetingDao;

 public GreetingDao(ConnectionSource connectionSource) {
  greetingDao = Dao.createDao(connectionSource, Greeting.class);
 }

}

标签: springcontrollerdaoormlite

解决方案


好吧,在进一步阅读之后,我意识到我可以为我的 DAO 类设置默认构造函数,然后当我的应用程序主被调用时,我只需在 ApplicationContext 中为我的 DAO 设置 connectionSource。

然后,当我@Autowire在控制器类中拥有我的 DAO 时,它们将具有与我将 connectionSource 设置为相同的实例。

//inside @SpringBootApplication class
public void main(String [] args) {
 ConfigurableApplicationContext context = SpringApplication.run(Application.class, args)

 DatabaseHelper dbHelper = context.getBean(DatabaseHelper.class)
 dbHelper.connect();

 GreetingAccessor greetingAccessor = context.getBean(GreetingAccessor.class)
 greetingAccessor.createDao(dbHelper.getConnectionSource);
}

//inside GreetingAccessor
public void createDao(ConnectionSource connectionSource) {
 greetingDao = DaoManager.createDao(connectionSource, Greeting.class);
}

推荐阅读