2022-01-01から1年間の記事一覧

区切り文字で区切られた最後のワード

区切り文字「.」で区切られた文字列から最後を求める aaa.bbb.ccc.ddd.eee区切り文字 「.」でない区切った各塊を表す正規表現が [^.]* であるから 区切り文字 「.」で区切られた最後のワードを求める正規表現 [^.]+$区切り文字+区切り文字 「.」で区切られ…

Apache POI Excel Sheet の全行 ⇒ 読込みObjecのリスト

Apache POI を使用した Excel の操作はずいぶん昔からコードを書いていた。 PushbackInputStream を使用する - Oboe吹きプログラマの黙示録 Excel 拡張子 (xls) (xlsx) 両方に対応した操作 Apache POI (2) - Oboe吹きプログラマの黙示録 Excel 拡張子 (xl…

mybatis で固定値をSQL Mapで指定するにはOGNL式を使う

開発プロジェクトの方針にSQL文に固定値を記述するのを絶対に禁止とか 融通の効かない、賛同できないことが時々ある。 プロジェクトによってそういうのもあって苦労するのだが、mybatis には OGNL書式が使える OGNL(Object Graph Navigation Language) の…

mybatis 可変長引数メソッドをSQLアノテーションで。。。

Javaメソッド可変長引数(variable length arguments)使用での SQLアノテーションリストを引数にした場合のサンプル @Select("<script>SELECT * FROM tb_items WHERE 1=1" + " AND item_id IN <foreach collection='list' item='id'" + " separator=',' open='(' cl</script>…

ThrowableFunction

Throwable 例外を投げて処理する関数型インターフェースを作っている。 yipuran-core/src/main/java/org/yipuran/function at master · yipuran/yipuran-core · GitHub使い道はいっぱいある。 Strin str = "[ \"A\", \"B\", \"C\" ]"; これを Jackson Object…

JUnit リスト比較

リストの完全一致の比較検証を簡単に記述できないかを考える。 比較対象のリストの要素がデータオブジェクトで、特定のフィールドは 比較対象にしたくない。というケースオブジェクトの比較対象にしたくないフィールドをコピーすることを以下を 使って簡単に…

Maven ビルドリソースの指定

以前、こんなものを書いたけど。。 Maven ビルド実行前にファイルコピー - Oboe吹きプログラマの黙示録改めてビルドでの指定は、こんな風に書く <build> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.json</include> </includes> </resource> </resources></build>

JUnit でログ出力を検証する。

JUnit で先日の System.setOut による標準出力先の切り替えを利用する方法である。 logger.info("AuthLogicImpl name = "+name); このロガーが標準出力する設定になっており、このログ出力をJUnit テストコードで検証する。 準備として便利な以下を使用でき…

JUnit で標準出力結果を検証

System.setOut で標準出力先を切り替えたのを元に戻す - Oboe吹きプログラマの黙示録より、切り替えによるJUnit で標準出力結果を検証するテストケースを以下のように書けば良い。 例) "OK"だけを標準出力するメソッドをテスト System.lineSeparator() を付…

System.setOut で標準出力先を切り替えたのを元に戻す

標準出力のバンドル FileDescriptor.out で戻せば良い。System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));例)ファイルに書いていて、元に戻す。 try(FileOutputStream fo = new FileOutputStream(new File("/work/test.txt"))){ …

リストの比較

JUnit リストの比較 Eclipse で、JUnit を書いていると、コード補完でうまく出てこなくて いつもイライラするので、メモ import org.hamcrest.CoreMatchers; import org.hamcrest.MatcherAssert; MatcherAssert.assertThat(list1, CoreMatchers.is(list2)); …

mybatis の foreach は、ネスト(入れ子)を書けるか?

Yes. 書けます。mybatis の foreach で、1つの foreach で良く使うのは、バルクインサートを書く時、、 INSERT INTO items ( id, name. length ) VALUES <foreach collection="list" item="e" separator=","> ( #{e.id}, #{e.name}, #{e.length} ) </foreach> バルクインサートでなお且つ、インサート文で指定するカラム…

Stream から 配列生成

Stream<T> の toArray(T::new);toArray の引数が IntFunction<A> なのであるからといって、 .toArray(v->new T[v]); と書く人は少ない。IntStream の toArray() が、int[] を生成するのだが、 int[] intary = IntStream.rangeClosed(1, 5).toArray(); Integer の配</a></t>…

JUnit static import

JUnit の時ぐらいしか使わない static import org.junit.Assert を使ってるのか、org.hamcrest.MatcherAssert を使ってるのか、 長いテストコードを素早く確認するのに、いちいち上までスクロールして確認なんて やってられない、 import static org.junit.A…

Java11 でテキストファイルを String に読込み

Java11 でテキストファイルを String に読込むのは、とても記述が楽だ。java.nio.file.Path に、java.nio.file.Files で対応できるのである。サンプル UTF-8 のファイル import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java…

【修正】オブジェクト間フィールドのコピー

先日の オブジェクト間フィールドのコピー - Oboe吹きプログラマの黙示録 を修正することにした。 それは、継承クラスにおいて継承元のフィールドをコピーすることを考慮すべきだからだ。 @Data @EqualsAndHashCode(callSuper=true) を書いているときのエン…

オブジェクト間フィールドのコピー

任意のオブジェクト間で、特定のフィールドだけをコピーするのに汎用的な方法を考えます。 これを考えるきっかけは、JUnit の assertEquals などを実行する前に、比較したくない属性フィールドは、 コピーして同じ値にしてしまおうという目的で、それを状況…

java.nio.file.Files の createDirectories

Files.createDirectory(Path path) は、path 生成元に存在しないディレクトリがあれば、 java.nio.file.FileAlreadyExistsException を発生するが、createDirectories なら、ディレクトリ作成できる権限、環境なら途中も生成 で作ってくれる。 try{ Path pat…

PostgreSQL で mySQL の last_insert_id() 相当をmybatis で実装したい

PostgreSQL の CURVAL() や、LASTVAL() で、シーケンスから求められるものではなく、 UUID のような型で Primary Key を構成するテーブル挿入直後のキーを取得したい。RETURNING を使う。insert文の次の書式 INSERT INTO テーブル VALUES (...) RETURNING PK…

MySQL last_insert_id() , PostgreSQL

SQL

PostgreSQL で MySQL の last_insert_id() と同様の機能、LASTVAL() (例) CREATE TABLE items ( id serial not null primary key, name varchar(128) not null ); 実行 INSERT INTO items (name) VALUES (‘Lemon’); SELECT LASTVAL(); でも、 www.postgres…

Java SHA256 の結果をどういう文字列にすべきか

Java SHA256 java.security.MessageDigest を使う場合結果として取得できる byte[] を、どういうHEX文字列にすべきか?String.format を使う手段もあるが、BigInteger の toString で16進を指定する手もある、 try{ byte[] hashbytes = MessageDigest.getI…

PostgreSQL conflict upsert のトリック

SQL

SELECT して存在しない時だけ、INSERT を行うという操作は、 2回のSQL実行文を流す=コードすることになる。PostgreSQL の CONFLICT の DO UPDATE の条件 WHERE句を 結果 False にすれば、すでにレコードが存在すれば、UPDATEが走らないことになる。よくクエ…

PostgreSQL constraint を書かない時の UPSERT

SQL

かなり昔、 oboe2uran.hatenablog.comを書いた。 constraint を書かない時の UPSERT、Primary Key しか書いていない時の UPSERT の書き方は、 前回の投稿のテーブルで、id が Primary Keyである場合、、、 前回の投稿 INSERT INTO sample (id, `point`, pric…

AWS Lambda タイムアウトの捕捉

AWS Lambda のタイムアウトをJava で作成するLambda関数に捕捉させる要件。 こういう要件、なんで Python で作らないんだという声は置いといて。。。 タイムアウトする Lambda は、ログ出力は、awslogs で CloudWatch で閲覧が可能という前提 Lambda のタイ…

AWS の Lambda関数のタイムアウトの最大時間、制限値

2018年の公式アナウンス aws.amazon.comこれしかないのか・・・15分って長いようで短い。。。

ReturnalConsumer の使いどころ

先日と同じことではあるが、、 Matcher の find() と group() (2) - Oboe吹きプログラマの黙示録ReturnalConsumer の使いどころとして、、 https://github.com/yipuran/yipuran-core/wiki#returnalconsumert String str = "aaa134_cd45_def"; String res =…

Matcher の find() と group() (2)

oboe2uran.hatenablog.comを書きましたが、Matcher だけにフォーカスすれば、 必ずマッチが約束されているなら、 Git-Hub にUPした https://github.com/yipuran/yipuran-core/wiki#returnalconsumert ReturnalConsumer を使って Pattern ptn = Pattern.compi…

Matcher の find() と group() (1)

java.util.regex.Matcher は、マッチをさせてから、一致部分を抽出というステップが 煩わしいと思っていた。例えばファイル名の一部が時刻文字列(yyyyMMddHHmmss)になっており、時刻まで求めるのに、 java.util.regex.Pattern 正規表現でマッチー>Matcher…

Maven package 実行のメモ

テストスキップしてパッケージ生成 mvn package -DskipTests=trueクリーンしてからパッケージ(よく使いそうな実行) mvn clean package -DskipTests=trueMaven プロジェクトーサブモジュール構成で、モジュールを指定する場合 書式は、、 mvn clean package…

JUnit static メソッドのmock

以前、書いていたが、、 JUnit4 でのモック - Oboe吹きプログラマの黙示録static メソッドのモック は、mockito-core だけでなく、mockito-inline も必要 <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.4.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mocki…</artifactid></dependency>