- 1. JavaScript以外でもどんどん変数を定数として宣言しようという話
- 2. Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介
- 3. 【Java】関連記事まとめ
- 4. Dev ContainersでJava8 AzureFunctions環境構築時に沼ったのでメモ
- 5. プログラミングにおける”オブジェクト指向”とは?主要な概念についても解説
- 6. TomcatでのDBCPのデフォルト実装を確認してみた
- 7. Java で非同期処理 for Android :CompletableFuture 入門
- 8. [Java]いまさら語るインスタンス化?変数初期化とインスタンス化するとメモリ上で起きること。
- 9. Springboot WebSecurityConfigurerAdapterが使用できない件
- 10. SpringBootでとりあえず業務アプリを自作してみた ~TOP #2~
- 11. SQLの実行順序について簡単にまとめてみた
- 12. 【Java】MySQLでString型の値をDATE型やDATETIME型に変換
- 13. OpenApiでdouble型の整数部と小数部の桁数チェックはできない
- 14. 【SpringBoot】EntityからDtoに詰め替える方法
- 15. ResponseEntityクラスについて
- 16. MyBatisでの取得処理の書き方
- 17. Insomnia入門:コレクションのエクスポートと公開方法
- 18. javaでマスク処理(置き換え)
- 19. 【環境構築】Eclipseを使ったJavaとSprigの開発環境の構築
- 20. GraalVMにおけるJVM言語、Truffle言語、Polyglotの関係
JavaScript以外でもどんどん変数を定数として宣言しようという話
# はじめに
JavaScriptだとかなり認知が広まりつつある「変数はできるだけ`const`で宣言して、厳しい場合だけ`let`を使おう」という話。
なぜかJavaScript限定で話されがちですが、よく考えたらJava等でも同じようにしたほうが良いのでは?# 例
Salesforceの文法なので厳密には違うかもしれませんが、まあJavaと似たようなもんのはず。
“`java
public static void testMethod(String inputValue) {Boolean isXXX = checkValue(inputValue);
// 色んな処理がずらっと何十行
if (isXXX) {
// 色んな処理
}
}
“`さあこの時、下の`if`分岐のときに`isXXX`が最初の宣言通りかどうかは、きちんとコードを全部見ないといけません。
(検索したら良いというのはもちろんですが、それは一旦置いておいて)こういうのを避けるためにJavaScriptでは「`const`を使おう
Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介
# Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介
2024年10月27(日)開催の [JJUG CCC 2023 Fall](https://ccc2024fall.java-users.jp/) にて発表した資料の共有です。
![スライド0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/375970b7-0663-e1e6-245c-77c7d524c8e4.png)
![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/ed357ad8-334f-9151-c0c1-11f5db057375.png)
![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622281/0b9ab9d4-081e-073f-47d9-43ab
【Java】関連記事まとめ
# 概要
私が投稿したJavaに関する記事のまとめです。# 記事
https://qiita.com/ramgap/items/8d6849133ddc9dbc0be9
https://qiita.com/ramgap/items/d410160094cb7ee31228
https://qiita.com/ramgap/items/f561ab23bfb43f632bd3
https://qiita.com/ramgap/items/5038103af48042539430
https://qiita.com/ramgap/items/989ed1d5992217532e24
https://qiita.com/ramgap/items/0b9234c1b325d6716049
https://qiita.com/ramgap/items/e02ac6f122a138c858bb
https://qiita.com/ramgap/items/5ce9d27256198876d0c5
https://qiita.com/ramgap/items/76793e1ea
Dev ContainersでJava8 AzureFunctions環境構築時に沼ったのでメモ
今更Java8でAzureFunctionsを構築する人なんていないと思いますが、構築の際に沼ったのでメモとして記載します(試してないですが多分Java11でも発生する)。
VSCodeからだと簡単にdevcontainerの環境を作ることができます。
1. `Dev Containers`の拡張機能をインストール
2. `F1`を押して`開発コンテナー: コンテナー機能の構築(Dev Containers: Configure Container Features)`を選択
3. `Azure Functions (Java)`を選択
4. `8-bullseye`を選択(`8-bookworm`を選択するとコンテナビルド時にエラーで止まる)
5. インストールする追加機能は自由に
6. オプションも自由に
7. `開発コンテナー: コンテナーで再度開く(Dev Containers: Reopen in Container)`これでコンテナ完成かと思いきや
## バージョン確認
“`
$ java -version
openjdk version “1.8.0_372”
プログラミングにおける”オブジェクト指向”とは?主要な概念についても解説
## ■ はじめに
`オブジェクト指向`という言葉をご存知でしょうか?
Javaはこの「オブジェクト指向」を採用している言語です。
このオブジェクト指向というのはプログラミングにおいて **データ** と **その操作** を
1つの「**オブジェクト**」として扱うことで、複雑なシステムを整理して理解しやすくするといった考え方です。今回はそのオブジェクト指向の基本的な概念と、Javaでの実装例を用いて理解を深めていきましょう。
## ■ 目次
1. [オブジェクト指向とは](#1-オブジェクト指向とは)
2. [カプセル化](#2-カプセル化)
3. [継承](#3-継承)
4. [ポリモーフィズム](#4-ポリモーフィズム)
5. [まとめ](#5-まとめ)## 1. オブジェクト指向とは
オブジェクト指向とはプログラムを「**オブジェクト**」という単位で組み立てていく方法のことです。
オブジェクトはデータ(またはフィールド)とその操作(メソッド)を一つにまとめたもので、
現実世界のモノや概念をプログラム上で表現していま
TomcatでのDBCPのデフォルト実装を確認してみた
# 概要
JDBCを利用してデータベース関連の処理をする際に、これまではDriverManager を利用してコネクションを取得していたが、一般的には、DataSource と JNDI という仕組みを使ってコネクションを取得する方が良いということを知った。
DataSource を用いれば、リソース情報を外部ファイルに記述することができるほか、コネクションプーリングの機能も使える。
このDataSourceの実装クラスは複数あるが、Tomcatに含まれるデフォルトの実装クラスが何か知りたかったので、プログラムを書いて実験してみたところ、ところ、Tomcatバージョン8、9、10においては`org.apache.tomcat.dbcp.dbcp2.BasicDataSource`がデフォルトで用いられることが分かった。# DataSourceのデフォルトの実装クラスは?
Tomcat には、Tomcat DBCP Pool という Tomcat に特化した実装がある。Apache common DBCP よりもパフォーマンスが優れているとされている。
実装の切り替えには、DataS
Java で非同期処理 for Android :CompletableFuture 入門
# はじめに
非同期処理は、モダンなAndroidアプリケーション開発において欠かせない技術の一つです。アプリがユーザーの操作に対して素早く反応し、スムーズな体験を提供するためには、バックグラウンドでの作業(例: ネットワーク通信やファイル操作など)を効率的に行う必要があります。これを同期的に処理してしまうと、操作が完了するまでアプリ全体が固まったり、ユーザーに「フリーズしている」という印象を与えることになります。
非同期処理を正しく使うことで、こうした問題を回避し、ユーザーが操作中でもアプリがスムーズに動作し続けるように設計できます。特にAndroidアプリでは、メインスレッド(UIスレッド)で重たい処理を行うと、アプリが応答しなくなる恐れがあり、最悪の場合、システムから「アプリが応答していません」(ANR: Application Not Responding)エラーを出されてしまいます。
ここで役立つのが、Javaの標準ライブラリで提供されている **`CompletableFuture`** です。`CompletableFuture` は、Java 8 から導入された
[Java]いまさら語るインスタンス化?変数初期化とインスタンス化するとメモリ上で起きること。
Javaで使うメモリ領域は2つです。
Stack(スタック)とHeap(ヒープ)と呼んでいるものです。## Javaは型によって使うメモリ領域が異なる。
まずJavaの型によって使うメモリを使う領域が異なることはご存知でしょうか?
一般的にJavaの型には
基本型と言われる数値型(byte, short, int, long, float, double)、文字型(char)、論理型(boolean)と
参照型と言われる文字列型(String)やクラス型などがあります。### 基本型の変数宣言と初期化
基本型の変数を宣言したとします。
(一番多く使われるのがint型だと思いますので、ここで例としてintを使いました。)“`Java
int num;
“`すると、
Stackメモリ領域に numという器が作られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3915991/d66c076e-0df3-32d3-6c52-5615bc26d85d.png)変数
Springboot WebSecurityConfigurerAdapterが使用できない件
# はじめに
Spring解体新書 第2版の書籍にて学習を実施していました。
11章のSpringSecurityに関する部分だったのですが、書籍通りにソースを記述しても、エラーが解消されませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1041138/b7dd0d04-034d-1ecd-92b7-8084353b4cfd.png)***
# 問題点
`WebSecurityConfigurerAdapter`なんて存在しないよと怒られていました。。
サンプルソースとも全く同じなのに、、
“`java
package com.example.demo.config;import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import or
SpringBootでとりあえず業務アプリを自作してみた ~TOP #2~
久しぶりの投稿です。
暫く子供の体調不良が続いたのであまり進められていませんでした。今回は前回に続いてになりますが
TOPについて、少し手を加えたので記載していきます。トップ画面
—
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901612/a1f8909a-5f47-e4fc-a5d5-6621b41a595f.png)* メニューに権限管理の追加
* 現在日時の追加
* カレンダーの追加Thymeleaf+jQueryということで、たびたび躓きましたがなんとか実装できました。
例のごとくHTML/cssはきっとだめだめです。
#### メニューに権限管理の追加
ユーザ検索画面をもとに、権限管理用のページを作成しました。
ひとまずは検索結果の表示のみです。また後日詳細に記載します。
メニューはすべてのHTMLにべた書きしているのでメンテナンスが面倒だなと思っており
ゆくゆくは共通化できたらなあと思っています。#### 現在日時の追加
あまり悩みませんでした
SQLの実行順序について簡単にまとめてみた
クエリの構文順序(書き方)は必ずしも実行順序と一致しません。データベースがクエリを処理する際の内部的な手順は、次のようなステップで行われます。
### SQLクエリの論理的な実行順序
1. **FROM句**
– まず、どのテーブルやデータソースからデータを取得するかが決定されます。必要なテーブルが結合されるのもこの段階です。2. **ON句**(結合条件)
– 複数のテーブルが結合されている場合、`ON`句を使って結合条件が評価されます。`JOIN`が行われる際の条件をここで定義します。3. **JOIN句**
– 複数のテーブルがある場合、それらを結合(`JOIN`)します。`INNER JOIN`や`LEFT JOIN`などの結合がこのステップで処理されます。4. **WHERE句**
– 結合が行われた後、`WHERE`句の条件で行のフィルタリングが行われます。指定された条件に一致する行だけが残ります。5. **GROUP BY句**
– データを集計する際に、どの列を基準にグループ化するかが決まります
【Java】MySQLでString型の値をDATE型やDATETIME型に変換
MySQLで`String`型の値を`DATE`型や`DATETIME`型に変換するには、`STR_TO_DATE()`関数を使う方法が一般的です。この関数は、文字列を指定したフォーマットに基づいて日付型に変換します。
### `STR_TO_DATE()`関数の構文
“`sql
STR_TO_DATE(文字列, フォーマット)
“`– **文字列**: 変換したい日付の文字列(`VARCHAR`や`CHAR`型)。
– **フォーマット**: その文字列がどのようにフォーマットされているかを示すパターン。### フォーマット指定子の例
| フォーマット指定子 | 説明 | 例 |
|——————-|——————-|————————|
| `%Y` | 4桁の年 | 2024 |
| `%m` | 2桁の月
OpenApiでdouble型の整数部と小数部の桁数チェックはできない
## 結論
OpenAPI自体には直接整数部や小数部の桁数を制御する機能はありません。ただし、OpenAPIのバリデーション機能を使って制約を追加する場合、`multipleOf`や`minimum`、`maximum`の属性を組み合わせて間接的に制御することができます。## 例:整数部3桁、小数部2桁の`double`型をチェックする場合
### OpenAPI定義
“`yaml
components:
schemas:
Price:
type: number
format: double
description: 整数部3桁以下、小数点以下2桁までの値
minimum: 0
maximum: 999.99
multipleOf: 0.01
“`### 各要素の説明
– **`type: number`**: 数値型であることを指定します。
– **`format: double`**: 浮動小数点数(倍精度)であることを指定します。`float`も使用可能ですが、精度が異なります
【SpringBoot】EntityからDtoに詰め替える方法
## 方法1: 手動でのマッピング
#### エンティティ例: `User`
“`java
@Entity
public class User {
private Integer id;
private String name;
private Integer age;// コンストラクタ、ゲッター、セッターなど
}
“`#### DTO例: `UserDto`
“`java
public class UserDto {
private Integer id;
private String name;// コンストラクタ、ゲッター、セッターなど
}
“`#### サービス層での手動変換
“`java
@Service
public class UserService {@Autowired
private UserRepository userRepository;public List
getAllUsers() {
List
ResponseEntityクラスについて
`ResponseEntity`クラスは、Spring FrameworkにおけるHTTPレスポンスのカプセル化に使用されるクラスです。通常、コントローラーがクライアントに返すレスポンスには、以下の3つの要素が含まれますが、`ResponseEntity`はそれらをひとつのオブジェクトにまとめて処理することができます。
### `ResponseEntity`の要素
1. **HTTPステータスコード** (`HttpStatus`)
– 例: `200 OK`, `201 Created`, `404 Not Found` など。
– クライアントにレスポンスの成功や失敗を示すために使用されます。2. **レスポンスボディ** (任意のオブジェクト)
– 返すデータをオブジェクト形式で含めます(JSONやXMLなどに変換されます)。
– 例: `UserDto`オブジェクト、エラーメッセージなど。3. **HTTPヘッダー** (`HttpHeaders`)
– レスポンスにヘッダーを追加できます。
– 例: 認証情報、キャッシュ制御、
MyBatisでの取得処理の書き方
## 1. **基本的なマッピング**(単純なカラムとオブジェクトのフィールドの対応)
#### テーブル: `users`
“`sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
age INT
);
“`#### エンティティ: `User.java`
“`java
public class User {
private Integer id;
private String name;
private Integer age;// Getters and Setters
}
“`#### Mapperインターフェース: `UserMapper.java`
“`java
package com.example.mapper;import com.example.model.User;
import org.apache.ibatis.annotations.Select;
import
Insomnia入門:コレクションのエクスポートと公開方法
InsomniaはAPI開発者にとって非常に便利なツールですが、コレクションを他のチームメンバーと共有し、公開できるようにする方法は少し複雑かもしれなせん。ここでは、コレクションをエクスポートし、公開する手順を詳しくご説明いたします。
![Insomnia api.png](https://assets.echoapi.com/upload/user/216769532487155712/log/8d668166-732d-4b65-bf75-10e00aba24bf.png “Insomnia api.png”)
## 1. コレクションのエクスポート
まずは、Insomniaのコレクションをエクスポートする方法をご説明いたします。
![コレクションのエクスポート.png](https://assets.echoapi.com/upload/user/216769532487155712/log/6944916f-b659-41a9-827d-562284c0a16e.png “コレクションのエクスポート.png”)
1. Insomniaを開き、エクスポートしたいコレク
javaでマスク処理(置き換え)
住所マスク
“`
public class AddressMasker {
public String maskAddress(String address) {
// 正規表現パターンの定義(全角数字 + (’ー’ + 全角数字)の繰り返し)
String pattern = “[0-9]+(?:ー[0-9]+)+”;if (address.matches(“.*” + pattern + “.*”)) {
// マッチする場合、置換を用いてマスキング
// 全角スペースと全角数字、’ー’以外を’*’に置換
String maskedAddress = address.replaceAll(“[^ 0-9ー]”, “*”);
return maskedAddress;
} else {
// マッチしない場合、住所の下5文字以外をマスク
int un
【環境構築】Eclipseを使ったJavaとSprigの開発環境の構築
## はじめに
はじめまして、@tkmo0807です。Javaの学習を始めたので、学習の記録を残していこうと思います。今回は環境構築について記録します。まずはEclipseのインストールを行います。## 今回利用する環境
– OS:windows11
– Eclipse:Eclipse IDE for Java Developers (includes Incubating components)
– Version:2022-12 (4.26.0)
– Java:JDK 17## Eclipseのダウンロード
以下のサイトにアクセスしてEclipseをダウンロードします。今回はJDK 17を利用するので、Eclipse 2022-12を選択します。https://willbrains.jp/
Eclipse 2022-12を選択した後、利用する環境を選べるので以下のように選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855381/b11c8c83-d0
GraalVMにおけるJVM言語、Truffle言語、Polyglotの関係
GraalVMは、異なるプログラミング言語を同じランタイム環境で動作させ、相互運用性を提供する強力なランタイムです。この投稿では、GraalVMの中でのJVM言語とTruffle言語の違い、そしてそれらを統合するPolyglot APIについて簡潔に説明します。
## 1. JVM言語とは?
JVM言語は、Java仮想マシン(JVM)上で動作するプログラミング言語の総称です。代表的なものには以下の言語があります:– Java
– Kotlin
– Scala
– Groovyこれらの言語はすべてバイトコードにコンパイルされ、JVM上で実行されます。
## 2. Truffle言語とは?
Truffle言語は、GraalVMのTruffleフレームワークを使って実装された言語です。GraalVM環境では、Truffle言語もJVM言語と同様に、他の言語と統合して使用することができます。代表的なTruffle言語は以下の通りです:– Python
– JavaScript
– Ruby
GraalVM上でのPython実装はGraalPyと呼ばれ、Truffleフレームワー