JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる。つづき。関連のあるデータの取得

こんにちは。@masatomix です。

最近、現場でGraphQLとRESTサーバを構築する機会があったので、そのとき得られた[ナレッジを備忘としてまとめている](https://qiita.com/masatomix/items/53003a34d413206bb619)のですが、その続きです。

前回の初期状態から、すこし手を入れていきます。

## TL;DR

– Spring Data RESTが自動生成するRESTサービスについて、リンクになっているところを微調整します。
– ついでに、よけいなSQL文を発行しないよう微調整します
– GraphQL がQueryで指定するプロパティに応じて、必要なときだけBackendにデータを取りに行くようにする

## Spring Data RESTが自動生成するRESTの戻り値について、FKがオブジェクトじゃなくてリンクになっている

今回もこのデータ構造です。

![image-20240610114259607.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

デザインパターン Builderパターン

# Builder パターン
**オブジェクトの生成、初期化を簡潔にする**ためのデザインパターン。

通常、オブジェクトの生成(インスタンス化)にはコンストラクタを用いるが、コンストラクタに必ず受け取るわけではないオプショナルな引数があったり、要求に応じて引数のバリエーションを選択する必要がある場合、コンストラクタが複雑化してしまう。

そのような場合にBuilderパターンを利用することで、複雑になりがちな初期化処理が隠蔽され、クライアントにとって簡潔に利用できるようになる。

オブジェクト作成の詳細を隠蔽すると言う点ではFactoryパターンと似ている。両者の違いとして、Builderパターンにおけるクライアントは、Factoryパターンを使用する場合よりもより多くのオブジェクトに対する知識が必要とされる点などがある。

Factoryパターンについてはこちらにまとめています。

https://qiita.com/AsahinaKei/items/3a1f17b728769bab95b7

## 構成要素

### Target
生成対象のオブジェクト。

設定値を保持するデー

元記事を表示

Javaで「配列の要素の初期化と規定値」の動作を確認してみた

# 概要

Javaで「配列の要素の初期化と規定値」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/array/index5.html

# 実装

以下のファイルを作成しました。
“`JSample5_1.java
class JSample5_1{
public static void main(String[] args){
int[] i = new int[1];
System.out.println(“int : ” + i[0]);

long[] l = new long[1];
System.out.println(“long : ” + l[0]);

double[] d = new double[1];
System.out.println(“double ; ” + d[0]);

boolean[] b = new boolean[1];
System.out.println(“boolean : ” + b[0]

元記事を表示

Spring Bootstrap テーブルを中央揃えする方法 備忘録#2

# テーブルを中央揃えする方法

#### 初めに
今回は、Springbootを使って、掲示板機能を作成した際に、テーブルを中央揃えの仕方を調べて扱ったので、備忘録として残したいと思い記述しました。

テーブルだと、**text-center**や**justify-content-center**を使用してもなかなか中央に行ってくれないので、私はこれを試しました。

###完成図(イメージ)

![スクリーンショット 2024-06-12 19.48.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807467/9697ab5a-cd3e-8501-6c00-f4c43a0c3884.png)
↑このような感じでテーブルを真ん中に持っていきます!

###HTMl

“`diff_java

+

2つのCSVファイルを取り込み差分を抽出する

カラム名を動的に取り込み、CSVファイルをSQLiteに格納する方法を以下に示します。ここでは、CSVの最初の行をカラム名として使用します。

### 必要なライブラリ
1. SQLite JDBCライブラリ
2. OpenCSVライブラリ(CSVファイルの読み書きに使用)

### ステップ1: 必要なライブラリを追加

Maven依存関係




org.xerial
sqlite-jdbc
3.34.0



com.opencsv
opencsv

Javaとは・JVM(Java Virtual Machine)とは・3つのエディション・Javaの開発環境

# Javaとは
**【動画URL】** https://youtu.be/7tZ7wK-Xt1Y

◆1995年にSun Microsystemsから最初にリリースされたプログラミング言語

◆オブジェクト指向という考え方でプログラミング出来る

◆スマートフォン向けアプリを作成する事も出来る

# JVM(Java Virtual Machine)とは
**【動画URL】** https://youtu.be/nQjtkX5tsJg

◆Javaのプログラムを動かすために必要なソフトウェア

◆一度書いたらどこでも動く(Write Once,Run Anywhere)

![](https://storage.googleapis.com/zenn-user-upload/78390c380780-20231009.png)

# 3つのエディション
**【動画URL】** https://youtu.be/O0PjPZO_l9o

◆JavaSE(Java Standard Edition) 基礎となる標準的な機能をまとめたもの

◆JavaEE(Java Enterprise

【初心者】モックという概念

# モックとは何か
テスト対象クラスで使用している外部オブジェクトの代わりに模擬の外部オブジェクトを作成することです。
モックを利用することで外部オブジェクトの動作に影響されずにテスト対象クラスの動作をテストすることができます。
※モックフレームワークによって違いがあるため、この記事ではMockitoを例として説明します。

以下のコードでは、`ExampleServiceImpl` クラスの `method01` メソッドが `ExampleRepository` からデータを取得しています。この `ExampleRepository` をモックに置き換えることで`ExampleServiceImpl` クラスの `method01` メソッドが正しく動作するかを、`ExampleRepository` の実装に依存せずにテストすることができます。
### サービスのサンプルコード
“`java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ster

Javaで「配列要素へのアクセスとインデックス」の動作を確認してみた

# 概要

Javaで「配列要素へのアクセスとインデックス」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/array/index4.html

# 実装

以下のファイルを作成しました。
“`JSample4_1.java
class JSample4_1{
public static void main(String[] args){
int[] num = new int[4];

num[0] = 10;
num[1] = 8;
num[2] = 16;
num[3] = 5;

for (int i = 0; i < 4; i++){ System.out.println("num[" + i + "] = " + num[i]); } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample4_1.java $ java JSample4_1 num[0] = 10 num[1] = 8

GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる

こんにちは。@masatomix です。

最近、現場でGraphQLとRESTサーバを構築する機会があったので、そのとき得られたナレッジを備忘としてまとめておこうと思います。

## TL;DR

– RESTサーバとGraphQLサーバを構築します
– EntityとRepositoryから RESTサービスを自動生成します(Spring Data RESTの機能)
– EntityからDDLを実行してテーブルの作成、データ投入を行います(SpringBootとJPAの機能)
– JPAとSpring Data RESTの機能を使って
– ManyToOneの関連があるRESTサービスを自動生成します
– Swggger(OpenAPI)を有効にします。API仕様書のJSONもダウンロード出来ます
– openapi-generator をつかってRESTにアクセスするプロキシ(TypeScript)を自動生成します
– Apollo Serverの機能を使って
– GraphQLのリクエストを受け取って、RESTからデータを取得してGraphQLで返却しています。

S

build.xmlにXmaxerrsオプションを追加したい

# はじめに
Antを使っているプロジェクトで一時的に大量のエラーが表示される状況下において、そのエラー内容を見たいというケースがありました。
ビルド実行時に「もっと見たければ-Xmaxerrsオプションを付けてね!」と教えてはくれるのですが、Antが下火なこともありbuild.xmlで指定する方法がすぐには見つけられなかったので、備忘録としてメモしておきます。

# build.xmlでの指定方法
`javac`要素の子要素として`compilerarg`を記述すれば良いだけです。
“`xml:build.xml






“`

# 参考サイト
– [Anatomy of a simple Ant build.xml file](https://bedr

文字列チェック

“`java
public class StringChecker {
public static void main(String[] args) {
String[] testInputs = {
“Example@123”, // 大文字, 小文字, 数字, 記号 – 4種類
“EXAMPLE123”, // 大文字, 数字 – 2種類
“example123”, // 小文字, 数字 – 2種類
“Example”, // 大文字, 小文字 – 2種類
“123456”, // 数字のみ – 1種類
“example!”, // 小文字, 記号 – 2種類
“EXAMPLE@”, // 大文字, 記号 – 2種類
“123!@”, // 数字, 記号 – 2種類

Java memo

~~~Java
public class MainServiceTest {
private SubService subService;
private MainService mainService;

@BeforeEach
public void setUp() {
subService = Mockito.mock(SubService.class);
mainService = new MainService(subService);
}

@Test
public void testExecuteCallsPerformActionTwiceWithDifferentReturnValues() {
// 1回目の呼び出しは0を返し、2回目の呼び出しは1を返すように設定
when(subService.performAction()).thenReturn(0).thenReturn(1);

int[] results = mainSe

Javaで「配列の宣言と配列の作成」の動作を確認してみた

# 概要

Javaで「配列の宣言と配列の作成」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/array/index2.html

# 実装

以下のファイルを作成しました。
“`JSample2_1.java
class JSample2_1{
public static void main(String[] args){
int[] result = new int[3];

result[0] = 75;
result[1] = 88;
result[2] = 82;

for (int i = 0 ; i < 3 ; i++){ System.out.println(result[i]); } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample2_1.java $ java JSample2_1 75 88 82 ``` # まとめ 何かの役に立てばと。

VSCodeでdocker-composeを使用しSpringBoot×PostgreSQLで開発しよう!

# はじめに
SpringBootとPostgreSQLの開発環境をdockerで動くようにし、
Hello Worldを表示させるところまでを解説します。
今回はGradleを使用し、vscode上でリモートコンテナに接続して実行という形になっています。
eclipse等を使用せず、vscodeで開発したい!という方向けになっています。
DBの初期データ等は用意していないので、ご自身の作成したいアプリに合わせて用意してください。

# 環境
| 環境| バージョン |
|:-:|:-:|
| Docker | 20.10.17 |
| Openjdk | 17 |
| Spring Boot | 3.1.0 |
| Gradle | 3.6.3 |

# ディレクトリ構成

下記では今回のディレクトリ構成を示しています。
“`
current/
├ .devcontainer/
├ devcontainer.json
├ docker-compose.yml
├ SpringProje

Java チートシート

# 基本構文
“`java
// クラス宣言
public class MyClass {
// メンバ変数
int myVar;

// コンストラクタ
public MyClass(int var) {
this.myVar = var;
}

// メソッド
public void myMethod() {
System.out.println(“Hello, World!”);
}

// メインメソッド
public static void main(String[] args) {
MyClass obj = new MyClass(10);
obj.myMethod();
System.out.println(“myVar: ” + obj.myVar);
}
}
“`

# 変数とデータ型
“`java
int myInt = 10; // 整数型
double myDouble

ScalaでVirtual Threadを雑に試してみる

# TL;DR

内部でスリープするようなFutureのインスタンスを、
Java 21のVirtual ThreadおよびPlatfrom Threadから作成し、
処理にかかった時間を出してみました。

# Platfrom Thread

まずは`scala.concurrent.ExecutionContext.Implicits.global`を使って、
1秒スリープするFutureのインスタンスを50個作ってみました。

結果はコメントに記載の通り7726msかかりました。

“`scala
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, Future}

object Main extends App {
val start = System.currentTimeMillis()

val futures = (1 to 50).map { _ =

Javaで「switch文を使った条件分岐」の動作を確認してみた

# 概要

Javaで「switch文を使った条件分岐」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/if/index4.html

# 実装

以下のファイルを作成しました。
“`JSample4_1.java
class JSample4_1{
public static void main(String[] args){
int[] classcode = {1,3,2};
String[] name = {“鈴木”,”本田”,”遠藤”};

for (int i = 0; i < 3; i++){ System.out.print(name[i] + "さんは"); switch(classcode[i]){ case 1: System.out.println("Aクラスです"); break; case 2: System.out.println("B

SonarQubeさんに怒られたら

# まえがき

## この記事に記載されている内容
SonarQubeは大変便利なツールです。
しかし解析結果の見方や検知されたIssueの内容が分からず無視してしまったり、
あまり理解せずにとりあえず直すという対応をしてしまったりしたことはないでしょうか?

この記事ではIssueの検知結果の確認にフォーカスして以下の内容を記載します。

– SonarQubeの解析結果の確認の仕方
– 検知されたIssueの表示のされ方
– SonarQubeが提供してくれる情報の確認の仕方
– 検知されたIssueがなぜ指摘されているのか調べる方法

SonarQubeさんに怒られたら、
めんどくさいなぁと思うのではなく
その内容を血肉に変えてレベルアップしましょう◎

# SonarQubeとは
SonarSource社が開発する、様々な言語に対応したソースコードの品質管理ツールです。

https://www.sonarsource.com/products/sonarqube/

ソースコードを静的解析し、以下のような処理を実施します。

– バグの検知
– 脆弱性の検知

Javaの値をJavaScriptで使用する方法

# やりたいこと
JavaScriptでJavaの値を使用する。
フレームワークはSpringBootで、thymeleafを使用する。

# 使用例
バックエンドであるJavaでデータベースの値を得て、JavaScriptがその値を参照したいとき。

# 実践例
“`HomeController.java
@GetMapping(“/home”)
public String view(Model model) {
model.addAttribute(“キー名”, 値);
return “home”;
}
“`
キー名を指定してJavaScriptで使用したい値をmodelに格納する。キー名は任意。
“`home.html