Pull to refresh

Comments 9

С Postgresql дело не имел, а для SQLite — чем оно отличается от Room?
На беглый взгляд даже синтаксис совпадает…
Напоминает Spring Data? Но это не Spring, не Hibernate и даже не JPA.

Напомнило реактивный репозиторий ReactiveCrudRepository ( spring.io/guides/gs/accessing-data-r2dbc )

А где управление транзакциями?
Да, очень похоже. Принципы те же (kapt, генерация кода, sql-first).
Не слышал о нем, возможно он специфичен для Android.
На первый взгляд Kotlite умеет чуть больше в генерации SQL (но могу ошибаться). В примерах выше, для метода:
`fun selectBy(name: String, birthDate: LocalDate): Person?`
SQL будет сгенерирован автоматически.
UFO just landed and posted this here
Я бы сказал что Kotlite это SQL-центричное решение. Он оперирует либо просто SQL в виде текста, либо сгенерированным SQL, но тоже в текстовом виде. Его основная идея – позволить программисту пользоваться крутым языком (SQL) и всеми возможностями базы данных, и взять на себя нудную работу с JDBC и преобразованием резалт-сета в объекты.

Exposed это по сути Kotlin DSL над SQL. Он в отличие от Kotlite ООП-центричный, и не позволяет выполнять запросы именно в виде текста, только через DSL (это имеет свои преимущества… и недостатки).

Второе серьезное отличие – это то, что Kotlite генерирует код, и его можно увидеть глазами, продебажить, или даже изменить (предварительно скопировав в свой проект). В то время как Exposed все «генерирует» в рантайме.
не позволяет выполнять запросы именно в виде текста, только через DSL

Умеет


TransactionManager.current().exec(native_sql) { rs ->
  // разбираем ResultSet
}

или так: https://github.com/JetBrains/Exposed/blob/935f9a852200af5c880ca0dbbcfa5a6777e3ad77/exposed-tests/src/main/kotlin/org/jetbrains/exposed/sql/tests/DatabaseTestsBase.kt#L48

Прошу прощения, не понял.
А в «join» не умеет?
Самостоятельно генерировать джоины не умеет. Может замапить результаты ручного джоина на дата-класс (проекцию):

@Query("""
     SELECT name, department_name
     FROM person p
     JOIN department d on p.department_id = d.id
""")
fun select(): PersonDepartmentProjection

Sign up to leave a comment.

Articles