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

JAVA関連のことを調べてみた2022年04月11日
目次

Spring Boot + Vue.js + Axios でいいね機能の実現

# はじめに
Spring Boot学習中の者です。学習のためにアプリケーションを作成していて、いいね機能を実装する上で考えたこと等をまとめました。

# 参考文献

https://qiita.com/yoyoyo/items/b288f067d5de04f26046

https://masawada.hatenablog.jp/entry/2017/04/19/105243

# 使用技術
Spring Boot 2.6.6
Spring Security
Thymeleaf
MySQL
Mybatis 2.2.0
Vue.js
Axios

# いいね機能のロジック
以下の要件を満たすようないいね機能を実装しました。
1.ユーザは、一つの投稿に対し1回「いいね」を押すことができる。
2.ユーザが対象の投稿に既に「いいね」を押していた場合、その「いいね」は取り消される。

# テーブル
今回の例で使う「ユーザの投稿情報」を持つPOSTテーブルと、「ユーザがいいねした投稿情報」を持つLIKESテーブルの構成です。
POSTテーブル(主キー:POSTID)
|カラム名|POSTID|

元記事を表示

【Spring】Validation(入力チェック)

# 概要

当記事では、
  ・標準機能のValidation
  ・独自実装Validation
の実装方法について説明します。

# 標準機能のValidation
必須チェックを実装したい場合を例にすると、
「javax.validation.constraints.NotEmpty」など
下記の「 @NotEmpty(message = “入力してください。”) 」のように、
指定することで簡単に実装することができます。
“`
@NotEmpty(message = “入力してください。”)
public String mailAddress;
“`

# 独自Validation

## アノテーション実装
“`/ValidationDemo/src/main/java/com/example/demo/validation/UnavailableString.java
package com.example.demo.validation;

import static java.lang.annotation.ElementType.*

元記事を表示

【spring】flywayを使用したマイグレーション

# 概要
Springでflywayを使用したマイグレーション方法について説明します。

# 準備
## pom.xmlにflywayを追加
下記を追加する
“`/{プロジェクト名}/pom.xml

org.flywaydb
flyway-core

“`

## DB接続情報を追加
“`/{プロジェクト名}/src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://localhost/{接続DB名}
spring.datasource.username={接続ユーザ名}
spring.datasource.password={接続ユーザのパスワード}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
“`

## 実行SQL文用意
“`/{プロジェクト名}/src/

元記事を表示

Effective Java 第3版まとめ(項目1)

# 項目1.コンストラクタの代わりにstaticファクトリメソッドを検討する

## 例

“`java
public class EffectiveJava1 {

// コンストラクタ
public EffectiveJava1() {
}

// staticファクトリメソッド
public static EffectiveJava1 newInstance() {
return new EffectiveJava1();
}
}
“`

## 長所

1. 名前を持つこと
1. その呼び出しごとに新たなオブジェクトを生成する必要がないこと
1. メソッドの戻り値型の任意のサブタイプのオブジェクトを返せる
1. 返されるオブジェクトのクラスは、入力パラメータの値に応じて呼び出しごとに変えられる
1. 返されるオブジェクトのクラスは、そのstaticファクトリメソッドを含むクラスが書かれた時点で存在する必要さえない

## 短所

1. publicあるいはprotectedのコンストラクタを持たないクラスのサブク

元記事を表示

Scalaの勉強はじめました 6 〜関数型プログラミング編 関数について〜

## はじめに
N予備校で「Scala応用」コースを受講しています。
今回から関数型プログラミングについてです。

## 関数型プログラミング
:::note
外部の状態を変化させない関数だけでプログラミングを行うこと
:::

外部の状態を変化させることを、**副作用**という。

### 副作用のある関数
変数を変更する
オブジェクトが持っているフィールドの値を書き換える
例外やエラーを発生させる etc.

### 参照透過性
値と式が交換できるような関数
“`scala
def square(n: Int) = n * n
“`
同じ値を入れたら必ず同じ結果になることが保証されたもの、かな。
正直テキストよりもこっちの方がまだわかりやすい。

https://gimo.jp/glossary/details/referential_transparency.html

## 関数
“`scala
val add = new Function2[Int, Int, Int] {
def apply(x: Int, y: Int): Int = x + y
}
“`

元記事を表示

【Java】Spring Data JPA関連プロパティ @application.properties

# プロパティ一覧(随時追加)
“`properties
spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Tokyo
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
“`

# spring.jpa.properties.hibernate.jdbc.time_zone
・データベースのタイムゾーンを設定する。
・設定方法は2つあるが、今回は設定方法2。

 設定方法1:JDBC URLのパラメータとして設定
 設定方法2:spring.jpa.properties.hibernate.jdbc

元記事を表示

【Java】HibernateでEntity/DB間をマッピングする仕組み

# まえがき
Entityクラスに@Table,@EntityをつけてORMをなんとなくで実現していたが、その仕組みをちゃんと知ろうという記事。

https://www.baeldung.com/hibernate-naming-strategy

