JAVA関連のことを調べてみた2021年10月09日

JAVA関連のことを調べてみた2021年10月09日

【Java】Spring JDBCで登録機能の実装

今回はJava SpringFWを用いて登録・更新・削除機能を実装してみました。
バリデーションについては、JPAではなくJDBCtemplateを使用しております。
以下はそれぞれに分けて解説をしておりますので、よければ参考にしてください!!

• 【更新】[Spring JDBCで更新機能の実装]()(作成中)
• 【削除】[Spring JDBCで削除機能の実装]()(作成中)
• 【まとめ】[Spring JDBCで登録・更新・削除]()(作成中)
• 【エラー解消】[Spring JDBCでエラーメッセージが消えない!?]()(作成中)

0, 目次

1, 完成品
2, 環境
3, 関連ソースコード  
  ① Form と entity
  ② Controller
  ③ Service
  ④ Impl と Custom と Repository
  ⑤ HTML と JavaScript
  ⑥ messages.properties と ValidationMessages.properties
  ⑦ pom.xml

4, 参考にしたサイト

元記事を表示

Couchbase Lite機能解説:データベースの使い方

## はじめに

Couchbase Liteの利用に資するために、下記のドキュメントの内容(英語)を整理します。

https://docs.couchbase.com/couchbase-lite/current/java/database.html

## 初期化

APIを使用する最初のステップは、イニシャライザーを呼び出すことです。
初期化前に他のAPIメソッドが呼び出されると、例外が発生します。

例1.データベース初期化

“`java
// Initialize the Couchbase Lite system
CouchbaseLite.init();
“`

## データベース作成/オープン

`Database`クラスを使用して、新しいデータベースを作成したり、既存のデータベースをオープンすることができます。
データベース名とオプションで`DatabaseConfiguration`を渡します。

注意すべき点は次のとおりです。

– データベースのオープン/作成は非同期プロセスです
– 指定されたデータベースが指定された場所またはデフォルトの場所に存在しな

元記事を表示

Java 17新機能まとめ

Java 17が2021/9/14にリリースされました。

http://mail.openjdk.java.net/pipermail/jdk-dev/2021-September/006037.html

機能的に多くのプログラマに関係ありそうな変更はApple Siliconに対応したくらいですが、LTSであるということが大きいと思います。

