2024-09-27

spring 複合主キー 外部キー 結合

ソース:

no29571/user at ex-join (github.com)


N+1問題

left joinしつつも結合テーブルの列はselectせず

外部テーブルを個別にselectしてしまう。

外部キーが複数あれば、外部キーの数×N+1。

FetchType.LAZYで必要なときにだけ外部テーブルをselect。

件数の多い一覧で、外部テーブルの属性参照は要注意。


キーワード:

@EmbeddedId

@Embeddable

@MapsId

@ManyToOne


関連キーワード:

@IdClass

spring security role enum

 ソース:

no29571/user at ex-role (github.com)


キーワード:

@Enumerated

hasAnyAuthority

hasAnyRole

hasRole


参考サイト:

Spring Securityのロールの命名規則 | とのログ (tono-n-chi.com)

spring webjars bootstrap ナビゲーション

ソース:

no29571/user at ex-webjars (github.com)


pom.xmlにorg.webjarsを追加

走り書き: 依存関係を追加したら (no15maid.blogspot.com)


キーワード:

th:replace

spring @Version 排他制御 FOR UPDATE

 ソース:

no29571/user at ex-lock (github.com)


@Version(楽観ロック)を使用しつつ

悲観ロックをかけることも可


キーワード:

楽観ロック 悲観ロック

FOR UPDATE

@Version

spring audit version

spring jpa auditing

 ソース:

no29571/user at ex-audit (github.com)


キーワード:

@CreatedDate

@CreatedBy

@EntityListeners

@EnableJpaAuditing

AuditorAware

@MappedSuperclass

temporals.format


参考サイト:

JPAで最終更新情報の更新を自動化して画面に表示するまで #java8 - Qiita

【SpringBoot】LocalDate型のthymeleafでフォーマットして表示する #Java - Qiita

spring security ログインのカスタマイズ

 ソース:

no29571/user at ex-login (github.com)


環境によって暗号結果が異なるので

data.sqlのinsert文で作成したユーザでうまくログインできない場合は

プログラムから作成する

(configとnav.htmlの調整要)


参考サイト:

Spring Security 6.0 入門~はじめに~|Spring Security 6.0 入門 (zenn.dev)

【Java】ログイン画面を作りたい #SpringBoot - Qiita

spring validation アノテーション

ソース:

no29571/user at ex-validation (github.com)


キーワード:

@Column

data transfer object

spring bean validation

validation アノテーション

相関チェック アノテーション

message.properties

fields.hasErrors


関連キーワード:

fields.detailedErrors

ValidationMessages.properties

ModelAndView


参考サイト

SpringBoot基礎 バリデーション編(入力チェック) #BeanValidation - Qiita

Spring Bootで入力値の検証 - かずきのBlog@hatena (okazuki.jp)

【Spring Boot】フォームクラスでリクエストパラメータの受取 (zenn.dev)

【Spring Boot】独自アノテーションを作成してバリデーションチェック #Java - Qiita

spring postgresql jpa crud

ソース:

no29571/user at ex-crud (github.com)


キーワード:

spring MVC

@Entity

JpaRepository

@Service

@Controller


参考サイト

【SpringBoot】JavaでCRUDアプリを作る #crud - Qiita

java spring maven helloworld

ソース:

no29571/user at ex-hello (github.com)


キーワード:

@Controller

thymeleaf


参考サイト:

走り書き: Eclipseでspring (no15maid.blogspot.com)

走り書き: Spring Starter Project (Spring Initializr) (no15maid.blogspot.com)

2024-09-26

eclipse github クローン(各ブランチ)

Gitパースペクティブ

Gitリポジトリーをクローンし、このビューへ追加(ボタン)

クローンURI

ロケーション(と認証)を入力

ローカル宛先ディレクトリを確認(workspaceの方がよければ変更)

ブランチ:必要なブランチを選択

完了


※↑↓ディレクトリの指定を間違えやすいので

フォルダ内を確認しながら実施


リポジトリー名を右クリック

プロジェクトのインポート

Javaパースペクティブに切り替えて実行確認


2024-09-19

github プッシュ 拒否 non-fast-forward

eclipse

gitパースペクティブ

gitリポジトリー

右クリック

プル

上記でマージしてから(コミット)プッシュ


参考サイト

non-fast-forward エラーの扱い - GitHub Docs

2024-09-15

java jira

 参考サイト

Java のJira データエンティティを使用したObject-Relational Mapping (ORM) (cdata.com)

Jira Data Center トライアル版のインストール | Jira アプリケーション Data Center 10.0 の管理 | アトラシアン製品ドキュメント (atlassian.com)

Jira およびプロジェクト タイプの概要 | Jira アプリケーション Data Center 10.0 の管理 | アトラシアン製品ドキュメント (atlassian.com)