# 2つのNaming Strategy
・Entityクラス と DB 間で「テーブル名」「カラム名」のマッピングを行う際にNaming Strategyを利用する。
・Naming Strategyは「Explicit Strategy」と「Imlicit Strategy」の2つ存在する。
・マッピング処理は次のフローで行われる。

 ① LogicalNameの決定【Implicit Strategy】
 ② PhysicalNameの決定【Explicit Strategy】

  LogicalName:Javaで扱うテーブル名,プロパティ名
  PhysicalName:DBとマッピングさせるテーブル名,プロパティ名

# ① LogicalNameの決定【Implicit Strategy】
・デフォルトのImplicit

元記事を表示

【Java】JPA備忘録(Entity・ID自動採番・Repository・Specification・@Transational)

# まえがき
SpringBootでWEBアプリケーションを作るとき、よくSpring Data JPAを利用する。
Entityクラス関連のアノテーションや、トランザクションの動きについて時間が経つと忘れるので、備忘として残す。

# Entityクラス
“`java
@Entity
@Table(name = “sample_user”)
// @CreatedDate @LastModifiedDate を活性化するために必要
@EntityListeners(AuditingEntityListener.class)
public class SampleUserEntity implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId;
private String name;
private Integer age;
private String gender;
pri

元記事を表示

auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(注文発注編)

# はじめに

前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック

元記事を表示

VSCodeのJavaのOrganize Importsで削除済みファイルが候補に残り続ける場合の対処法

名前変更等で削除されたファイルがキャッシュに残り続け、Organize Imports時に候補になってしまう現象への対処方法です。

コマンドパレット(F1キー等で起動)で以下のコマンドを実行します。
“`
Java: Clean Java Language Server Workspace
“`
一応スクショも。
![スクショ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139956/38c20fc8-4a1d-94c1-9d38-368f3843f8e2.png)
VSCodeのキャッシュのクリア等で検索すると `Clear Editor History` コマンドが出て来ますが、この現象に対してそちらは効果がありません。
同じような原因でビルドエラーになった際、たまたま今回のコマンドに気づいたのでメモとして残しておきます(通常はすぐビルドするから今回のような現象でハマらないのかも知れない…)。

元記事を表示

Spring O/R Mapperの使い分け

# O/R Mapperとは何か
O/R Mapperはオブジェクト指向言語で書かれたアプリケーションと非オブジェクト指向であるデータベースやSQLの間のインピーダンスミスマッチを解消させるためのフレームワークである。今回はメジャーなO/RMapperである以下のフレームワークについて調査する。
* JPA(Java Persistance API)
* MyBatis

# JPA(Java Persistance API)
* Domainに@Entity等のアノテーションを付与することで設定する
* CRUDに関わる基本的なメソッドがEntityManagerから提供されるため、冗長なSQLの記載が不要になる
* 独自のクエリを発行する際は、SQLライクな独自のクエリ言語であるJPQL(Java Persistance Query Language)を使用する

以下にDomainの実装例を示す。
“`java
package com.example.todo.domain.model;

import java.io.Serializable;
import java.ut

元記事を表示

Spring4ShellがGlassfishとPayaraに拡大:同じ脆弱性ですが、新しい悪用法です

