Prepared Statement scala i e timestamp Local Date

  • Slides: 8
Download presentation

Примеры � Ручное создание пула соединений и работа с объектами базы данных. � Параметры,

Примеры � Ручное создание пула соединений и работа с объектами базы данных. � Параметры, передаваемые в виде шаблонов, будут преобразованы в параметры Prepared. Statement � Типы базы данных преобразуются в типы scala (i. e. timestamp -> Local. Date. Time) Connection. Pool. singleton("jdbc: h 2: file: . /jdbc. Test. DB", "user", "pass") implicit val session = Auto. Session logger. info("Dropping table") sql"drop table if exists users". execute. apply()(session) logger. info("Creating table") sql""" create table users ( id int, name varchar(100), created_timestamp )""". execute. apply() logger. info("Inserting rows") val user = User(2, "Petrov", Local. Date. Time. now) sql"insert into users values(${user. id}, ${user. name}, ${user. created. Time})". update. apply() logger. info("Selecting rows") val users = sql"""select * from users""". map(rs => User(rs. int("id"), rs. string("name"), rs. local. Date. Time("created_time"))). list(). apply()

Statement and resultset // statement sql"drop table if exists users". execute. apply()(session) //prepared statement

Statement and resultset // statement sql"drop table if exists users". execute. apply()(session) //prepared statement sql"insert into users values(1, 'Ivanov', ${Local. Date. Time. now})". update. apply() //prepared statement and resultset val users = sql"""select * from users""". map(resultset => User( resultset. int("id"), resultset. string("name"), resultset. local. Date. Time("created_time")) ). list(). apply()

Конфигурация Модуль scalikejdbc-config добавляет возможность загружать параметры соединений к базе данных из конфигурационного файла

Конфигурация Модуль scalikejdbc-config добавляет возможность загружать параметры соединений к базе данных из конфигурационного файла resources/application. conf в следующем формате: db { default { driver = "org. h 2. Driver" url = "jdbc: h 2: file: . /default. DB" user = "user" password = "pass" pool. Initial. Size = 5 pool. Max. Size = 7 pool. Connection. Timeout. Millis = 3000 pool. Validation. Query = "select 1 as one" } iris { driver = "org. h 2. Driver" url = "jdbc: h 2: file: . /iris. DB" user = "user" password = "pass" pool. Initial. Size = 5 pool. Max. Size = 7 pool. Connection. Timeout. Millis = 3000 pool. Validation. Query = "select 1 as one" } }

Конфигурация Настройка default будет использоваться как база данных по умолчанию. К настройке iris будем

Конфигурация Настройка default будет использоваться как база данных по умолчанию. К настройке iris будем обращаться по имени: // инициализирует соединения ко всем базам в application. conf scalikejdbc. config. DBs. setup. All() //удалит таблицу в базе default scalikejdbc. DB. auto. Commit( implicit session => sql"drop table if exists users". execute. apply() ) // инициализирует соединение базе iris в application. conf val iris. DB = 'iris scalikejdbc. config. DBs. setup(iris. DB) //удалит таблицу в базе iris scalikejdbc. Named. DB(iris. DB). auto. Commit( implicit session => sql"drop table if exists users". execute. apply() )

SQLInterpolation �Осуществляет привязку объектов scala к объектам БД. Например // сущность, хранящаяся в БД

SQLInterpolation �Осуществляет привязку объектов scala к объектам БД. Например // сущность, хранящаяся в БД case class User(id: Int, name: String, created. Time: Local. Date. Time) object User extends SQLSyntax. Support[User] { //сущность User привязана к таблице users из базы jdbc. Test override val table. Name: String = "users" override def connection. Pool. Name: Any = 'jdbc. Test // нужно для автоматического маппинга объекта к строке БД и обратно def apply(u: Result. Name[User])(rs: Wrapped. Result. Set): User = { new User(rs. int(u. id), rs. string(u. name), rs. local. Date. Time(u. created. Time)) } }

Query. DSL Использование объектов маппинга для построения типизированных запросов к базе данных (Query. DSL)

Query. DSL Использование объектов маппинга для построения типизированных запросов к базе данных (Query. DSL) с использованием шаблона проектирования builder val u = User. syntax("u") val users = Named. DB(db). read. Only { implicit session => with. SQL( select. from(User as u). where. in(u. id, Seq(2, 4, 6, 8)). order. By(u. name). limit(3) ). map( User(u. result. Name)). list(). apply() }