Skip to content

Instantly share code, notes, and snippets.

Avatar

Toshihiro Nakamura nakamura-to

View GitHub Profile
@nakamura-to
nakamura-to / ContextualAbstractions.kt
Created May 31, 2022
KotlinでScala3のContextual Abstractionsみたいなもの
View ContextualAbstractions.kt
// 下記の記事の最後のコード例をKotlinで書いてみた
// https://zenn.dev/hinastory/articles/c8d5267ea43ed6
package hello.kotlin
data class Person(val name: String, val age: Int)
data class Japanese(val name: String, val age: Int, val info: String)
interface CanGreet<T> {
fun T.hello()
@nakamura-to
nakamura-to / AssociationExample.kt
Created Nov 3, 2021
Komapperでエンティティの関連づけを行うAPIの例
View AssociationExample.kt
val d = Dept.meta
val e = Emp.meta
val query = SqlDsl.from(d).innerJoin(e){ d.id eq e.deptId }.associate(d, e)
val aggregate = db.runQuery { query }
val map: Map<Dept, Set<Emp>> = aggregate.oneToMany(d, e)
@nakamura-to
nakamura-to / Address.java
Last active Oct 30, 2021
Domaで@Embeddableの代替策
View Address.java
public class Address {
public String ctiy;
public String street;
public Address(String city, String street) {
this.city = ctiy;
this.street = street;
}
}
@nakamura-to
nakamura-to / extension.kt
Created Aug 18, 2021
拡張関数の利用範囲を限定する方法
View extension.kt
fun String.globalExtension() {
println(this)
}
class Scope {
fun String.narrowExtension() {
println(this)
}
}
@nakamura-to
nakamura-to / where-declaration-composition.kt
Created Aug 17, 2021
KomapperでWhere宣言を合成する例
View where-declaration-composition.kt
package org.komapper.quickstart
import org.komapper.annotation.KomapperAutoIncrement
import org.komapper.annotation.KomapperEntity
import org.komapper.annotation.KomapperId
import org.komapper.core.dsl.EntityDsl
import org.komapper.core.dsl.SchemaDsl
import org.komapper.core.dsl.expression.ColumnExpression
import org.komapper.core.dsl.scope.WhereDeclaration
import org.komapper.jdbc.JdbcDatabase
@nakamura-to
nakamura-to / sql.md
Last active Apr 20, 2020
KotlinのDSLでSQLっぽく書くために
View sql.md

selectするカラムの選択

ラムダで指定できなくはないが、型パラメータが面倒臭いことになる

DSLの利用コード

val query = select({ it.name }, from = ::_Emp) { e -> where { eq(e.id, 1) }}

DSLの定義

View 製品移動.kt
val query = select(::_製品移動) { a ->
val b = leftJoin(::_倉庫) { b ->
eq(a.移送元倉庫id, b.倉庫id)
}
val c = leftJoin(::_倉庫) { c ->
eq(a.移送先倉庫id, c.倉庫id)
}
associate(a, b) { 製品移動, 倉庫 ->
製品移動.移送元倉庫 = 倉庫
}
@nakamura-to
nakamura-to / sql-annotation.md
Last active Jan 13, 2019
Doma 2.22.0にて、SQLをアノテーションに記述するための機能を実験的に追加する
View sql-annotation.md

追加するアノテーションは @Sql の1つのみ

  • 前提として@Sql 導入前までのバージョンとの互換性は維持する
  • @Sql のFQNは org.seasar.doma.experimental.Sql

Selectの場合

(これまで通り)SQLをファイルから読む

@Select
Emp select();
@nakamura-to
nakamura-to / raw-string-literals-1.md
Last active Nov 5, 2020
Doma 3でJava 11のRaw String Literalsに対応するとしたら
View raw-string-literals-1.md

追加するアノテーションを @Sql の1つにする案

Selectの場合

SQLはファイルから読む(暗黙バージョン)

@Select
Emp select();

SQLはファイルから読む(明示バージョン)

@nakamura-to
nakamura-to / FooDao.java
Created Nov 4, 2017
可視性がパッケージレベルのDaoを使う
View FooDao.java
@Dao
public interface FooDao {
public default <R> R findByIds(List<FooId> ids, Collector<Foo, ?, R> collctor) {
FooInteranlDao dao = DaoFactory.get(FooInteranlDao.class);
return Lists.partition(ids, 5000).stream() // partition は List<A> を 第二引数の数ごと区切ってList<List<A>> にする処理です
flatMap(dao::findByIdsInternally)
collect(collctor);
}
}