- 1. DB 更新メソッドの引数にて transaction object をオプション引数的に扱う方式案
- 2. StringBuilderとString型の違い -LeetCode Merge Strings Alternately使用
- 3. SpringBoot3でUsernamePasswordAuthenticationFilterを使うとセッションが落ちる
- 4. jpackageコマンドでfat.jarのインストーラを作成する
- 5. ナップサック問題を制約充足ソルバーを使って解く OptaPlanner チュートリアル
- 6. 40代事務職Java面白い!6週間勉強してオブジェクト指向とGithub便利だなって思った
- 7. 【Eclipse + Git・GitHub + EGit】15分でできるJavaプロジェクトのバージョン管理
- 8. 整数リテラルの各進数表記と接頭辞の由来
- 9. コンパイルエラーと例外スローの違い
- 10. Scannerの作成
- 11. サンプル
- 12. 構文解析のやつ
- 13. Spring Boot学習②~ログイン成功時・失敗時の処理~
- 14. Spring Boot on Embedded Tomcatでリダイレクト時のLocationヘッダーの値を相対パスに変更する
- 15. JdbcTemplateからJdbcClientに移行して嬉しかったこと2つ
- 16. ポリモーフィズムが理解できてなかったのでまとめ
- 17. 【Java】ConcurrentModificationExceptionから学ぶListと拡張for文の仕組み
- 18. SpringBootでプロジェクト名変更
- 19. 【Java】プロパティの値が画面に表示されない(JSF)
- 20. Java log ログ ライブラリ
DB 更新メソッドの引数にて transaction object をオプション引数的に扱う方式案
# 概要
DB にクエリ発行するメソッドにおいて
– 外部から transaction object を渡してクエリを発行する
– transaction object の省略時はメソッド実行時に tranaction を作成してクエリを発行するをシンプルに実現したい、というのが基本的なモチベーションとしてありました。
これを実現する方式をいくつか検討しました。# 基本実装
User を取得するコードを考えます。transaction 内でデータ取得したい場合と、単純な参照系の機能などで transaction を意識せず取得したい場合があり、この両方を同じコードで対応したいです。“`java
class UserRepository
{
public User findById(String userId, QueryCondition condition, Connection conn)
{
try (
Statement stmt = con.createStatement();
R
StringBuilderとString型の違い -LeetCode Merge Strings Alternately使用
## 問題文
2 つの文字列 word1 と word2 が与えられます。 word1 から始めて交互に文字を追加して、文字列を結合します。ある文字列が他の文字列より長い場合は、マージされた文字列の末尾に追加の文字を追加します。マージされた文字列を返します。
## 解き方 3つ
### コード① StringBuilderを使用しない 実行速度:13ms メモリー:42.82MB
“`java
class Solution {
public String mergeAlternately(String word1, String word2) {
String ans =””;
int index=0;
while(index < word1.length()+word2.length() ){ if(index < word1.length()){ ans += word1.charAt(index); }
SpringBoot3でUsernamePasswordAuthenticationFilterを使うとセッションが落ちる
## はじめに
SpringBoot3.xにアップグレードするとログインできなくなるプロジェクトがありました。
本家のアップグレードのドキュメントを見ても特に変更漏れが無くハマった為、記載しておきます。
同一の症状が出ている人は参考にしてみてください。## 環境
– SpringBoot 3.1.6
– Java 17
– spring-boot-starter-security
– spring-session-jdbc
– UsernamePasswordAuthenticationFilterクラスを使用して拡張ログイン後DBにセッションは書きこまれていましたが、何故かログインすらできませんでした。
## 簡易修正方法
SecurityFilterChainにてHttpSecurityで設定できるrequireExplicitSaveにfalseを入れるだけです。
“`java
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, AuthenticationManager a
jpackageコマンドでfat.jarのインストーラを作成する
jpackageコマンドでfat.jarのインストーラを作成する方法を示します。
# ① 事前準備
Windows環境でjpackageを利用する場合、WiX 3.0が必要です。リリースページからwix311-binaries.zipをダウンロードして、PATHを通しておきます。
https://github.com/wixtoolset/wix3/releases
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/597cc2d6-2e5f-e487-8c5c-84101b416dbf.png)
# ② jpackageコマンドの実行
ディレクトリ構成は以下の通りです。HelloWorld-0.0.1-SNAPSHOT.jarが対象のfat.jarです。
“`
build
├─ exe
└─ lib
└ HelloWorld-0.0.1-SNAPSHOT.jar
“`jpackageコマンドを実行します。
– インストール先のフォルダを指定する
ナップサック問題を制約充足ソルバーを使って解く OptaPlanner チュートリアル
この記事は [FastDOCTOR After Advent Calendar](https://tech.fastdoctor.jp/entry/2023/12/29/092753) 26日の記事です。次の日の記事は [外注で初期開発したシステムを内製化するためにやったこと](https://zenn.dev/shirauix/articles/5459c5b6a2f7ee) です。
# 概要
ナップサック問題は比較的簡単な問題であって、特別な道具は必要ないのですが、あえてそういう問題を制約充足ソルバーで解くことによって、やさしく学ぶことができるのでは、と考えています。
FastDOCTOR Technologies のテックブログでは、 OptaPlanner について実践的なケースを紹介していますので、よければご覧ください。
[【最適化問題】「医療の往診サービスで、医師とドライバーのペアが特定のエリアを巡回する最善のルートを考えよ」をソルバープログラムで解いてみた](https://tech.fastdoctor.jp/entry/2023/05/19/195525)
40代事務職Java面白い!6週間勉強してオブジェクト指向とGithub便利だなって思った
公式ドキュメントを読め!おじさんに疲れたので、じゃあ英語で読めるようにアメリカのオンライン大学のコンピューターサイエンス学部に2023年9月に入学しました。現在社会人学生です。
11月からプログラミングのJavaコース入門で勉強してます。1週間のカリキュラム
使用しているテキスト※公式サイトで公開されているシラバスより引用してます
Introduction to Programming Using Java Version 9.0, JavaFX Edition
https://math.hws.edu/javanotes/index.html公式サイト掲載シラバスよりhttps://www.uopeople.edu/become-student/prepare-for-uopeople/prepare-college-courses/programming-1-cs-1102-learning-materials/
– その週のテーマのテキストを読む
– その週テキストで学んだことを英語のエッセイ形式で書く
– 毎週プログラミングのコードを書く課題こんな感じです。
プ
【Eclipse + Git・GitHub + EGit】15分でできるJavaプロジェクトのバージョン管理
# はじめに
本記事ではEclipseを使って作成したプロジェクトとGit・GitHubを連携してバージョン管理を行う方法を解説します。Git・GitHubを使ってみたいけどどうすればいいのかわからないという人向けの記事となっておりますので、参考にしていただければ幸いです。# 前提条件
– Eclipseを使ったプロジェクト作成の方法を理解している
– GitHubのアカウントが作成されており、最低限の使用方法を理解してる# 目次
1. [EGitの導入](#egitの導入)
1. [Git・GitHubとの連携](#gitgithubとの連携)
1. [commitとpushを行う](#commitとpushを行う)
1. [参考文献](#参考文献)# EGitの導入
Eclipseを開いて画面上部のヘルプ→Eclipseマーケットプレースをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287818/52024e69-9a2c-32bf-0a98-e5a3
整数リテラルの各進数表記と接頭辞の由来
# 整数リテラル(Integer Literals)における接頭辞
### 【さっそく】
下記のコードについてのコンソール出力値がどうなるのか考えてみましょう。
“`Java
class Prefixes {
public static void main(String[] arg) {
int x1 = 10; // 10 in decimal
int x2 = 012; // 10 in octal
int x3 = 0xA; // 10 in hexdecimalSystem.out.println(x1);
System.out.println(x2);
System.out.println(x3);
}
}
“`コンソール出力:
“`java
10
10
10
“`
出力値を見ると、どの変数にも整数として10が格納されていることがわかります。
なぜ初期値の記述が違うにもかかわらず、どの変数も10を格納しているのかというと
変数”x2”、
コンパイルエラーと例外スローの違い
java silverの問題を解いてて、コンパイルエラーと例外スローどちらになるかわからなかったのでまとめてみた。
コードがコンパイルエラーになるか、例外をスローするかの基準
1. **コンパイルエラー(静的エラー)**:
– **定義と一致しない使用法**:変数や関数の定義に反する使用(例:存在しないメソッドの呼び出し、データ型の不一致)。
– **構文エラー**:プログラムの構文が言語の規則に違反している場合(例:セミコロンの欠落、括弧の不一致)。
– **解決できない参照**:使用されているが定義されていない変数や関数への参照。
– **アクセスレベルの違反**:privateやprotectedなど、アクセスできないメンバへのアクセス。2. **実行時例外(動的エラー)**:
– **外部要因**:外部リソースの問題、ネットワークエラーなど。
– **無効な入力**:ユーザー入力や外部データソースからの予期しないデータ。
– **リソースの問題**:メモリ不足、ファイルシステムの問題など。
– **プログラムの論理エラー*
Scannerの作成
1日に二本出してますね
更新頻度が極端…今回はScannerを作ります。Lexerで分割したやつをmapに直すやつですね。
名前Scannerで合ってるかわからないそんじゃ早速。
“`java:Scanner.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;public class Scanner {
public MapScan(ArrayList list){
String functionName = list.get(0);
ArrayList
サンプル
# やることリスト
1. 挨拶
1. ほほおほ
1. 穂はおフォアhフォアhf
1. hふぁおwf### コードブロック
“`java
//void method
public class Sample {
private String value;
public void setValue(String value) {
this.value = value;
}
}
“`
構文解析のやつ
みなさまお久しぶりでございます。
アドオンシリーズは更新していません()
また機会があれば更新しようかと思います(投げやり)とりあえず自分用メモ
“`java:Lexer.java
public class Lexer {
private static final ArrayListlist = new ArrayList<>(); // 結果
// 検知する文字とか
private static final Listbrackets = Arrays.asList(‘(‘,’)’,'{‘,’}’,'[‘,’]’);
private static final Listoperators = Arrays.asList(‘=’,’+’,’-‘,’*’,’/’);
private static final Liststrings = Arrays.asList(‘\”,'”‘);
private static final List
Spring Boot学習②~ログイン成功時・失敗時の処理~
前→https://qiita.com/19960417akiho/items/3fa636e6a26c371bcaa8
以下の動画を参考に、ハンズオン形式でSpring BootでWebアプリを制作していきます。
今回はPart6。
正しいペアのIDとパスワードを入力した際にはトップメニュー画面に遷移し、
誤ったペアのIDとパスワードを入力した際は、ログイン画面にその旨をテキストで表示します。まずはトップメニュー画面のhtmlとコントローラーを用意します。
# menu.html&MenuControler.java
“`menu.html
トップメニュー
トップメニューだよ
“`“`
Spring Boot on Embedded Tomcatでリダイレクト時のLocationヘッダーの値を相対パスに変更する
# バージョン
– Spring Boot 3.2
– Embedded Tomcat 10.1> – 3.2以前のバージョンでもできる可能性があります。
> – JettyやUndertowでのやり方は検証していません。# やりたいこと
デフォルトの状態では、リダイレクト時のLocationヘッダーは絶対パスになります(例: `https://a.example.com/dest`)。これは[Jakarta Servletの仕様](https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0#convenience-methods)らしいです。
しかし、クライアントとSpring Bootサーバーの間に複数ロードバランサーがあった場合、この挙動だとクライアントがうまくリダイレクトできない可能性があります。
なので、Locationヘッダーを相対パスにしたいです。# 結論
“`application.properties
server.tomcat.use-relative-redirects
JdbcTemplateからJdbcClientに移行して嬉しかったこと2つ
# バージョン
– Spring Framework 6.1
– Spring Boot 3.2# JdbcClientって?
Spring Framework 6.1(対応するSpring Bootは3.2)から`JdbcClient`インタフェースが導入されました。
内部的には`JdbcTemplate`および`NamedParameterJdbcTemplate`のラッパーです。
流れるようなインタフェース(Fluent API)が特徴です。# Optionalが使いやすい
`JdbcTemplate`で主キー検索してその結果を何かのクラスの`Optional`にしたい場合、👇のようにちょっと面倒でした。“`java:JdbcTemplateでOptionalを返す例
public OptionalselectById(Integer id) {
try {
Hoge hoge = jdbcTemplate.queryForObject(“””
SELECT id, name
ポリモーフィズムが理解できてなかったのでまとめ
ポリモーフィズムは、異なるクラス(サブクラス)が共通のインターフェース(スーパークラスで定義されたメソッド)を持ちながら、それぞれ異なる振る舞いを実装することを指す。
例として、図形というスーパークラスがあり、四角形、円といったサブクラスがある場合を考える。これらのサブクラスは、図形クラスから継承され、面積を計算するという共通のメソッドを持つが、その計算方法はクラスによって異なる。
“`java
class 図形 {
double 面積を計算する() {
return 0;
}
}class 四角形 extends 図形 {
double 幅;
double 高さ;四角形(double 幅, double 高さ) {
this.幅 = 幅;
this.高さ = 高さ;
}@Override
double 面積を計算する() {
return 幅 * 高さ;
}
}class 円 extends 図形 {
double 半径
【Java】ConcurrentModificationExceptionから学ぶListと拡張for文の仕組み
## 始めに
業務中にConcurrentModificationExceptionが発生するケースに出会い、エラーについて調べていく中で勉強になったことがあったのでまとめてみました。### この記事の対象者
・Javaの勉強をしている方
・ConcurrentModificationExceptionって何?と思っている方## ConcurrentModificationExceptionとは
Java SE 11 & JDK11 Documentには以下のように定義されています。
>この例外は、オブジェクトの並行変更を検出したメソッドによって、そのような変更が許可されていない場合にスローされます。
たとえば、あるスレッドがCollectionで反復処理を行っている間に、別のスレッドがそのCollectionを変更することは一般に許可されません。 通常、そのような環境では、反復処理の結果は保証されません。
この例外は、オブジェクトが別のスレッドによって並行して更新されていないことを必ずしも示しているわけではありません。 単一のスレッドが、オブジェクトの規約に違反する一連のメソ
SpringBootでプロジェクト名変更
# この記事はこれの続き
https://qiita.com/waokitsune/items/83febc4a0518d7d346aa
# リファクタリング機能でリネーム
プロジェクト上で右クリック → 『Refactor』 → 『Rename』。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/893a52a3-845f-1997-6818-751e140a37f8.png)demo → nekoに変えます。
『Update references』にチェック入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/7dbf009b-2a71-9c8a-a7a4-8e21b1f91088.png)# ビルドエラーへの対応
リファクタリング機能でリネームしても下記のようなエラーになります。
> Project neko cannot be ren
【Java】プロパティの値が画面に表示されない(JSF)
# はじめに
JSFで初歩的な動きを確認しようとしたところ、`Managed Bean`のプロパティをバインドして表示してくれない事象が発生。解決方法をメモ。:arrow_down: 要は`#{}`を使って画面に「Hello!」と表示したいのに、表示されない。
“`index.xhtml
FirstPage
Java log ログ ライブラリ
java.util.loggin
Log4j
Log4j2
https://logging.apache.org/log4j/2.x/Logback (SLF4Jと組み合わせた利用を前提)
https://logback.qos.ch/利用法
https://sukkiri.jp/loggers?via=devnote