這取決於我們在打開和關閉連接之間所做的所有事情。
public interface UserDao {
@SqlQuery("select * from users")
public List<User> getUsers();
@SqlUpdate(some query..)
public void insertUsers(someParam);
}
UserDao dao = dbi.onDemand(UserDao.class);
dao.getUsers();
UserDao dao = dbi.open(UserDao.class);
dao.getUsers();
dao.close();
這裏獲取連接和關閉連接沒有區別。
UserDao dao = dbi.onDemand(UserDao.class);
dao.getUsers();
// calling external service to get some value.
dao.insertUsers();
UserDao dao = dbi.open(UserDao.class);
dao.getUsers();
// calling external service to get some value.
dao.insertUsers();
dao.close();
在此示例中,在onDemand方法中,連接在getUsers調用並在此之後關閉之前打開。 對於insertUsers也是如此。在外部服務呼叫期間,不保持連接。
在Dbi open方法中,連接在getUsers之前打開並在insertUsers之後關閉。在外部服務呼叫期間,連接也被保持。 如果這個外部通話費用很高,那麼你最終會連接空閒很長時間,而不能用於其他通話。
所以最好使用onDemand來獲取Dao實例。