Как автор BoneCP, я могу заполнить свою часть:
Использование кэша пула дает вам возможность дать вам трассировку стека, если вы забудете правильно закрыть свои операторы,Если вы используете шаблон hibernate / spring jdbc или другое управляемое соединение, это не имеет значения, поскольку оно всегда будет для вас закрыто.
Кэш операторов привязан к каждому соединению, поэтому еслиу вас есть 100 соединений, и вы продолжаете выполнять один и тот же оператор каждый раз, потребуется некоторое время, пока каждое соединение не заполнит свой кэш.Если БД поддерживает его, драйвер может иметь некоторые специальные настройки, чтобы подготовить этот оператор только один раз, но это не входит в спецификацию JDBC, и поэтому пул соединений не будет иметь таких средств для оптимизации, если это вообще возможно.С другой стороны, вы можете сказать пулу предоставить вам соединение в режиме LIFO, что значительно повысит вероятность того, что вы попадете в горячий кеш.
Производительности не должно бытьслишком большая разница, так как в конце они оба пытаются повторно использовать утверждение.Однако некоторые драйверы используют слепой подход для синхронизации на уровне метода, в то время как в BoneCP я всегда стараюсь использовать как можно более точную блокировку, поэтому в теории это должно обеспечить большую масштабируемость.
Резюме: оба должны работать примерно одинаково - если нет, то это, вероятно, ошибка проектирования где-то.