- 1. MavenでMyBatis Generatorを使う
- 2. 【Spring Boot】SpringSecurityのログイン時の処理のカスタマイズ
- 3. Javaで「文字列から開始と終了インデックスを指定して部分文字列を取得する」の動作を確認してみた
- 4. BFSを用いた硬貨の組み合わせ問題の解決方法
- 5. 深さ優先探索(DFS)を用いたシングルリンクリストのノードマージ問題の解決方法
- 6. 2024/07/04の備忘録
- 7. 「No primary or single unique constructor found for interface javax.servlet.http.HttpSession」が出た話。
- 8. 意識低い系インフラエンジニアがJava Bronzeを取得した
- 9. Javaで「文字列から指定したインデックスのUnicodeコードポイントを取得する」の動作を確認してみた
- 10. [備忘録 その1] Java Silver ~Javaプログラミング基礎~
- 11. 詳細設計書なんて、書きたくない・・・・Doxygenを使って自動生成してみる
- 12. Javaで「文字列から指定したインデックスの文字を取得する」の動作を確認してみた
- 13. (調査中)クラスローダーを使用してリソースのURLを取得。特定のディレクトリの指定されたパターンのプロパティファイル名を取得
- 14. (調査中)Java。クラスローダーを使用してリソースのURLを取得。ディレクトリリスト取得
- 15. Javaのソースコードを実装する時の心得
- 16. セグメントツリーについて調べる時間
- 17. build.gradleのdependencies依存関係指定方法
- 18. JTracker: A JetBrains IntelliJ IDEA. Supports JPA, MyBatis, and JDBC log formatting.
- 19. 配列に対する処理 for, forEach, find, filter
- 20. java csv比較ツール
MavenでMyBatis Generatorを使う
# 環境
– JDK 21
– Maven 3.9.7
– MyBatis Generator 1.4.2
– PostgreSQL 15.3
– Spring Boot 3.3.1# 公式ドキュメント
https://mybatis.org/generator/running/runningWithMaven.html# pom.xmlの設定
今回はSpring Bootを使っていますが、MyBatisさえ入っていれば大丈夫なはずです。“`xml:pom.xml
【Spring Boot】SpringSecurityのログイン時の処理のカスタマイズ
## 概要
・Spring Securityを使用してログイン機能を実装していることを前提とします。
・今回、私がカスタマイズした処理の内容は【ログイン成功時にその日時を最終ログイン日時としてDBに保存する】という処理です。※初記事なので分かりにくい場合や間違えてる場合等があるかもしれませんのでご了承ください…
## 実行環境
・Eclipse(2024)
・Spring Boot 3.3.0
・Spring Security 6## 手順
### 1.CustomAuthenticationSuccessHandlerクラスの作成
・AuthenticationSuccessHandlerインターフェースを実装したカスタムハンドラを作成します。
・ログイン成功時にユーザの最終ログイン日時を更新するロジックを実装します。### 2.ユーザサービスの作成
・ユーザの最終ログイン日時を更新するためのメソッドを含むサービスクラスを作成します。### 3.セキュリティ設定の更新
・カスタムハンドラをSpring Securityの設定に登録します。###
Javaで「文字列から開始と終了インデックスを指定して部分文字列を取得する」の動作を確認してみた
# 概要
Javaで「文字列から開始と終了インデックスを指定して部分文字列を取得する」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/string/index7.html
# 実装
以下のファイルを作成しました。
“`JSample7_1.java
class JSample7_1{
public static void main(String[] args){
String msg = “東京都港区赤坂”;System.out.println(msg.substring(3, 5));
System.out.println(msg.substring(5, 7));
System.out.println(msg.substring(3));
}
}
“`以下のコマンドを実行しました。
“`
$ javac JSample7_1.java
$ java JSample7_1
港区
赤坂
港区赤坂
“`# まとめ
何かの役に立てばと。
BFSを用いた硬貨の組み合わせ問題の解決方法
# BFS(幅優先探索)の簡単な説明
幅優先探索(BFS:Breadth-First Search)は、グラフやツリーなどのデータ構造を探索するためのアルゴリズムの一つです。BFSは、開始ノードから近いノードから順に、同じレベルのノードをすべて探索してから次のレベルに進むという方法で動作します。BFSは通常、キュー(FIFO)を使用して実装されます。BFSの主な特長は以下の通りです:
1. 最短経路探索:BFSは無加重グラフでの最短経路探索に適しています。最初に到達した解が最短であることが保証されます。
2. レベル順探索:BFSはノードをレベル順に探索するため、ノード間の距離を簡単に把握できます。# 問題の解法の説明
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824062/2805f5f2-63c8-39e5-b437-63f74390ea0c.png)以下は、与えられたシングルリンクリストを0を基準に値をマージする問題の解法をBFSを用いて説明したものです。
問題
深さ優先探索(DFS)を用いたシングルリンクリストのノードマージ問題の解決方法
# DFSの簡単な説明
深さ優先探索(DFS:Depth-First Search)は、木やグラフなどのデータ構造を探索するためのアルゴリズムの一つです。DFSは、可能な限り深くノードを探索してから次の分岐に進むという方法で動作します。再帰やスタックを使って実装することが多いです。# 問題の解法の説明
以下は、与えられたシングルリンクリストを0を基準に値をマージする問題の解法をDFSを用いて説明したものです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824062/3566b1cd-2ac8-7256-3fb0-464bfdb2c1f1.png)
“` java
/**
* シングルリンクリストのノードを定義するクラス。
*/
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
Li
2024/07/04の備忘録
### 【データべースなどから取得した情報をJSONで形式で表示する】
今回はデータベースから直接値を取るのではなく、スタブを使ってJSON形式に変換する。
ItemCategoryのスタブデータの作成。
最終的に4件の情報が入ったデータを返している。
“`Stub.java
public static ListreturnStb(){ List
categorys = new ArrayList (); int totalMin = 100;
int totalMax = 1000;for(int i = 0; i <= 3; i++) { ItemCategory category = new ItemCategory(); category.setId(i + 1); category.setName("カテゴリ" + i + 1); category.setMinPrice(totalMin); category.setMaxPrice
「No primary or single unique constructor found for interface javax.servlet.http.HttpSession」が出た話。
# 今回のエラー
## 1.SpringBootでSessionが使いたい!
環境は以下の通り
Eclipse IDE(pleiades\2023-12)“`pom.xml
4.0.0 org.springframework.boot
spring-boot-starter-parent
3.3.1<
意識低い系インフラエンジニアがJava Bronzeを取得した
## はじめに
意識が低いというのに資格取得に燃えはじめた底辺インフラエンジニアです。
インフラエンジニアですがJavaを使いこなしたい!と思い、資格取得を目指しました。
業務でJavaプログラムを取り扱ったりしていたので、使ってはいるけどどんな挙動をしているんだろう?が気になり、
>もっと詳しくなりたい=使いこなしたい=資格とってみるか!という思考にいたりました。
## 学習期間
ずるずる学習を2か月、本気になってからはざっくり1か月。
流石意識低い系ですね。## とりあえずやったこと
### 黒本を買い、周回するこれ。
AWS資格学習でもそうなのですが、自分には問題集を周回しながら物事を理解するのが適していたようです。
とにかく周回しました。
たぶんこれだけで資格取得という意
Javaで「文字列から指定したインデックスのUnicodeコードポイントを取得する」の動作を確認してみた
# 概要
Javaで「文字列から指定したインデックスのUnicodeコードポイントを取得する」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/string/index10.html
# 実装
以下のファイルを作成しました。
“`JSample10_1.java
class JSample10_1{
public static void main(String[] args){
String msg = “東京都港区赤坂”;for (int i = 0; i < msg.length(); i++){ System.out.println( i + ";" + msg.codePointAt(i)); } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample10_1.java $ java JSample10_1 0;26481 1;20140 2;37117 3;28207 4;21306 5;36196 6;22
[備忘録 その1] Java Silver ~Javaプログラミング基礎~
Java Silverを勉強する中で、ただ参考書を見ているだけだとつまらなかったので、アウトプットととして備忘録を投稿しています。
## Javaの特徴
### ①Write Once, Run Anywhere (一度書けばどこでも動く)
Javaで作ったプログラムはOSとの間に依存関係がなく、どのOSでも動きます。### ②ガベージコレクションによる自動的なメモリ管理
ガベージコレクションは使わなくなったメモリを自動的に開放してくれる機能です。この機能により、メモリリークの発生を回避できます。
メモリリークとは、プログラムで使い終わったメモリが適切に開放されないことで、時間とともにメモリが不足していく現象です。### ③オブジェクト指向
Javaはオブジェクト指向という考え方を実現できるようになっており、プログラムの再利用や拡張をオブジェクト単位で効率良く行えます。## コンパイルと実行
### コンパイル
#### 1. ソースコードの作成
まず、Javaプログラムのソースコードを記述します。ソースコードは、「.java」という拡張子のテキストファイルに保存され
詳細設計書なんて、書きたくない・・・・Doxygenを使って自動生成してみる
# はじめに
お客様に提案をしているときの会話です。お客様:「お客様と納品物の会話をしているときに、詳細設計書は作りますか」
私:「昔ながらの詳細設計(ロジックを日本語で書くもの)は作りません。クラス図とか、シーケンス図は複雑であれば作りますが、今回のシステムはそこまで必要なものはないものなので、割愛しようと思っています。」
お客様:「保守をお願いするかどうか未定なので、場合によっては引継ぎのために作ってもらうかもしれません」
私:「・・・・」といった感じで、私がこの業界に入った30年前は、確かにプログラムを作る前に、詳細設計書と呼ばれるプログラムを日本語で書いていました。
最近、詳細設計と呼ばれるものを作った記憶がなく、無駄なものは作りたくないなぁという思いから、コードから自動生成できないかなと思って、いろいろ試してみました。# Doxygenって
いろいろ調べてみると、[Doxygen](https://www.doxygen.nl/) にたどり着きました。色々な言語に対応した、ドキュメントジェネレータです。アウトプットもHTMLだけでなくMarkdownや、PDF
Javaで「文字列から指定したインデックスの文字を取得する」の動作を確認してみた
# 概要
Javaで「文字列から指定したインデックスの文字を取得する」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/string/index5.html
# 実装
以下のファイルを作成しました。
“`JSample5_1.java
class JSample5_1{
public static void main(String[] args){
String msg = “東京都港区赤坂”;for (int i = 0; i < msg.length(); i++){ System.out.println( i + ";" + msg.charAt(i)); } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample5_1.java $ java JSample5_1 0;東 1;京 2;都 3;港 4;区 5;赤 6;坂 ``` # まとめ 何かの役に立てばと。
(調査中)クラスローダーを使用してリソースのURLを取得。特定のディレクトリの指定されたパターンのプロパティファイル名を取得
“`java
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.regex.Pattern;public class JarFileUtils {
public static void main(String[] args) {
try {
// ディレクトリパスとパターンを指定
String directoryPath = “/config”;
String pattern = “.*\\.properties”;
Listp
(調査中)Java。クラスローダーを使用してリソースのURLを取得。ディレクトリリスト取得
“`java
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;public class JarFileUtils {
public static void main(String[] args) {
try {
Listdirectories = getDirectoriesFromJar(“/example.txt”);
directories.forEach(System.out::println);
} catch (IOException e) {
e.prin
Javaのソースコードを実装する時の心得
上司にアドバイスをいただいた
Javaのソースコードを実装する際に
やった方がいい事
こうした方が効率が良くなるよ
とかを記録、メモ
(随時更新)# Javadocは、メソッドとかクラスを作った(書いた)時点で書いてしまった方がいい
**経緯:**
時間があまり無い状況で、「まずは動くものを作ることを優先しよう!!」と考え、Javadocの記載を後回しにしていた。
しかし、上司から「後から書くと、二度手間になるし、記載漏れも出てくるでしょ。後回しにする理由も無いし、すぐに対応してしまった方がいいよ。」とご指摘をいただいた。
(上司の場合、Javadocは、メソッドとかクラスを作った(書いた)時点で書いてしまっているとのこと)—
1. 実装し終わったクラスやメソッドにまた戻ってこなくてはいけない
1. 『これってなんのクラス、メソッドだっけ?引数、戻り値はなんだっけ??』と、思い出す(考える)必要がある
1. 1.で戻る際に、記載漏れが発生するかも→1、2の時点で二度手間
3で記載漏れ(修正の場合は修正漏れ)が発生する—
# Javadoc
公式サイト
ht
セグメントツリーについて調べる時間
# Intro
部分和を求める方法はいくつかあります。最初に考えた方法は、for文を使用して条件が合う場合にsum変数に合計を加える方法です。しかし、この方法は時間計算量がO(n)であるため、速度面で非効率的です。これをより速く求める方法は何でしょうか?それはセグメントツリー(Segment Tree)です。## セグメントツリーは、
二分木構造を活用して部分和を効率的に求めるデータ構造です。他の方法としては、インデックストリー(Index Tree)があります。セグメントツリーが再帰関数で最下層のノードからルートノードまで上がる方式であるのに対し、インデックストリーはルートノードから最下層ノードへ下がる方式です。両方とも同じ問題を解決できますが、私はセグメントツリーの方が理解しやすいため、部分和問題を求める際に使用します。セグメントツリーを作成する際には、部分和を求めたい配列より約4倍長い配列を宣言する必要があります。そして、leftノードはn*2、rightノードはn*2+1のインデックス番号を持ちます。
部分和を求める時はsum関数を使用し、n番目の数字を変更する時はu
build.gradleのdependencies依存関係指定方法
– implementation
– コンパイルと実行時に必要な依存関係を指定。
– 依存関係はほかのプロジェクトから見えず、依存関係の依存関係も含めてコンパイル時に使用される
– compileOnly
– コンパイル時にのみ必要な依存関係のみを指定する。
– 実行時にはこれで指定された依存関係は含まれない。
– アノテーション処理やコンパイル時のチェックに必要な依存関係を指定するのに使用
– developmentOnly
– 開発環境でのみ必要な依存関係の指定。
– 本番環境ではこれで指定した依存関係は含まれない
– testImplementation
– テストのコンパイルおよび実行時に必要な依存関係を指定。
– テスト用フレームワークやモックライブラリに使用される
– runtimeOnly
– 実行時にのみ必要な依存関係を指定。コンパイル時にはこれらの依存関係は含まれないが実行時に必要なもの。
– 他にも
– compileClasspath
– annotationProce
JTracker: A JetBrains IntelliJ IDEA. Supports JPA, MyBatis, and JDBC log formatting.
# JDBC Log
MyBatis や JPA ORM フレームワークを使用しているのであれば、MyBatis Log Formatting プラグインを使用しているはずです。
しかし問題があります。通常、フォーマットの効果しか見ることができず、誰がこのSQLを実行したのか、呼び出しのリンクを知る方法はありません。
下図に示すように![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796327/8e4cb385-122e-ce1a-2a74-f188cbc25555.png)
では、コールリンクと誰がそれを実行したかを知る方法はあるのだろうか? 方法はある。それがこのスレッドの主人公である “[JTracker](https://plugins.jetbrains.com/plugin/24694)”だ。
# What’s JTracker
JTrackerはJavaコード追跡ツールです。 現在、それは唯一のMyBatisログの追跡をサポートしています、フォローアップは、J
配列に対する処理 for, forEach, find, filter
新人エンジニアの三上です。
今回は、配列に対する操作の中で、私が実際に使用したことのあるものをまとめてみようと思う。## for
配列の要素をループごとに変数に代入し、そのループ内で変数を使用する。
以下にサンプルコードを示す。“`Kotlin:for
val sampleList = [0,1,2,3,4,5]for (sample in sampleList) {
if (sample == 2) {
println(sample)
}
}
“`配列 sampleList の要素を 変数 sample に設定し、sample に対し、条件判定を行うことで、任意の要素を出力する。
## forEach
for と処理は同様だが、記載の方法が異なる。
以下にサンプルコードを示す。“`Kotlin:forEach
val sampleList = [0,1,2,3,4,5]sampleList.forEach {sample =>
if (sample
java csv比較ツール
比較元と比較先のSJISエンコードされたCSVファイルをSQLiteデータベースにインポートし、その差分をSJISエンコードされたCSVファイルとして出力するSwingベースのアプリケーションです。
“`java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;
import com.opencsv.CSVWriter;
import com.opencsv