github ユーザー追加

参考サイト

publicのみ

コラボレーターを個人リポジトリに招待する - GitHub Docs

EclipseでGitHub

●レポジトリ登録

参考サイト

EclipseとGitHubの連携方法(メニューで操作・Java編) (zenn.dev)


GitHub

パーソナルアクセストークン作成

リポジトリ作成(空)


Eclipse

プロジェクト名を右クリック

チーム

プロジェクトの共有

Git

プロジェクトの親フォルダ内のレポジトリを使用または作成(チェックON)

プロジェクトをクリック

リポジトリの作成

完了


●コミットとプッシュ(初回)

プロジェクト名を右クリック

チーム

コミット

Gitステージング

ステージされていない変更

選択されていないファイルを含むすべてのファイルをインデックスに追加(右上ボタン)

コミット


プロジェクト名を右クリック

チーム

ブランチのプッシュ'master'

ロケーションと認証を入力

パスワードはパーソナルアクセストークンを入力

(セキュアストアに保管)

プレビュー

プッシュ


●コミットおよびプッシュ

Gitパースペクティブ

Gitステージング(タブ)

選択されていないファイルを含むすべてのファイルをインデックスに追加

コミットおよびプッシュ

●編集の取り消し

Gitパースペクティブ

Gitステージング

ステージされていない変更

右クリック

HEADリビジョンと置換


●コミット(リモートプッシュ)の取り消し

Gitパースペクティブ

ヒストリー

右クリック

コミットを戻す


参考サイト

2024-09-05

Spring Security

参考サイト

Spring Security 6.0 入門~導入~|Spring Security 6.0 入門 (zenn.dev)

【Java】ログイン画面を作りたい #SpringBoot - Qiita


pom.xmlに依存関係を追加

(プロジェクトの新規作成時にSecurityのSpring Securityを選択)

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>


旧バージョンのantMatchersメソッド → requestMatchers

参考サイト

Spring Security 5.4〜6.0でセキュリティ設定の書き方が大幅に変わる件 #Java - Qiita


画面制御(表示・非表示)

<dependency>

<groupId>org.thymeleaf.extras</groupId>

<artifactId>thymeleaf-extras-springsecurity6</artifactId>

</dependency>

thymeleaf-extras-springsecurity~

spring-security-coreのバージョンに合わせる。

参考サイト

thymeleaf-extras-springsecurityつかう - kagamihogeの日記 (hatenablog.com)

依存関係を追加したら

開発環境を再起動

それでもダメなら

Eclipseの場合

1.実行 - Marven clean

2.プロジェクト - Marven プロジェクトの更新


または

コマンドプロンプト

プロジェクトのルートで

(Gradleの場合)

gradle build

(Mavenの場合)

mvn clean install

@NotNull jakarta.validation.constraints エラー

「@NotNull」のimport候補に

jakarta.validation.constraintsが出ない。

(旧バージョン:javax.validation.constraints)


下記手動追加もエラー。

import jakarta.validation.constraints.NotNull;


依存関係の設定(pom.xml)が必要

(プロジェクトの新規作成時にI/OのValidationを選択)

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-validation</artifactId>

</dependency>

2024-09-04

sts import

ソースコードのエラー部分でホバー

Fix project setup...

Add archive: jakarta.persistence~

(旧バージョンのjavaxはjakartaに置換)

Import  ~ (jakarta.persistence)


staticメンバーは手動追加(import static)

import static についての参考サイト

static インポート (oracle.com)

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発(株式会社NTTデータ 株式会社NTTデータグループ)|翔泳社の本 (shoeisha.co.jp)

IntelliJ Communityでspring

下記サイトでプロジェクトのベースを作成

Spring Initializr

設定内容は下記と同様

走り書き: Spring Starter Project (no15maid.blogspot.com)

ダウンロードしたzipを解凍して

IntelliJからbuild.gradleを開く


参考サイト

Spring BootのWebアプリケーションの基本① ~IntelliJの使い方とMVCモデルの概要~ #Java - Qiita

Eclipseでspring

Pleiades All in Oneをダウンロード

参考サイト

Eclipse入門~初めてのインストールから起動、概要までを基礎から解説 (1/3)|CodeZine(コードジン)


ファイル - 新規 - Springスターター・プロジェクト

設定内容は下記と同様

走り書き: Spring Starter Project (no15maid.blogspot.com)

dependencies(gradleはbuild.gradle)

