这取决于我们在打开和关闭连接之间所做的所有事情。
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 实例。