本記事は2022年4月8日(米国時間)に公開した英語ブログ[Spring4Shell extends to Glassfish and Payara: same vulnerability, new exploit](https://snyk.io/blog/spring4shell-rce-vulnerability-glassfish-payara/)を日本語化した内容です。

[![logo-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/2691d8df-331d-96e6-dee7-9f990f036d53.png)](https://snyk.io/jp)

先週、[Spring4Shell](https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751)の発見について発表しました。`spring-beans`パッケージの古いバージョンにリモートコード実行(RCE)の脆弱性

元記事を表示

【Java】RestTemplate・WebClient・MockMvc 比較メモ

# まえがき
APIからAPIをコールする場合や、テストプログラム内からAPIをコールしたい場合に「何使えばいいの?」というところで以下の3つが挙げられる。

・[RestTemplate](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html)(org.springframework.web.client.RestTemplate)
・[WebClient](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.html)(org.springframework.web.**reactive**.function.client.WebClient)
・[MockMvc](https://docs.spring.io

元記事を表示

ElasticBeansTalk + Spring boot でEverything(It’s you)してみた

# Elastic Beanstalkって?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/68155040-90dd-a0de-a1bd-f377e7d5c895.png)

> AWS Elastic Beanstalk は、Java、.NET、PHP、Node.js、Python、Ruby、Go および Docker を使用して開発されたウェブアプリケーションやサービスを、Apache、Nginx、Passenger、IIS など使い慣れたサーバーでデプロイおよびスケーリングするための、使いやすいサービスです。

というのは漠然とわかっていたのですが、触ったことがなかったので、とりあえずElastic Beanstalk x Spring bootで何かやってみたかったから、ちょっと触ってみた程度です。

例によってEverything(It’s you)です。get叩いて1フレーズ返すだけですが・・

# アプリケーション作成

![image.png](htt

元記事を表示

Paraya Server と IntelliJ IDEAで Webアプリケーションの開発環境を構築する

# Payara Serverをインストールする
Payara Serverを[ダウンロード](https://www.payara.fish/downloads/payara-platform-community-edition/, “ダウンロード”)します。

ダウンロードしたファイルを解凍します。
“`
unzip payara-5.2022.1.zip
“`

解凍したフォルダを任意のフォルダに移動します。
“`
mv ~/Downloads/payara5 ~/tools/
“`

# Payara Platform Toolsをインストールする
IntelliJ IDEAを起動します。

プラグインをクリックします。
![スクリーンショット 2022-04-09 5.56.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/8948d714-dff6-485d-eec7-bfaad1f9247c.png)

検索バーに、「Payara」と入力します。
「Payara Pl

元記事を表示

ThymeleafでHTMLのレイアウトを共有する方法(thymeleaf-layout-dialect)

Spring Bootを学習中、thymeleafでHTMLファイルで共通するレイアウト部分を共有する方法を学んだので、アウトプットも兼ねて投稿します!

## thymeleaf-layout-dialectとは?

thymeleafのライブラリの一つで、レイアウトを共通化させたい時にとても便利です。
イメージとしては大枠となるレイアウトをベースとして固定し、後から必要な要素だけ足して反映させていくような形です。

手順は下記の通りで行います。

## 手順

#### ①「thymeleaf-layout-dialect」ライブラリを取得

#### ②実際にHTMLファイルに記載??

## 「thymeleaf-layout-dialect」ライブラリを取得

Spring bootのプロジェクトを作成後、pom.xmlに下記を追記し、
thymeleaf-layout-dialectライブラリを追加します。

![スクリーンショット 2022-04-09 0.49.30.png](https://qiita-image-store.s3.ap-northeast-1.am

元記事を表示

どのディレクトリに居ても正しい gradle wrapper を起動する

めんどくさがって path にある適当に新しい gradle を使うとビルドできないレガシープロジェクトとか生まれがち。

これでいける。

“`
gradle () {
GITDIR=`git rev-parse –show-cdup 2> /dev/null`
if [ -e “$GITDIR./gradlew” ]
then
echo Using $GITDIR./gradlew
$GITDIR./gradlew “$@”
else
echo Using $(/usr/bin/which gradle)
$(/usr/bin/which gradle) “$@”
fi
}
“`

元記事を表示

Jacksonで複数の型を取りうるJSONの値を特定クラスにマッピングする

## JSONは型が自由
JSONはJavaScriptのオブジェクトっぽい、キーバリューでのデータの表現方法なわけですが、その型には、オブジェクト、配列、文字列、数値、true、false、nullが存在してます。オブジェクトの構造は自由、配列内の型も固定されているわけではないので、以下のようなデータも存在します(良し悪しはおいておいて)。

“`json
{
“hoge” : [“string”, [“array1”, “array2”], {“name” : “三雲修”, “code” : “B-2-1”}]
}
“`

これを[Jackson](https://github.com/FasterXML/jackson “github”)というありがたーーーーいライブラリを使用し、いずれにしてもあるクラスにマッピングさせようとした際の備忘録です。

## 思いつく限りでの解決策

扱う以前にそもそもこの形式のデータに相対したときにいくつかのアプローチが考えられる~~かと思い~~ます。

### (1) 全部オブジェクトにしちゃう

“`json
{
“hoge” :

元記事を表示

Visual Studio CodeでJavaの実行環境の追加とデフォルトの設定

Visual StudioでJavaの開発環境を作成する際に、Javaの実行環境を追加したり、どれをデフォルトとして使うのかを設定する方法を確認しました。

settings.jsonに`java.configuration.runtimes`に配列で複数のJavaの実行環境を`name`、`path`を指定して設定できます。
更にデフォルトで使うものは`”default”: true`を指定することが可能です。

“`
“java.configuration.runtimes”: [
{
“name”: “JavaSE-1.8”,
“path”: “/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home”,
“default”: true
}
],
“`

## 思ったこと。
ある時、ビルドはできるけど、Visual Studio Code上でのユニットテストがエラーを吐くようになった。

元記事を表示

多言語対応のAtCoderテストツールをJavaで作成した話

初めまして、初投稿になります。記事というものを始めて執筆するため読みづらい部分がありますが、ご了承ください。
私は最近趣味で競技プログラミングを触っていて主にAtCoderと呼ばれるサイトでプログラミングをしています。
AtCoderでは大量の過去のコンテスト問題を触って勉強することができますが、いちいち入力例・解答例をコピーペーストでターミナルに張る作業がめんどくさいと感じてきてしまいました。
そこで過去問をターゲットとして自動で入力例・回答例から正解・不正解を出力してくれるテスト自動化ツールをJavaを使って作成しました。

## はじめに
この記事では以下の記事を参考に作成をしています。
実際に以下記事では私のツールでは賄えない部分まで賄えているため一度ご確認お願い致します。
– https://github.com/kyuridenamida/atcoder-tools
– https://github.com/nodchip/OnlineJudgeHelper
– https://qiita.com/EngTks/items/a542c8f

元記事を表示

OTHERカテゴリの最新記事