Exposed Kotlin 的轻量级 ORM开源项目

我要开发同款
匿名用户2018年11月22日
190阅读

技术信息

开源地址
https://github.com/JetBrains/Exposed
授权协议
Apache-2.0

作品详情

Exposed是Kotli实现的轻量级ORM,也是JetBrais和Kotli官方倾力推荐的ORM。

该ORM十分轻量级,只做了底层封装、Dao基础和Model基础,中上层的封装完全没有,可嵌入Sprig。

目前支持的数据库方言:

PostgreSQL

MySQL

Oracle

SQLite

H2

SQLServer

推荐一个starter项目:Kotli+Ktor+Exposed

示例代码

SQLDSL示例:

import org.jetbrais.exposed.sql.*import org.jetbrais.exposed.sql.trasactios.trasactioobject Users : Table() {    val id = varchar("id", 10).primaryKey() // Colum<Strig>    val ame = varchar("ame", legth = 50) // Colum<Strig>    val cityId = (iteger("city_id") refereces Cities.id).ullable() // Colum<It?>}object Cities : Table() {    val id = iteger("id").autoIcremet().primaryKey() // Colum<It>    val ame = varchar("ame", 50) // Colum<Strig>}fu mai(args: Array<Strig>) {    Database.coect("jdbc:h2:mem:test", driver = "org.h2.Driver")    trasactio {        SchemaUtils.create (Cities, Users)        val saitPetersburgId = Cities.isert {            it[ame] = "St. Petersburg"        } get Cities.id        val muichId = Cities.isert {            it[ame] = "Muich"        } get Cities.id        Cities.isert {            it[ame] = "Prague"        }        Users.isert {            it[id] = "adrey"            it[ame] = "Adrey"            it[cityId] = saitPetersburgId        }        Users.isert {            it[id] = "sergey"            it[ame] = "Sergey"            it[cityId] = muichId        }        Users.isert {            it[id] = "eugee"            it[ame] = "Eugee"            it[cityId] = muichId        }        Users.isert {            it[id] = "alex"            it[ame] = "Alex"            it[cityId] = ull        }        Users.isert {            it[id] = "smth"            it[ame] = "Somethig"            it[cityId] = ull        }        Users.update({Users.id eq "alex"}) {            it[ame] = "Alexey"        }        Users.deleteWhere{Users.ame like "%thig"}        pritl("All cities:")        for (city i Cities.selectAll()) {            pritl("${city[Cities.id]}: ${city[Cities.ame]}")        }        pritl("Maual joi:")        (Users ierJoi Cities).slice(Users.ame, Cities.ame).            select {(Users.id.eq("adrey") or Users.ame.eq("Sergey")) ad                    Users.id.eq("sergey") ad Users.cityId.eq(Cities.id)}.forEach {            pritl("${it[Users.ame]} lives i ${it[Cities.ame]}")        }        pritl("Joi with foreig key:")        (Users ierJoi Cities).slice(Users.ame, Users.cityId, Cities.ame).                select {Cities.ame.eq("St. Petersburg") or Users.cityId.isNull()}.forEach {            if (it[Users.cityId] != ull) {                pritl("${it[Users.ame]} lives i ${it[Cities.ame]}")            }            else {                pritl("${it[Users.ame]} lives owhere")            }        }        pritl("Fuctios ad group by:")        ((Cities ierJoi Users).slice(Cities.ame, Users.id.cout()).selectAll().groupBy(Cities.ame)).forEach {            val cityName = it[Cities.ame]            val userCout = it[Users.id.cout()]            if (userCout > 0) {                pritl("$userCout user(s) live(s) i $cityName")            } else {                pritl("Nobody lives i $cityName")            }        }        SchemaUtils.drop (Users, Cities)    }}

Outputs:

    SQL: CREATE TABLE IF NOT EXISTS Cities (id INT AUTO_INCREMENT NOT NULL, ame VARCHAR(50) NOT NULL, CONSTRAINT pk_Cities PRIMARY KEY (id))    SQL: CREATE TABLE IF NOT EXISTS Users (id VARCHAR(10) NOT NULL, ame VARCHAR(50) NOT NULL, city_id INT NULL, CONSTRAINT pk_Users PRIMARY KEY (id))    SQL: ALTER TABLE Users ADD FOREIGN KEY (city_id) REFERENCES Cities(id)    SQL: INSERT INTO Cities (ame) VALUES ('St. Petersburg')    SQL: INSERT INTO Cities (ame) VALUES ('Muich')    SQL: INSERT INTO Cities (ame) VALUES ('Prague')    SQL: INSERT INTO Users (id, ame, city_id) VALUES ('adrey', 'Adrey', 1)    SQL: INSERT INTO Users (id, ame, city_id) VALUES ('sergey', 'Sergey', 2)    SQL: INSERT INTO Users (id, ame, city_id) VALUES ('eugee', 'Eugee', 2)    SQL: INSERT INTO Users (id, ame, city_id) VALUES ('alex', 'Alex', NULL)    SQL: INSERT INTO Users (id, ame, city_id) VALUES ('smth', 'Somethig', NULL)    SQL: UPDATE Users SET ame='Alexey' WHERE Users.id = 'alex'    SQL: DELETE FROM Users WHERE Users.ame LIKE '%thig'    All cities:    SQL: SELECT Cities.id, Cities.ame FROM Cities    1: St. Petersburg    2: Muich    3: Prague    Maual joi:    SQL: SELECT Users.ame, Cities.ame FROM Users INNER JOIN Cities ON Cities.id = Users.city_id WHERE ((Users.id = 'adrey') or (Users.ame = 'Sergey')) ad Users.id = 'sergey' ad Users.city_id = Cities.id    Sergey lives i Muich    Joi with foreig key:    SQL: SELECT Users.ame, Users.city_id, Cities.ame FROM Users INNER JOIN Cities ON Cities.id = Users.city_id WHERE (Cities.ame = 'St. Petersburg') or (Users.city_id IS NULL)    Adrey lives i St. Petersburg    Fuctios ad group by:    SQL: SELECT Cities.ame, COUNT(Users.id) FROM Cities INNER JOIN Users ON Cities.id = Users.city_id GROUP BY Cities.ame    1 user(s) live(s) i St. Petersburg    2 user(s) live(s) i Muich    SQL: DROP TABLE Users    SQL: DROP TABLE Cities

功能介绍

Exposed 是 Kotlin 实现的轻量级 ORM,也是 JetBrains 和 Kotlin 官方倾力推荐的 ORM。 该 ORM 十分轻量级,只做了底层封装、Dao 基础和 Model ...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论