Kotlin Coroutines のために AWS SDK for Java でノンブロッキングを実現する

アスクルの こたにん (@Kotanin0) です。

  • Kotlin で AWS SDK を利用するには、今現在はJavaのものを使う必要がある
  • AWS SDK for Java 2.x の非同期プログラミングはブロッキングされる
  • AWS SDK for Java でノンブロッキングを実現する
  • まとめ

Kotlin で AWS SDK を利用するには、今現在はJavaのものを使う必要がある

KotlinでAWSのいろいろを操作する際に、AWSが提供しているSDKを利用すると便利です。
が、2022年3月現在、Kotlin向けのAWS SDKはプレビュー版で、正式リリースがされていません。
AWS SDK for Kotlin (デベロッパープレビュー)

そのため、今現在は AWS SDK for Java を使う必要があります。
AWS SDK for Java

続きを読む

Kotlin における trailing comma(末尾カンマ) について

アスクルの こたにん (@Kotanin0) です。

2020年のリリースですが、Kotlin 1.4からtrailing commaが実装 されました。
trailing comma とは 末尾カンマ と訳されるもので、関数などの引数のリストの末尾にあるカンマのことを指します。

fun usingComma(
    first: String,
    second: String,
    third: String, // <- ココのカンマのことを trailing comma(末尾カンマ) と呼ぶ
)

めちゃくちゃ細かい仕様ですが、Kotlin1.4からは、このtrailing commaを記述できるようになりました。

続きを読む

MyBatisで大量データを扱う

こんにちは。ASKULのほかほかごはんです。最近は商品データに関するバッチ開発を担当しています。

バッチ開発では、社内外へデータを連係する際に大量のデータをDBから取得し、csvなどのファイルに加工する機会が多くあります。 本記事では効率的にQuery結果をハンドリングする方法として、 MyBatisの ResultHandler と Cursor を紹介します。

なお、弊社ではSpring Boot上でMyBatisを利用しています。 本記事のサンプルコードもその前提で紹介させていただきます 🙇‍♂️

続きを読む

MyBatis 動的SQL の trim が便利なので使い方のまとめ(ついでにコード読んでみた)

アスクルの こたにん (@Kotanin0) です。

アスクルでは、O/Rマッパーに MyBatis3 を使っています。
MyBatis は、単純なCRUD操作だけでなく、 動的SQL という便利な拡張構文があります。

たとえば、本の情報を管理するテーブルから、本の一覧を抽出したいSQLがあったとします。

  • 本のタイトルを指定しなければ全件SELECT
  • 本のタイトルを指定していればWHERE句を入れてSELECT

と、本のタイトルの指定有無でif文を書きたいような場面では、次のようにif要素を利用すると解決できます。

<select>
    SELECT * FROM BOOK
    <if test="title != null">
        WHERE title LIKE #{title}
    </if>
</select>

MyBatis3動的SQL は、上のようなif要素をはじめとして、次の9種類の要素が用意されています。

  • if
  • choose
  • when
  • otherwise
  • trim
  • where
  • set
  • foreach
  • bind

その中でもtrim要素がとても便利だったので、今回はtrim要素に限定して紹介していきます。

続きを読む

Kotlin 1.6ではList.minus(List)の処理速度がデフォルトだと若干遅くなってしまうという話

こんにちは。ASKULのほかほかごはんです。今回はKotlin1.6におけるCollection操作についての記事になります。

List1からList2の要素を除去する場合、Kotlinでは次のように書けます。

val result = list1 - list2

このコードはKotlin 1.6ではこう書いたほうがパフォーマンスがよくなります (とIntelliJ先生が教えてくれました 😇)

val result = list1 - list2.toSet()

しかし、Kotlin 1.5まではこのコードについてIntelliJがアドバイスをくれることはなかったはずです 🤔

これは、Kotlin 1.6の minus が Kotlin 1.5 以前とは異なり、次のように実装されているからです。

続きを読む

ASKUL Engineering BLOG

2021 © ASKUL Corporation. All rights reserved.