Я хотел бы получить соединение с экземпляром базы данных, которые я определяю, когда я пишу это в application.conf:Play: получение соединения с базой данных по умолчанию
db.default {
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
}
docs говорят, что мы должны вставьте db: Database
в контроллер (который отлично работает), и не показывает другого способа. Предопределенная инъекция Guice для этого скрыта (не в Module.scala). Также он предполагает, что стандартный синглтон Database автоматически создается в Play.
Что делать, если я не хочу, чтобы ввести базу данных в контроллер, но отдельные проблемы и использовать его только в некоторых SqlHandler
объект, который только работа заключается в том, чтобы делать запросы SQL:
object SqlHandler {
val db: Database = ???
def select(params) {...db...}
def insert(params) {...db...}
}
Я знаю, что я может создать новый экземпляр базы данных с play.api.db.Databases
с чем-то вроде
import play.api.db.Databases
val db: Database = Databases(
driver = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://localhost/test"
username = ...
password = ...
)
, но я не только найти глупо повторять всю информацию, я считаю, что это также создает базу данных дважды (один раз автоматически, как только здесь вручную, не Это?).
Есть ли какой-либо удобный способ для подключения к моей базе данных по умолчанию, или как Могу ли я использовать Guice для инъекции в другом месте?
Извините, что я действительно все еще не понимаю. Это 'SqlHandler', что я хочу использовать db in, а не какой-то новый' DBTest'. – JulienD
Привет, это был просто пример. Я редактировал свой пост, хотя для ясности. Важный бит заключается в том, что вы (A) понимаете, что вы можете вставлять зависимости где угодно, пока инжектор и инъецируемый управляются Guice. (B) Если вам нужен только один экземпляр, вы можете использовать '@ Singleton' в классе, а не пытаться вставлять в« объект », что потребует больше пробега. – Nio
Хорошо. И теперь я должен ввести SqlHandler (где угодно) вместо базы данных, правильно? Если я просто делаю «новый SqlHandler», он жалуется, что для него требуется параметр базы данных. – JulienD