JAVA関連のことを調べてみた2022年12月05日

JAVA関連のことを調べてみた2022年12月05日

SpringBoot でテスト駆動開発 ドメインはECショップで注文情報を作成する部分

# 概要
SpringBootのウェブアプリーケーションでテスト駆動を行います。
アーキテクチャはRestController-Service-Repositoryであり、本記事ではServiceレイヤーのテストコードを書きます。
Repositoryレイヤーの確認は行われているものとして進めます。
Cntrollerの実装はしません。

# 開発環境
IDE: IntelliJ Community
spring-boot-starter-parent 2.75
java : 11
テスト系: Junit5 Mockito
# 図とか

# ユースケース
ショッピングカートと顧客IDから注文情報を作成する機能を実装します。
顧客が支払う金額を確認するために、総額、税抜き価格、配送料、消費税といった情報を表示します。
税抜き価格で4000円以上だと送料が無料になります。
4000円以下だと送料は300円掛かります。

# クラス図
本記事的には赤丸で囲まれているクラスを実装します。
テストコード的にはRepositoryレイヤーのモックデータを作ります。

![image.png](h

元記事を表示

H2DB 予約後に関連するエラー

apiテストでh2ので以下のエラーが出た
“`
org.h2.jdbc.JdbcSQLSyntaxErrorException: SQLステートメントに文法エラーがあります
“`
原因 offsetがh2の予約語になっている。
“`
create文…, OFFSET[*] NUMBER(5)
“`

対応方法
該当の予約後をダブルクォーテーションで囲む

以下のリンクが非常に分かりやすいです。
[参考: h2.jdbc.JdbcSQLSyntaxErrorException:SQLステートメントに文法エラーがあります
](https://zenn.dev/rstliz/articles/69c1fd6c7401eb)

元記事を表示

Gradle Lint Pluginを導入したい

この記事は[フリューAdvent Calendar 2022](https://qiita.com/advent-calendar/2022/furyu)の5日目の記事となります。

## はじめに
こんにちは。フリューでサーバサイド開発をしています、kitajimaです。
ここでは、弊チームで行っている”改善会”という取り組みの中で試してみたツール及びその所感を述べていきます。
なお、”改善会”の詳細は弊社テックブログにも執筆しておりますので、こちらもぜひご覧ください。
https://tech.furyu.jp/review-guideline/

弊チームが携わるプロダクトの中で、主にビルドツールとして利用しているのが[Gradle](https://gradle.org/)です。
今回、プロダクトコードではなくGradleの依存関係をターゲットにしたLinter、Gradle Lint Pluginを試してみたので紹介させていただきます。

## Gradle Lint Plugin とは
Netflixが提供するGradleのプラグインです。

https://github.

元記事を表示

KotlinでSpock入門[mock編]

この記事は筆者の[ソロ Advent Calender 2022](https://qiita.com/advent-calendar/2022/panda) 5日目の記事です。

前回まででSpockでのテストの書き方を色々紹介しましたが、今回はSpockにおけるMockを使用したテストの書き方を紹介します。

# Mocking
まず、以下のようなクラスとインターフェイスを用意します。

“`groovy:Publisher.groovy
class Publisher {
List subscribers = []
int messageCount = 0
void send(String message){
subscribers*.receive(message)
messageCount++
}
}

interface Subscriber {
void receive(String message)
}
“`

PublisherにはリストでSubscriberが格納でき

元記事を表示

Spring boot select文

Repositoryでselect文を書きし実行すると、以下のエラーが出ました。

“defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.List com.example.demo“

“`
@Query(value=”select * from userInfo LEFT JOIN bookInfo on userInfo.userId = bookInfo.userId”)
““
なんやねん!といろいろ調べると、、、

前提知識として、@Queryとアノテーションをつけて

元記事を表示

for文、while文を使って演習(ユークリッド互除法)

# 問題
入力値1と入力値2の最大公約数を表すための文字列を返却して出力してください。

“`java
public static void main(String[] args) {
System.out.println(euclideanAlgorithm(252,105));
}

public static String euclideanAlgorithm(int num1, int num2) {
System.out.println(“入力値1 : ” + num1);
System.out.println(“入力値2 : ” + num2);

int a = 0;//二値交換のための退避領域
if ((num1 < num2) || (num2 == 0)) { a = num1; num1 = num2; num2 = a; } //※ for (int i = 1; i != 0; ) { i = num1 % num2; num1 = num2; num2 = i; }

元記事を表示

【Java】参照型オブジェクトの罠

【Java】参照型オブジェクトの罠

以下の事象が発生して、解消に時間がかかったので、共有します!

■起きた事象

レスポンスの件数分、参照型オブジェクトをarrayにaddしたのだが、addされた[0]番目の要素の値のみがレスポンスの件数分、置き換わってしまう。

以下のコードは、Listに格納されたレスポンスの件数分、arrayにaddするコードです。

“`java:bug
void bug() {
List response = new ArrayList<>();
/******************* 処理省略 *******************/
List array = new ArrayList<>();
Test test = new Test();

for(int i = 0; i < response.size(); i++) { test.setId(response.

元記事を表示

App Service で Tomcat アプリケーションをデプロイする際の注意点

# はじめに
[Microsoft Azure Tech Advent Calendar 2022](https://qiita.com/advent-calendar/2022/microsoft-azure-tech “Microsoft Azure Tech Advent Calendar 2021″) の 4 日目の記事です。本稿では、App Service で Tomcat アプリケーションをデプロイする際に陥りやすい注意点を紹介します。

# 概要
App Service における Tomcat アプリケーションのデプロイ方法については、公式ドキュメントの[WAR、JAR、EAR パッケージをデプロイする](https://learn.microsoft.com/ja-jp/azure/app-service/deploy-zip?tabs=cli#deploy-warjarear-packages”) にて解説されています。こちらのドキュメントにて言及されているとおり、サポートされている手段はAzure CLI、PowerShell、Kudu publish API と

元記事を表示

switch文を使った演習

# 問題
リレーの順位に応じて以下の点数を出力してくださ。
1位は50点、2位は40点、3位は30点、4位は20点、5位以下は10点。

“`java
public static void main(String[] args) {
score(1);
}
public static void score(int grade) {
switch(grade) {
case 1:
System.out.println(“50点”);
break;
case 2:
System.out.println(“40点”);
break;
case 3:
System.out.println(“30点”);
break;
case 4:
System.out.println(“20点”);
break;
default:
System.out.println(“10点”);
break;
}
}

//演算結果
//50点
“`

# 補足
– switch文の場合if文と違って、条件に当てはまっても以降

元記事を表示

入門 : EclipseとGitでバージョン管理するぞ ~その1~

この記事ではEclipseとGitを使って、ローカルリポジトリを作るところから、コミットするまでの流れを記載しています。さらっと見れるように、なるべく無駄な内容は省いているので、時間がない方でもすぐに実行できると思います。

<前提知識>
・Gitについての基本的な仕組みを理解している
Gitについてよくわからない → 参考サイト;https://qiita.com/renesisu727/items/248cb9468a402c622003

<注意>
この記事は自分のつまづいたところを備忘録として残し、共有するために書きました。もし記事に誤字や誤りがあった場合はご指摘のほど、どうぞよろしくお願いします。

<目次>

1,開発環境
2,Eclipseとは(ざっくり)
3,Gitとは(ざっくり)
4,本題
  [1]Eclipseで新規のローカルリポジトリ(コミット(変更履歴)を残す場所)を作成しよう
  [2]作成した新規ローカルリポジトリに、プロジェクトをコミットしよう
  [3]本当にコミットされているか(履歴保存されているか)確認しよう


1、開発環境

– Wi

元記事を表示

Java学習 導入~HelloWorld~

学習用に走り書き残し。後でまとめたい。
間違えがあればご指摘いただきたい。
## Javaの導入
### Java
JVM(Java Virtual Machine)上で動作する。OSに依存しない。
プログラムをクラスという単位で作る
Hello.java = class Hello
### 開発にはJDKが必要
JDK(Java Development Kit)、コマンドプロンプトで使うツール群。プログラムを作るのに必要。
### JRE
JRE(Java Runtime Environment):ランタイム環境
JRE=JVM+APIで、Javaの実行に必要。JDKにはこれが内包されている。

## 最低限のDOSコマンド
$md ディレクトリ作成(make directory)
$cd ディレクトリ移動(change directory)
 $cd ../ 一個上のディレクトリへ移動
$dir ファイル一覧取得(directory)
$cls コマンドライン掃除(clear screen)
$del ファイル削除(delete)
 del *.* ディレクトリ内のファイルを全削除

元記事を表示

ABC280A~Eの解答[Java]

## はじめに
今回もEまでコンテスト中に解けたのでそれをそのまま載せようと思います。

では、見ていきましょう。

※テンプレ等、実際の提出が見たい方は[こちら](https://atcoder.jp/contests/abc280/submissions?f.Task=&f.LanguageName=&f.Status=AC&f.User=viral)からどうぞ

## A – Pawn on a Grid
問題文は[こちら](https://atcoder.jp/contests/abc280/tasks/abc280_a)

`#`の位置を数え上げれば良いですね。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(S

元記事を表示

SpringBoot2.4からの設定ファイル処理方法

# 概要

SpringBoot2.4以降、設定ファイル(`application.yml`の類)の処理方法がガラッと変わっている。[^1]
[^1]: [SpringBoot2.4のリリースノート](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes#importing-additional-application-config)

SpringBoot2.x系を使っている分には、2.3以前の処理方法をonにするオプション(`spring.config.use-legacy-processing`)を利用できるが、SpringBoot3に追随する場合は左記のオプションは使えないので、新しい処理方法への適応が必須である。[^2]
[^2]: [公式のブログ](https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0#:~:text=Migrate%20from%20Legacy%20application.

元記事を表示

Java 初級勉強②

今回は演算子について学んだため、アウトプットとなります。
事前にRubyは学習しているため、ごっちゃになっている部分はあるかもしれませんが、ご了承ください。

# 代数演算子

|演算子| 使い方|意味|
|:—-:|:—-:|—-|
|+| a + b|加算|
| -| a – b|減算|
|*|a * b|乗算|
|/|a / b|除算|
|%|a % b |剰余|

これが一覧になります。
具体的な例は下記になります。

“`java
class Main {
public static void main(String[] args) {
System.out.println(10 + 20); //①
System.out.println(20 – 10); //②
System.out.println(10 * 20); //③
System.out.println(20 / 10); //④
System.out.println(20 % 15); //⑤
}

元記事を表示

【Go言語を学習して感じたこと ~他の開発言語と比較してみた~】

こんにちは。
新卒入社3年目文系出身のエンジニアです。
次の案件がGo言語を使用するとのことなので、
今ProgateやA Tour of Goを用いて学習しているのですが、
他の開発言語と異なる点を踏まえて、
印象的に感じたこと・驚いたことについてまとめてみました。
これからGo言語を勉強する方に参考になっていただければ幸いです。

### 変数の型定義が独特!
Java, JavaSciript, Go言語で比較していこうと思います。
Javaは**型名、変数名**の順番で定義していきます。
“`java:hello.java
String message = “”;
Int number = 123;
“`

JavaScriptでは、グローバル変数をつけると以下のようになります。
※グローバル変数とは?・・・プログラム内のどこからでも使える変数, 関数の外側でも使用することができる変数のことです。例)var, let
“`javascript:hello.javascript
var string message = “”
let int number = 123
“`

元記事を表示

API開発を助けたい OpenAPI Generator編

# はじめに

こんにちは。技術を学ぶことが好きな T です。

現場に初めて参画される方や API 開発をこれから行っていく方を助けたいという思いから、記事を作成させていただきました。
タイトルにあるように【OpenAPI Generator】というライブラリの設定に関して記載させていただきます。
微力でも皆様のお役に立てれば幸いです。
※ 最適解というわけでなく、一実装方法として確認いただけると幸いです。

### 対象者

– 現場に初めて参画される方
– 駆け出しエンジニア(WEBアプリの基礎がある程度わかっている)
– API 開発を実施する方
– schema 駆動開発を採用するプロジェクト

# OpenAPI Generator 概要

– OpenAPI
– YAML また JSON で REST API の記述形式(フォーマット)です。
– ある情報(Request)を送ることで、ある情報(Response)を返してくれる等を纏めたもの
– Swagger というツール郡を活用すること、記述が楽になります。
– OpenAPI and Swagger

元記事を表示

Leetcode 2256. Minimum Average Difference

# 2256. Minimum Average Difference

https://leetcode.com/problems/minimum-average-difference/

## 難易度
### Medium

## アプローチ
### Prefix sum

“`java
package com.leetcode.midium;

// import java.util.HashMap;
// import java.util.Map;

public class MinimumAverageDifference2256 {
public static void main(String[] args) {
System.out.println(minimumAverageDifference(new int[]{2, 5, 3, 9, 5, 3}));
System.out.println(minimumAverageDifference(new int[]{1}));
System.out.println(m

元記事を表示

#26 Spring Mybatisを利用したデータベース操作[3. Update, Delete]

# 24 Spring Mybatisを利用したデータベース操作[3. SELECT 1件]
今回はMybatisを用いてUpdate, Delete文を実行していきます。

# 前提条件
この記事はSpringの最低限の知識が必要になります。
また、なるべく分かりやすく書くつもりですが、この記事の目的は自分の勉強のアウトプットであるため所々説明は省略します。

# 前回まで
前回はMybatisを利用してデータを1件取得しました。

https://qiita.com/Jackoguro/items/a3f90527aadd2857c0b1

# 構築環境
1. 各バージョン
Spring Boot ver 2.7.5
mybatis-spring-boot-starter ver 2.2.2
Model Mapper ver 3.1.0
jquery ver 3.6.1
bootstrap ver 5.2.2
webjars-locator ver 0.46
thymeleaf-layout-dialect ver 3.0.0

2. 依存関係
![image.png](https

元記事を表示

if文を使った演習

# 問題
うるう年かどうか判定するメソッドを作成しなさい。
うるう年の判定条件は「4で割り切れる」「100で割り切れない」「400で割り切れる」とする。
※ うるう年である場合に返却する文字列
“西暦 : year年 <改行文字>うるう年です。
※ うるう年ではない場合に返却する文字列
“西暦 : year年 <改行文字>うるう年ではありません。

“`java
public static void main(String[] args) {
System.out.println(leapYear(2020));

}
public static String leapYear(int year) {
if (year % 400 == 0) {
return “西暦 : ” + year + “年\nうるう年です。”;
} else if (year % 100 == 0) {
return “西暦 : ” + year + “年\nうるう年ではありません。”;
} else if (year % 4 == 0) {
return “

元記事を表示

VS Code + JUnit で単体テストを構成する

VS CodeとJava拡張機能でユニットテストができるプロジェクトを構成する方法を簡単にまとめました。

# 準備
※初回のみ必要な作業。2回目以降はスキップしてね。

1. VS Codeを起動
1. コマンドパレット[^1]から`”Install Extension”`を実行
1. 次の拡張機能をインストールする
– `Extension Pack for Java`
– `Debugger for Java`
– `Test Runner for Java`

# プロジェクトを作る
1. 左の縦に並んでいるアイコンのうちの『フラスコのアイコン』をクリック
1. `Enable Java Tester` をクリックするとテスト実行のためのファイルがWEBからダウンロードされる。

[^1]: `Ctrl+Shift+P`で表示できる、コマンド入力で操作できるツール。

# テストを書く
1. ソースコードを開く
1. ソースコードのタブ上で右クリックし、メニューから `ソース アクション…` を選択する
1. リストから`Generate Test.

元記事を表示

OTHERカテゴリの最新記事