詳細はこちら
[Oracle Releases Java 17](https://www.oracle.com/news/announcement/oracle-releases-java-17-2021-09-14/)
[Java SE 17 Platform JSR 392](https://openjdk.java.net/projects/jdk/17/spec/)
[JDK 17 GA Release](https://jdk.java.net/17/)

APIドキュメントはこちら
[Overview (Java SE 17)](https://cr.openjdk.java.net/~iris/se/17/build/late

元記事を表示

opencsvのCSV書き出し(CSVWriter)で囲み文字をなくす

# 結論

CSVWriterの引数多いほうのコンストラクタにICSVWriter.NO_QUOTE_CHARACTERを渡す。
char型で定義されているので`¥u0000`を渡してもいいはず。

# 実例

“`java
Path p = Paths.of(‘xxx’);
try (
BufferedWriter bw = Files.newBufferedWriter(p, StandardCharsets.UTF_8);
CSVWriter writer = new CSVWriter(writer
, CSVWriter.DEFAULT_SEPARATOR
, CSVWriter.NO_QUOTE_CHARACTER
, CSVWriter.DEFAULT_ESCAPE_CHARACTER
, CSVWriter.DEFAULT_LINE_END) {
// …
}
“`

# 参考

http://opencsv.sourceforge.net/apidocs/com/opencsv/CSVWriter.html#CSVWr

元記事を表示

SpringBootの@Transactionalが効かない!

# 結論

### DIでインジェクトしたクラスのpublicメソッドじゃないとだめ。

# それまでの流れとか

SpringBootのCommandLineRunnerを使ってバッチ処理を作っていました。
もともと入力のCSVから別形式のCSVへの変換だったのですが、仕様変更で急遽DB操作を行うことになり大慌てで対応することに。
今後改修もないようなちょっとしたバッチ処理なので`JDBCTemplate`で実装することにしました。

1ステップ処理でワークテーブルをdelete-insertで洗い替えするだけなので、トランザクション不要でExitコードがエラーなら後続バッチを動かさなきゃいいかな、と考えていたのですが運用上ロールバック欲しいらしいので後付けで対応。

## publicメソッドにしか@Transactionalをつけてもだめ。

publicメソッドにしか@Transactionalつけられなかったはず、と考えながら実装しても機能せず:0

https://docs.spring.io/spring-framework/docs/4.2.x/spring-frame

元記事を表示

Javaのequalsメソッドについて

“`equalsSample.java

//(~省略~)

// 正しい例
private final String 定数1 = “hogehoge”;
private String 変数1 = null;

if(定数1.equals(変数1)){
System.out.println(“同じ値です”);
}else{
System.out.println(“違う値です”);
}

// nullPointExceptionは発生せずに、「違う値です」が出力される。

// 悪い例
private final String 定数1 = “hogehoge”;
private String 変数1 = null;

if(変数1.equals(定数1)){
System.out.println(“同じ値です”);
}else{
System.out.println(“違う値です”);
}

// nullPointExceptionが発生する。

“`

上記のように、equalsメソッドで定数と変数を比較する場合は、定数を先頭に記述すると良い。

元記事を表示

【Spring】@Transactional関連メモ

#### ① ロールバックするタイミングは「非検査例外が発生したときのみ」
  → rollbackForプロパティで指定した検査例外はロールバック対象とすることができる

“`
@Transactional(rollbackFor=Exception.class)
“`


#### ② @Transactionalはpublicメソッドにつけた時のみロールバック有効


#### ③ @Transactionalを付けたpublicメソッドは別クラスからの呼び出し時のみロールバック有効


#### ④ 外部トランザクションが開始している場合はそのトランザクションを利用する
  → propagationプロパティで制御。デフォルト値(PROPAGATION_REQUIRED)が外部トランザクションをそのまま利用する設定となっている


#### ⑤ @Transactionalをつけなかった場合、トランザクションは発生しない?

##### 前提
・Spring Data JPAを利用している
・RepositoryクラスはCrudRepositor

元記事を表示

Android enumではなくIntDefを使ってdata classを組み立てる

# 環境
Android Studio Arctic Fox | 2020.3.1 Patch 2
Kotlin 1.5.31

# 概要

列挙型の値を使うときに、`@IntDef`を生かしてdata classを組み立ててみます。

# なぜenumではなくIntDefを使うのか

Google I/O 19で、`Build apps for the next billion users` という動画があります。

この中の、`Reduce your app size`に挙げている項目で、`

元記事を表示

Base64.getUrlEncoderとBase64エンコード+URLエンコードは違う

## はじめに

Webシステム間で文字列をやり取りする際に、URLクエリストリングで受け渡すことにした。
その際に、受け渡し文字列を暗号化+エンコードする以下のような設計を行った。

インタフェース項目全体を1~3の順序で暗号化とエンコードを行う
1. AESで暗号化
2. Base64エンコード
3. URLエンコード

自分たちのシステムは1~3の処理がされた文字列を受け取って、デコードと複合を行う側だった。

## 発生した問題

システムテストの段階で暗号化+エンコードされた文字列を受け取ったが、デコード+複合の処理が上手くいかなかった。
具体的には、デコードで失敗していた。

## 問題発生時の実装内容

先方は、エンコード仕様の2.と3.を以下の処理で実装していた。

“`Java
Base64.getUrlEncoder().withoutPadding().encodeToString(文字列)
“`
これで出てきた文字列を受け取っていたが、当方のデコードではうまく処理できなかった。

暗号化やエンコード処理の知識も大してなく、Javaの具体的な言語仕様を把握

元記事を表示

JavaとPythonの比較

ごくごく簡単なまとめですが、JavaとPythonを比較してみました。

|項目|Java|Python|
|:———–|:———– |:———– |
| クラス | 必ず必要 | 書かなくてもいきなり処理のベタ書きでも良い |
| 変数定義時の型指定 | 必要 | 不要(動的型付け) |
| long型 | あり | なし(整数値はすべてint型でOK) |
| 複数戻り値 | 不可 | 可 |
| インデント | 任意 | 強制 |
| 空のオブジェクト | null | None |
|多重継承| 不可| 可 |
| switch文 | あり | なし |
| 定数定義構文 | あり | なし |
| if文での変数スコープ | if文内でスコープ形成する | if

元記事を表示

Java基礎編

# Java基礎編

————————————————————

## プリミティブ型
– byte型:8ビット整数 -128~127
– short型:16ビット整数 -32,768~32,767
– int型:32ビット整数 -2,147,483,648~2,147,483,647
– long型:64ビット整数 -9,223,372,036,854,775,808~9,223,372,036,854,775,807
– float型:32ビット単精度浮動小数点数
– double型:64ビット倍精度浮動小数点数
– boolean型:true or false
– char型:16ビットUnicode文字 \u0000~\uFFFF

————————————————————

## 参照型
– Object型:すべてのクラスは暗黙的にこのクラスを継承して作られる
– Byte型:8ビット整数 -128~127
– Sho

元記事を表示

2021年Spring設定備忘録

初期設定はたまにしかしないから、よく忘れる。

# Database作る
仮にdebian系でPostgreSQLを使うものとする。

“`
sudo apt install postgresql
sudo -u postgres psql
CREATE DATABASE demodb;
ALTER ROLE postgres WITH PASSWORD ‘postgres’;
“`

マイグレーションツールを使うにしてもデータベースの設定は自分でやる。

# STSを持ってきて展開する
Spring Tool Suite を https://spring.io/tools からダウンロード。
/optあたりに置くのがよいかも。

# STSを起動してプロジェクトを作る
File -> New -> Spring Starter Project
デフォルトは Maven だけど Gradle のほうが好きだ。
Jar ではなく War を選ぶとよいかも。
ミニマムだと依存関係は以下のようなものか。

– JDBC API
– Spring Data JPA
– Flyway Mig

元記事を表示

汎用デシジョンテーブルIMSが新たに追加になりました。

#はじめに
ifLinkマイクロサービスを開発している八教と申します。
新たにデシジョンテーブルにより判定して結果を送信するフィルターIMS
「汎用デシジョンテーブルIMS」が追加されましたので、紹介させていただきます。

#ifLinkとは
https://iflink.jp/

#汎用デシジョンテーブルIMSについて
IMSのデータがデシジョンテーブルに合致するか判定し、
最初に合致したデシジョンテーブルの結果を返却します。

デシジョンテーブルってなに?という方は以下参照
https://medium-company.com/%E6%B1%BA%E5%AE%9A%E8%A1%A8/

例えば入力に乗車駅、降車駅、支払いを出力するIMSがあった場合、
それらの入力を受け取ってデシジョンテーブルより運賃を算出。
算出結果をトーストに表示することができます。

IF-THEN のイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780474/f5ea05a6-b607-e1ff-

元記事を表示

java:5: エラー: この文字(0x98)は、エンコーディングwindows-31jにマップできません

#はじめに
はじめまして。
駆け出しJavaエンジニアです。
研修中初歩的なところで躓きまくっているので、アウトプットとして駆け出しエンジニアの方々のお力になれたらうれしいです。
環境はwindowsで、

#今回のエラーと直し方
java:5: エラー: この文字(0x98)は、エンコーディングwindows-31jにマップできません
というコンパイルエラーが発生しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1302414/7dca4bd2-f3b1-c290-e46e-9118a6484c14.png)

結論を言ってしまうとサクラエディタの文字コードが間違っておりました。
右下の文字コードのところクリックで他の文字コードに変えることができます。
デフォルト設定がUTF-8で、その部分をSJISにしたら無事コンパイルされました。

以下の@HachiwareWorks様が書いた記事のやり方でも無事コンパイルできたので、参考として張らせていただきます。

#参考にしたサイ

元記事を表示

続・GradleでCodeArtifact自動化

結論だけ読みたい人は[こっち](#利用例)

## はじめに
一応、[前回](https://qiita.com/TAC_yacht/items/eb4ca035491dc9a2b77f)それなりにコピペで済むようにはしたものの、冗長であると言わざるを得ない。
そこでプラグインにした。

## プラグインの設定

“`groovy:build.gradle
plugins {
id “io.github.tac-yacht.codeartifact-repository” version “0.1”
}
“`
ほかのプラグインも使ってるときは真ん中の行だけ追加
※“`settings.gradle“`で“`pluginManagement.repositories“`を設定してる時は“`gradlePluginPortal()“`の追加を忘れずに

ポータルで各種プラグインごとに例示されてるのと同じではある

## レポジトリの設定
3種類から選べる。

### style A
“`aws codeartifact get-repository-endpoint`

元記事を表示

【初見者向け】Javaのリファクタリングツール OpenRewriteを少し検証

# はじめに
こんにちは。
少し前に、「OpenRewrite」というJavaのリファクタリングで使える?ツールの存在を知って
どのようなものか興味を持ったので、簡単に検証してみた記録です。

# OpenRewriteとは
### OpenRewriteの概要
>OpenRewriteは、Java言語に早期に焦点を当てて、フレームワークの移行、脆弱性のパッチ、およびAPIの移行のための大規模な分散ソースコードのリファクタリングを可能にします。

### OpenRewriteは何をしますか?
>OpenRewriteは、ソースコードを表す抽象構文木(AST)に変更を加え、変更されたツリーをソースコードに出力することで機能します。その後、コードの変更を確認してコミットできます。ASTの変更はビジターで実行され、ビジターはレシピに集約されます。OpenRewriteレシピは、元のフォーマットを尊重する最小限の侵襲的な変更をソースコードに加えます。

>たとえば、手動で行うのではなく、すべてのテストファイルで静的インポートを一貫して使用する場合は、OpenRewriteが提供するUseSt

元記事を表示

エンドロールムービーをprocessingで作る #2 【文字スクロール・画像表示】

**Processing**と**ffmpeg**を用いた結婚式風エンドロールムービー作成方法紹介の**2回目**です。
今回は**文字のスクロール**と**画像表示**について紹介します。
1回目に紹介した**連番画像作成・アニメーション**については[こちらをご覧ください](https://qiita.com/takenoko300/items/538f5c3a3fb94758ba03)。

https://qiita.com/takenoko300/items/538f5c3a3fb94758ba03

# 今回作成した動画
![out3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873853/19af64dd-e7ad-fcdc-809a-148644b749b2.gif)

## プログラミング内容説明

### 文字のスクロール
文字のスクロールはループごとにY座標の位置を少しづつ変化させていくことで実現します。
そのため、ループごとにカウントアップされるグローバル変数(下記プログラム

元記事を表示

Javaでファイルから設定値を読み込む(簡易的な方法)

今回ご紹介するのはファイルから設定値を読み込む方法です。
XMLを使ったりいろいろ方法はあると思いますが、
今回は比較的簡易な方法をご紹介します。

#今回読み取りたいファイルの形式
例えば以下のようなファイルを読み取りたいとします。

“`:mysettings.env
#読み取りたいファイルです
UserID = 1234
Gender = Male
“`

\#から行末まではコメントとみなされます。
=の左が設定名、右が設定値となっており、一行一つ設定が書かれます。
=の前後に空白が入っている場合は、それらを取り除いて読み取ります。
つまり、設定名や設定値が「UserID 」、「 1234」などにはならないということです。

#使用するメソッド
今回使用するのはjava.util.Properties.loadです。
このメソッドを用いるとwindowsのiniファイルのような
key=value型の書き方をするファイルから設定値を読み取れます。
また、今回はご紹介しませんが、Propertiesクラスにはxmlからファイルを読み取るメソッドもあります。

[公式のリファレン

元記事を表示

toStringメソッドの実装がToStringBuilderクラスを使えば楽になる

# はじめに

クラスのメンバ変数の値をログに出力する際に、toStringメソッドを実装して各メンバ変数の値を含めてString型の値を返すような実装をしていると思う。
メンバ変数が少ないと楽だが、メンバ変数が多い場合は実装するにも手間がかかる。
そのような場合、ToSTringBuilderクラスを使用するとtoStringメソッドの実装が楽になるのでどのように出力されるのか簡単に試してみる。

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/ToStringBuilder.html

# ToStringBuilderを試してみる

## プリミティブ型のメンバ変数を持つクラス

プリミティブ型のメンバ変数を持つクラスを用意してToStringBuilderを実行してみる。

“`java
public class Student {

int student_number = 0;

String firstName = null;

元記事を表示

XSSF(xlsx)を扱う3種類の方法とメモリ消費量について

注意: 基本的にはこのあたりのドキュメントを読めばよい話ですが、自分用に簡単にまとめておきますね(´・ω・`)

– https://poi.apache.org/components/spreadsheet/
– http://poi.apache.org/components/spreadsheet/how-to.html#xssf_sax_api

JavaでExcelを操作するライブラリであるApache POIでは、HSSFとXSSFという2種類に対応しています。ざっくりいうとHSSFは拡張子がxlsのファイル、XSSFは拡張子がxlsxを扱います。Excel 2007以降はxlsxが標準となっているので、ここではXSSF/xlsxについて記述します (新規システム構築でHSSF/xls対応が必要なことはない…よね?)。

さて、XSSF/xlsxの読み書きに際して、Apache POIは大きく分けて3種類のAPIを用意しています。

① User API

読み書き両方が可能。Google検索でよく引っかかるのは大体これ。いかにもJavaらしいオブジェクト指向的なAPIで

元記事を表示

OTHERカテゴリの最新記事