Exposedは、Kotlin言語のJDBCドライバーの上にある軽量のSQLライブラリです。 Exposedには、2つのフレーバーのデータベースアクセスがあります。TypeSafeSQLラッピングDSLと軽量データアクセスオブジェクト(DAO)です。
露出すると、データベースアクセスの2つのオプションがあります。DSLと軽量DAOです。私たちの公式マスコットはイカであり、これは、あらゆる環境にシームレスに溶け込むことができる顕著な模倣能力で有名です。マスコットと同様に、Exposedを使用してさまざまなデータベースエンジンを模倣できます。これにより、特定のデータベースエンジンに依存関係なくアプリケーションを構築し、変更なしでそれらを切り替えることができます。
H2(バージョン2.x; 1.xバージョンは非推奨で、将来のリリースで削除されます)
(また、pgjdbc-ng jdbcドライバーを使用したpostgresql)
露出のリリースは、Maven Central Repositoryで利用できます。次のように、このリポジトリをビルドスクリプトで宣言できます。
警告: Kotlin JVMターゲットを8に設定する必要があるかもしれません。
リポジトリ{// 0.30.1の後のバージョン0.30.1の前のバージョンは、nowmavencentral()では利用できません }
Maven Centralリポジトリは、Mavenユーザーのデフォルトで有効になっています。
Exposed
、次のモジュールで構成されています。
露出コア - マッピングとともにDSL APIの両方を含むベースモジュール
Exposed-Crypt-暗号化されたデータをDBに保存し、クライアント側にエンコード/デコードするための追加の列タイプを提供します
Exposed -Dao -Dao API
Exposed-Java-Time-Java8 Time APIに基づく日付時間延長
Exposed -JDBC- Java JDBC APIに基づく輸送レベルの実装
Exposed-Jodatime-Jodatime Libraryに基づく日付時間延長
Exposed -JSON -JSONおよびJSONBデータ型拡張機能
Exposed-Kotlin-Datetime-Kotlinx-Datetimeに基づく日付時間延長
Exposed-Money-「javax.money:Money-API」からのMONETARYAMOUNTをサポートするための拡張機能
Exposed-Spring-Boot-Starter-hibernateの代わりにORMとして露出した露出を利用するスプリングブーツのスターター
<依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid>露出コア</artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid>露出したクリプト</artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid> exposed-dao </artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid> exposed-java-time </artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid> exposed-jdbc </artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid> exposed-jodatime </artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid> exposed-json </artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid> exposed-kotlin-dateTime </artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid>露出したマネー</artifactid> <バージョン> 0.56.0 </version> </依存関係> <依存関係> <GroupId> org.jetbrains.Exposed </groupId> <artifactid>露出したスプリングブートスターター</artifactid> <バージョン> 0.56.0 </version> </依存関係> </依存関係>
依存関係{ 実装 'org.jetbrains.Exposed:Exposed-Core:0.56.0'implementation' org.jetbrains.Exposed:Exposed-Crypt:0.56.0'implementation 'org.Jetbrains.Exposed:Exposed-Dao:0.56.0'Implementation 'org.jetbrains.Exposed:Exposed-JDBC:0.56.0' 実装 'org.jetbrains.exposed:exposed-jodatime:0.56.0'// orimplementation' org.jetbrains.exposed:exposed-java-time:0.56.0'// orimplementation 'org.jetbrains.exposed:exposed-kotlin- DateTime:0.56.0 ' 実装 'org.jetbrains.Exposed:Exposed-json:0.56.0'implementation' org.jetbrains.Exposed:Exposed-Money:0.56.0'implementation 'org.Exposed:Exposed-Spring-Boot-Starter:0.56。 0 '}
in build.gradle.kts
:
Val Exposed -version:プロジェクトごとの文字列 依存関係{ 実装( "org.jetbrains.Exposed:Exposed-core:$ exposedversion")) 実装( "org.jetbrains.Exposed:Exposed-Crypt:$ exposedversion")) 実装( "org.jetbrains.Exposed:Exposed-dao:$ exposedversion")) 実装( "org.jetbrains.Exposed:Exposed-JDBC:$ Exposedversion")) 実装( "org.jetbrains.Exposed:Exposed-Jodatime:$ exposedversion")// orimplementation( "org.jetbrains.Exposed:Exposed-Java:Pososedversion")// Orimplementation( "org.jetbrains.exposed:Exposed -kotlin-dateTime:$ exposed-version ") 実装( "org.jetbrains.Exposed:Exposed-json:$ exposedversion")) 実装( "org.jetbrains.Exposed:Exposed-Money:$ exposedversion")) 実装( "org.jetbrains.Exposed:Exposed-spring-boot-starter:$ exposedversion")) }
およびgradle.properties
で
exposedVersion=0.56.0
クイックスタートのためにサンプルをチェックしてください。
現在、 Maven/Gradle Buildに露出しています。 Maven Centralをチェックし、Getergtを読んで、Exposedのセットアップに関する洞察を得てください。
詳細については、以下のリンクをご覧ください。
例とドキュメントを使用したドキュメント
暴露に貢献します
移行ガイド
壊れた変更と移行の詳細
スラックチャネル
トラッカーを発行します
バグや機能を報告するために、GitHubの問題から離れていることに注意してください。 YouTrackに新しいリクエストを記録してください。問題を表示およびログに記録するには、ログインする必要があります。そうしないと、404が満たされます。
質問はありますか? Kotlinlang Slackへの招待状をお気軽にリクエストし、#Exposedチャンネルでプロジェクトの会話に参加してください。
プルリクエストを積極的に歓迎します。ただし、作業を既存の問題にリンクすることが推奨されます。
レポをフォークし、メインからブランチを作成します。
あなたのブランチに、あなたがしている仕事に説明しているものに名前を付けてください。つまり、new-thingを追加します。
テストする必要があるコードを追加した場合は、テストを追加し、テストスイートが合格していることを確認してください。
糸くずの警告に対処してください。
既存のコードを改善する場合は、PRの説明でお知らせください。
詳細については、貢献ガイドラインを参照してください。
org.jetbrains.exposed.sql。*Import org.jetbrains.exposed.sql.sqlexpressionbuilder.likeimport org.jetbrains.exposed.sql.transactions.transactionObjectユーザー:{val(){val()列<文字列> = varchar() id "、10)val name:column <string> = varchar(" name "、length = 50)val cityId:column <int?> =(integer( "city_id")参照cities.id).nullable()override val primarykey = primarykey(id、name = "pk_user_id")// nameはオプションです}オブジェクトシティ:table(){val id:column <int> = integer( "id")。autoincrement()val name:column <string> = varchar( "name"、 50)オーバーライドvalmiralkey = primarykey(id、name = "pk_cities_id") } fun main(){database.connect( "jdbc:h2:mem:test"、driver = "org.h2.driver"、user = "root"、password = "") 取引 { addlogger(stdoutsqllogger)schemautils.create(都市、ユーザー)val Saintpetersburgid = cities.insert { it [name] = "St. Petersburg"} get Cities.idval Munichid = Cities.insert { it [name] = "Munich"} get Cities.idval pragueid = Cities.insert { it.update(name、stringliteral( "prague").trim()。サブストリング(1、2)) } [cities.id] val praguename = cities.selectall()。ここで{cities.id eq pragueid} .single()[cities.name] println( "praguename = $ praguename")usersert { それ[id] = "andrey" it [name] = "andrey" it [users.cityid] = saintpetersburgid } users.intert { it [id] = "sergey" it [name] = "sergey" it [users.cityid] = munichid } users.intert { it [id] = "eugene" it [name] = "eugene" it [users.cityid] = munichid } users.intert { it [id] = "alex" it [name] = "alex" it [users.cityid] = null} insert { it [id] = "smth" it [name] = "something" it [users.cityid] = null} users.update({users.id eq "alex"}){ it [name] = "alexey"} users.deletewhere {users.name like "%thing"} println( "すべての都市:")for(city in Cities.selectall()){println( "$ {city [cities。 id]}:$ {city [cities.name]} ") } println( "マニュアルJoin:") (ユーザーは都市の都市) .select(users.name、cities.name) 。どこ { (users.id.eq( "andrey")またはusers.name.eq( "sergey"))andusers.id.eq( "sergey")およびusers.cityid.eq(cities.id) } .foreach {println( "$ {it [users.name]} lives in $ {it [cities.name]}") } println( "外部キーに参加:") (ユーザーは都市の都市) .select(users.name、users.cityid、cities.name) .where {cities.name.eq( "St。Petersburg")またはusers.cityid.isnull()} .foreach {if(it [users.cityid]!= null){println( "$ {it [users.name]} lives at {it [cities.name]}") } else {println( "$ {it [users.name]} lives nowhere") } } println( "関数とグループ:") ((Cities Innerjoinユーザー) .select(cities.name、users.id.count()) .groupby(cities.name) ).Foreach {val CityName = it [cities.name] val usercount = it [users.id.count()] if(usercount> 0){println( "$ usercount user(s)live in $ cityname" )) } else {println( "$ CityNameに住んでいる人はいない") } } schemautils.drop(ユーザー、都市) } }
生成されたSQL:
SQL:存在しない場合はテーブルを作成します(id int auto_increment、name varchar(50)nolull、constraint pk_cities_idプライマリキー(id)) SQL:存在しない場合はテーブルを作成します(id varchar(10)、name varchar(50)not null、city_id int null、constraint pk_user_idプライマリキー(id)、制約fk_users_city_id__id delete拘束上の都市(id)参照更新制限時に) SQL:都市に挿入(名前)値( 'St. Petersburg') SQL:都市に挿入(名前)値(「ミュンヘン」) SQL:都市に挿入(名前)値(サブストリング(トリム( 'プラハ')、1、2)) sql:cities.id、cities.nameを選択します。 SQL:ユーザーに挿入(ID、name、city_id)values( 'andrey'、 'andrey'、1) SQL:ユーザーに挿入(ID、name、City_id)Values( 'Sergey'、 'Sergey'、2) SQL:ユーザーへの挿入(ID、name、city_id)Values( 'eugene'、 'eugene'、2) SQL:ユーザーに挿入(id、name、city_id)values( 'alex'、 'alex'、null) SQL:ユーザーに挿入(id、name、city_id)values( 'smth'、 'anthing'、null) SQL:ユーザーを更新しますname = 'Alexey' Where Users.Id = 'Alex'SQL:ユーザーから削除します。 SQL:cities.id、cities.nameをcities1からselect cities1:St。Petersburg2:Munich3:PR マニュアル結合: sql:select users.name、cities.name from users inernal in cities.id = users.city_id where(users.id = 'andrey')または(users.name = 'sergey')および(users.id = 'sergey')and(users.city_id = cities.id) セルゲイは外国の鍵でミュンヒョインに住んでいます: sql:select users.name、users.city_id、cities.name from users inenter in cities on Cities.id = users.city_id where(cities.name = 'St. Petersburg')または(users.city_id is null) アンドレイはサンクトペテルブルクに住んでいます 関数とグループ: SQL:cities.name、count(users.id)の都市からのcities.id = users.city_id group by cities.name1 users(s)live in St. Petersburg2 user(s)live(s )ミュンヘンで SQL:ユーザーが存在する場合はテーブルをドロップします SQL:都市が存在する場合はテーブルをドロップします
org.jetbrains.exposed.dao .transactions.transactionObjectユーザー:intidtable() {val name = varchar( "name"、50).index()val city = reference( "city"、cities)val age = integer( "age") }オブジェクトシティ:intidtable(){val name = varchar( "name"、50) } classユーザー(ID:EntityID <int>):Intentity(ID){companion object:intentityclass <user>(users)var name by Users.NameVar City REFREENDON USERS.CITYVAR AGE } class city(id:entityid <int>):intentity(id){companion object:intentityclass <city>(都市)var name by cities.nameval users by user referrerson users.city } fun main(){database.connect( "jdbc:h2:mem:test"、driver = "org.h2.driver"、user = "root"、password = "") 取引 { addLogger(stdoutsqllogger)schemautils.create(都市、ユーザー)val stpete = city.new { name = "St. Petersburg"} Val Munich = City.New { name = "Munich"} user.new { name = "a" city = stpete 年齢= 5} user.new { name = "b" city = stpete 年齢= 27} user.new { name = "c" city =ミュンヘン age = 42} println( "cities:$ {city.all()。averintring {it.name}}")println( "$ {stpete.name}のユーザー:$ {stpete.users.jointString {it.name} } ")println(" adults:$ {user.find {users.age greatereq 18} .jointosttring {it.name}} ") } }
生成されたSQL:
SQL:都市が存在しない場合はテーブルを作成します(ID int auto_incrementプライマリキー、名前Varchar(50)nolull) SQL:テーブルを作成しない場合はユーザー(ID int auto_incrementプライマリキー、名前varchar(50)null、city int not null、age int not null、constraint fk_users_city__id fortionキー(都市)参照都市(id)の削除制限上の更新上の制限制限) SQL:ユーザーでインデックスユーザー_NAMEを作成(名前) SQL:都市に挿入(名前)値( 'St. Petersburg') SQL:都市に挿入(名前)値(「ミュンヘン」) SQL:Cities.id、Cities.nameを都市から選択します 都市:ミュンヘン、サンクトペテルブルク SQL:ユーザーに挿入(名前、都市、年齢)値( 'A'、1、5) SQL:ユーザーに挿入(名前、都市、年齢)値( 'b'、1、27) SQL:ユーザーに挿入(名前、都市、年齢)値( 'C'、2、42) SQL:select users.id、users.name、users.city、users.age from users.city = 1users in St. Petersburg:A、B sql:select users.id、users.name、users.city、users.age from users.age> = 18adults:b、c
貢献する前に、貢献ガイドをご覧ください。
露出したプロジェクトに貢献することにより、お客様の貢献は、バージョン2.0のApacheライセンスに基づいてライセンスされることに同意します。