dependencies {

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

implementation 'org.springframework.boot:spring-boot-starter-security'

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

implementation 'org.springframework.boot:spring-boot-starter-validation'

implementation 'org.springframework.boot:spring-boot-starter-web'

implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'

compileOnly 'org.projectlombok:lombok'

developmentOnly 'org.springframework.boot:spring-boot-devtools'

runtimeOnly 'com.oracle.database.jdbc:ojdbc11'

annotationProcessor 'org.projectlombok:lombok'

testImplementation 'org.springframework.boot:spring-boot-starter-test'

testImplementation 'org.springframework.security:spring-security-test'

testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

}


データベース

runtimeOnly 'com.oracle.database.jdbc:ojdbc11'

または

runtimeOnly 'org.postgresql:postgresql'


手動で追加

implementation 'org.webjars:jquery:3.7.0'

implementation 'org.webjars:bootstrap:5.3.1'

implementation 'org.webjars:webjars-locator:0.40'

要調査 webjars-locator-core

dependencies(mavenはpom.xml)

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-validation</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.thymeleaf.extras</groupId>

<artifactId>thymeleaf-extras-springsecurity6</artifactId>

</dependency>


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

<scope>runtime</scope>

<optional>true</optional>

</dependency>

<dependency>

<groupId>org.postgresql</groupId>

<artifactId>postgresql</artifactId>

<scope>runtime</scope>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<optional>true</optional>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework.security</groupId>

<artifactId>spring-security-test</artifactId>

<scope>test</scope>

</dependency>

</dependencies>


データベース

<dependency>

<groupId>org.postgresql</groupId>

<artifactId>postgresql</artifactId>

<scope>runtime</scope>

</dependency>

または

<dependency>

<groupId>com.oracle.database.jdbc</groupId>

<artifactId>ojdbc11</artifactId>

<scope>runtime</scope>

</dependency>


手動で追加

<!-- WebJars -->

<dependency>

<groupId>org.webjars</groupId>

<artifactId>bootstrap</artifactId>

<version>5.3.1</version>

</dependency>

<dependency>

<groupId>org.webjars</groupId>

<artifactId>jquery</artifactId>

<version>3.7.0</version>

</dependency>

<dependency>

<groupId>org.webjars</groupId>

<artifactId>webjars-locator-core</artifactId>

</dependency>

application.propertiesサンプル

 resources/application.propertiesに追記


※ oracle

# データベース接続情報(SIDの場合は「:」、サービス名の場合は「/」)

# spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE

spring.datasource.url=jdbc:oracle:thin:@localhost:1521/XEPDB1


※ postgresql

# データベース接続情報

spring.jpa.database=POSTGRESQL

spring.datasource.url=jdbc:postgresql://localhost:5432/ex_db1

spring.datasource.username=ex_user

spring.datasource.password=example

spring.datasource.driverClassName=org.postgresql.Driver


# 実行されるSQLをログに出力する

spring.jpa.show-sql=true

# SQLをログに出力する際に整形する

spring.jpa.properties.hibernate.format_sql=true


# エンティティクラスからDDLを生成して自動実行するか

# spring.jpa.hibernate.ddl-auto=none

# spring.jpa.hibernate.ddl-auto=validate

spring.jpa.hibernate.ddl-auto=update


# schema.sqlとdata.sqlの自動実行(ddl-auto=none)

# spring.sql.init.mode=always

# spring.sql.init.encoding=UTF-8


# Springのログレベル

# logging.level.org.springframework=DEBUG

Spring Starter Project (Spring Initializr)

Type : Maven

Java Version : Pathの通っているversionを選択

Dependencies:

・Developer Tools - Spring Boot DevTools

・Developer Tools - Lombok

・I/O - Validation

・SQL - Spring Data JPA

・SQL - PostgreSQL Driver(またはOracle Driver)

・Template Engines - Thymeleaf

・Web - Spring Web

認証機能を使う場合

・Security - Spring Security

Finish(GENERATE)

spring tool suite (sts)

spring tools 4 for eclipse ダウンロード

java -jar <jarファイル>

SpringToolSuite4.exe


Help - Eclipse Marketplace...

Eclipse Enterprise Java and Web Developer Tools

install


Windows - Preferences - Web - JSP Files

Encoding : ISO 10646/Unicode(UTF-8) → ISO Latin-1


(Path追加してなければ下記を実施)

Windows - Preferences - Java - Installed JREs

Search...

JDKをインストールしたフォルダを選択


File - New - Spring Starter Project

設定内容は下記

走り書き: Spring Starter Project (no15maid.blogspot.com)


実行は

Run as Spring Boot App

ブラウザで

localhost:8080

hyperv windows

Hyper-Vマネージャー クイック作成 Windows11開発環境 仮想マシンの作成 参考サイト 【Windows 11便利テク】Windows 11でより使いやすくなったHyper-V。サクッと無料で仮想環境を作ってみる - PC Watch