JAVA関連のことを調べてみた2020年09月15日

JAVA関連のことを調べてみた2020年09月15日

【Spring Data JPA】deleteの自動実装されるメソッドでAnd条件は使えるか

## 概要
[【Spring Data JPA】自動実装されるメソッドの命名ルール](https://qiita.com/shindo_ryo/items/af7d12be264c2cc4b252)の記事にある通り、JPAではrepositoryの命名規則に合うメソッでを定義することで、クエリを自動生成してくれる機能があります。今回はその自動生成でdeleteの時にAnd条件を使えるかという話です。

## deleteについて
* [Spring Data JPA – Derived Delete Methods](https://www.baeldung.com/spring-data-jpa-deleteby)の記事にある通り、repositoryにdeleteByメソッドを定義し条件に使用するプロパティ名を指定することで、クエリを自動生成してくれます。
* [[Java][Spring Boot][JPA] データベースを使う – NetBeansで始めるSpring Boot (6)](https://qiita.com/sengoku/items/2424c59f3b4a

元記事を表示

Javaでページングしてるときのページの総数の求め方

たまに使うのでメモ。

全体の件数 / ページあたりの件数 を、小数点以下切り上げで、ページの総数が得られます。

やり方自体は色々ありますが、上のをそのまま実装するとこんな感じです。

“`Java
int totalSize = 30;
double pageSize = 10.0;
int totalPage = (int) Math.ceil(totalSize / pageSize);
System.out.println(totalPage);
>> 3
“`

“`Java
int totalSize = 35;
double pageSize = 10.0;
int totalPage = (int) Math.ceil(totalSize / pageSize);
System.out.println(totalPage);
>> 4
“`

“`Java
int total

元記事を表示

スクラッチからApache Flinkアプリケーションを5分で構築する方法

このチュートリアルでは、**Apache Flink アプリケーション**をゼロから数分で構築する方法を簡単に説明します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/build-an-apache-flink-application-from-scratch-in-5-minutes_595188)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#開発環境の準備
[Apache Flink](https://flink.apache.org/?spm=a2c65.11461447.0.0.29c056bf7J56YG)はLinux、Max OS X、Windowsで動作し、互換性があります。Flinkアプリケーションを開発するには、コンピュータ上で[Javaバージョン8.0以降](https://www.oracle.com/java/technologies/java8.html)か[Maven](https://maven.ap

元記事を表示

S3からオブジェクトを取得したときは解放を忘れずに!

# 環境

– Java8
– AWS SDK for Java 1.11

# 現象

S3からオブジェクト取得時に、以下のようなエラーが発生した。

“`
org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
“`

# 問題のコード

“`java
public InputStream getFile(String bucketName,String prefix){
try{
GetObjectRequest request = new GetObjectRequest(bucketName, prefix);
S3Object object = s3client.getObject(request); // s3clientはシングルトンインスタンス変数として生成済み
return object.getObjectContent();
} catch(AmazonServiceException e){

元記事を表示

環境変数「JAVA_HOME」パス設定手順の備忘録

# 環境変数「JAVA_HOME」のパス設定手順の備忘録

「JAVA_HOME」の設定手順を良く忘れがちなので、備忘録として示す。

## 環境

“`bash
$ cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
“`

## 設定手順

JDKのパスを確認する。インストールされていなければ、JDKを適宜インストールしてください。

“`bash
$ dirname $(readlink $(readlink $(which java)))
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64/jre/bin
“`

JAVA_HOMEのパスを設定する。

“`bash
$ cp -pi /etc/profile{,.org}
$ vi /etc/profile
$ diff /etc/profile{,.org}
86,90d85
< < export JAVA_HOME=/usr/lib/jvm/java-1.8.0-open

元記事を表示

try-catch 自分用

◎try-catchメソッド

“`java
package trycatch;

import java.io.FileWriter;
import java.io.IOException;

public class trycatch1 {

public void test() {

FileWriter fw=null;
/*入出力処理で、自分で何らかのファイルを開くコードを書いたなら、
必ずファイルを閉じるコードも書く。=closeメソッド*/

/*closeメゾットをtry-catchメソッドの外に書くために、
* ここでFileWriterを登場させる。
* なぜtrycatchメソッドの外にcloseメソッドを書くのか?
* =tryメソッドでエラーを発見すると、ただちにcatchメソッドに移動してしまうので、
* closeメソッドが実行されない可能性があるから*/

try {
fw=new FileWriter(“data.txt”);
/*ここで”data.txt”という新しいテキストファイルを

元記事を表示

ガイド:Alibaba Cloud Toolkitプラグインを使用してアプリケーションをデプロイ

この記事では、**Alibaba Cloud Toolkit**プラグインを使用してアプリケーションをデプロイする際のコマンドの書き方のベストプラクティスを紹介します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/alibaba-cloud-toolkit-command-writing-guide_594999)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

この記事では、[Alibaba Cloud Toolkit](https://cn.aliyun.com/product/cloudtoolkit_en)プラグインを使用して以下のアプリケーションをデプロイする際のコマンドの書き方のベストプラクティスを紹介します。

– スタンダードな Java Web Tomcat アプリケーション
– スタンダードなJava Fatjarアプリケーション
– スタンダードなSpring Bootアプリケーション
– スタンダードなGo アプ

元記事を表示

Cloud Toolkit Mavenプラグインを使用してEDASにアプリケーションをデプロイ

この記事では、Cloud Toolkit Mavenプラグインを使用して**Alibaba Cloud EDAS**にアプリケーションをデプロイする方法を紹介します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/deploying-applications-to-edas-with-cloud-toolkit-maven-plug-in_594983)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

EDAS開発者の場合、アプリケーションのデプロイにWARまたはJARパッケージを使用している場合は、Cloud Toolkit Mavenプラグインを使用して、アプリケーションをAlibaba Cloud EDASにデプロイすることができます。

#ステップ1: Maven依存関係を追加
プロジェクトの pom.xml ファイルに、以下の``依存関係を追加します。

“`

元記事を表示

Webアプリのメニューの表示条件の設計・コード例

業務でのシステムの話。
ログイン後、メニューが会社や人によって変わる条件を調査をしたときに、「クラス使った方が良くない?」と思ったことがあったので、考えをメモしておきます。

# 現状のコード

以下のような会社クラス、ユーザクラスが存在し、それらの情報を使うビューが実装されています。
ここでは、getter、setterは `@Data` により自動的に実装されるものとします。
また、マジックナンバーは本来使うべきではありませんが、定数化を割愛しています。

## 会社クラス

“`java:Company.java

/**
* 会社の情報を格納するクラス
*/
@Data
public class Company {
private String companyId; // 会社ID
private int option1Flg; // オプション1のフラグ(0 or 1)
private int option2Flg; // オプション2のフラグ(0 or 1)
}
“`

## ユーザクラス

“`java:User.java
/**

元記事を表示

My Study Note (Java)

#Ref. site
– https://www.sejuku.net/blog/22337

#メソッド参照
-https://www.sejuku.net/blog/22337
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/f4629713-49a8-421b-50c3-bec4e2490667.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/1ab7a322-8e5a-0634-8105-fa1625b19a2c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/093f780d-6cd2-e662-9ad9-477bb22f56ab.png)

![image.png](https://qiita-image-store.s

元記事を表示

Micronaut 2.x 入門 ~AWS Lambdaにネイティブビルドしてデプロイ~

前回: [Micronaut 2.x 入門](https://qiita.com/akkiyyy0114/items/27d74671763bedf76ffe)に続いて今回はネイティブビルドしたMicronautアプリをAWS Lambdaにアップロードしていきます。

versionが2.0以降初期で作成されるファンクションアプリが大きく変わったので少し混乱しましたが、公式のブログに細かく作り方が記載されていたので、それを元に作成していきます。

## 環境

* macOS Catalina: 10.15.4
* メモリ: 16GB
* Micronaut: 2.0.1
* Java: 11.0.8.j9-adpt
* Docker for Mac: 2.3.0.4
* AWSアカウント

## MicronautでLambda Function用アプリケーション作成

作業用ディレクトリを作成

“`bash
$ mkdir 02-native-function && cd 02-native-function
“`

Micronaut CLIを利用して作成し

元記事を表示

Java HashMap,entrySet 【個人メモ】

#【Java HashMap,entrySet】

業務でよく使用する、HashMap,entrySetの備忘録です。

##HashMap<key, value>

HashMapはジェネリクス型(総称型)なため、keyとvalueの型を決めて宣言する。
総称型は、利用する型を限定するもの。

Mapのkeyとvalueのペアは、Map.Entry インターフェイスで表す。

##entrySetメソッドは、Mapのクラスメソッド

連想配列キーとバリューの組み合わせをエントリーといい、Mapのコレクションを返す。
Mapの配列ループのようなもので、動作が速い。

Map.Entryは、getKeyメソッドで、key。getValueメソッドで、valueの値を取得する。

.entrySet( ); を使うことで全要素を取得することが可能

###・実際に使用している例

####①HashMap<String, Object> 1対1で対応
 Objectには、様々な要素が入る。

####②ArrayList<String> 文字列の値の羅列を格納

####①+②= Arr

元記事を表示

Java 部分文字列

#【Java 部分文字列】

業務でよく使用する Javaの部分文字列のメモです。

##部分文字列 substring

substringメソッドの第一引数に抜き出し開始の位置(beginIndex)、第二引数に抜き出し終了の位置(endIndex)を指定する。

部分文字列は、beginIndexから始まり、endIndex-1 までを表す。

##・substringの例

“`java
“サンプル文字”.substring(beginindex, endindex-1);
“`

beginindexは、0番目から数え始める。
配列の添え字の数え方と同じ。

##・文字の長さは、endIndex – beginIndex

“`java
“サンプル文字”.substring(0, 4);

//出力結果:サンプル
“`
この場合だと、文字の長さ 4-0=4
なので、4文字が部分文字列として表示される。

元記事を表示

Javaでデータオブジェクトの内容をJSONに変換したい でも循環参照が…

# この記事で「データオブジェクト」とは何?
データを格納するために定義したJavaのクラスの事を指します。「privateメンバ変数 + getter&setter」か、publicメンバ変数を持つだけのクラスです。
web APIや、JPAでデータベースからデータを取ってくる時なんかによく作りますね。「DTO」って呼ぶ場合もあります。

# 環境
– JDK : Amazon Corretto 1.8.0.265
– Apache commons-lang3 : 3.11

# やりたいこと
こういうデータオブジェクトがあったとして、ここに格納されたデータをログとかに出力したい時ってありますよね。

“`java
public class TestDto
{
public String stringvar;
public Integer integervar;
public int intvar;
public TestDto2 testDto2;
public BigDecimal decimal;
public java.util.Date dat

元記事を表示

【Kotlin】Javaを前提としたリフレクションによるマッピングライブラリは基本的にKotlinで動かない

`ModelMapper`など、「`Java`向けのリフレクションを利用したマッピングライブラリが`Kotlin`の`data class`に対して機能しない」という話をしばしば見かけるので、何故そうなるのかと、それに対応するためにどのような手段が有るかを書きます。

# TL;DR
– `Java`向けのマッピングライブラリは「引数無しコンストラクタでインスタンス生成 -> 個々のフィールドを初期化」という手順を前提としている
– 一方、`Kotlin`の`data class`は基本的に引数無しコンストラクタを持たない
– このため、`Java`向けのリフレクションを利用したマッピングライブラリは`Kotlin`の`data class`に対して機能しない

## 補足
この記事では、マッピングライブラリという言葉を以下のような意味で使います。

– マッピングライブラリ: 何らかのソースからフィールドを初期化したオブジェクトインスタンスを生成するような機能を提供するライブラリ
– e.g. `ModelMapper`, `BeanPropertyRowMapper`

また、

元記事を表示

JavaのgetClass()はジェネリクス(or型変数)との相性が悪い

少し直観に反するJavaの言語仕様に気が付いたのでメモしておきます。
検証環境は Windows 版 OpenJDK 11 (build 28) です。

# 出来ないこと

“`java
public static void hoge(@NonNull T value){
Class type = value.getClass(); // コンパイルできない
// type を使って作業したい
}
“`

value は`T`かそのサブクラスのはずなので一見,問題なさそうな気がしますが,このコードはコンパイル出来ません.

“`text:javac
GenericGetClass.java:3: エラー: 不適合な型: ClassをClassに変換できません:
Class type = value.getClass();
^
Tが型変数の場合:

元記事を表示

Zipファイルを読み込み直接文字列に変換する

# 概要
Zipファイルを読み込み直接文字列に変換します。

# 解説
読み込みにはInputStreamクラスのreadAllBytesメソッドを使用しています。
すべてのバイトを一気に読み込んでくれるのでとても便利ですね~。

ただしリファレンスによると、「このメソッドが、すべてのバイトを1つのバイト配列に読み取ると都合が良い簡単なケースで使用するものであることに注意してください。 大量のデータを持つ入力ストリームを読み込むためのものではありません。」という記載がありました。

# コード
“`java:Unzip.java

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.zip.ZipInputStream;

public class Unzip{
public static void main(String[] args) throws Exception {

String filePath = “ここでZipファイルのパスを指定”;

元記事を表示

正規表現で住所を番地前後で分割する

# 概要
javaで正規表現を使って、住所を番地前後で分割しようと思います。

コンソールから住所を入力することで分割された住所が表示されます。
※あくまで簡略的なものであり、全ての住所を完璧に分割できるものではないのでご了承ください。
# 手順
手順は以下の通りです
1.Patternクラス(java.util.regex.Pattern)で正規表現をコンパイル
2.Matcherクラス(java.util.regex.Matcher)のfindメソッドで入力された文字列が正規表現にマッチするか確認する。
3.マッチした場合文字を分割し、表示する。

正規表現の詳細はこちらのサイトを参考にいたしました。

【Javaで正規表現】文字列をチェックするパターンの書き方とサンプル

# コード
“`java:SplitAddress.java

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public

元記事を表示

Effective Java privateのコンストラクタでインスタンス化不可能を強制する

Effective Javaの独自解釈です。
第3版の項目4について、自分なりにコード書いたりして解釈してみました。
# 結論
staticメンバしか持たないクラスには、実行時例外を出すprivateコンストラクタを用意しよう。
# 説明
例えば共通の処理だけを集めたユーティリティクラス(以下、Utilクラス)はstaticメソッド、static変数のみを持ち、インスタンス化を前提としていない。

一般にpublicなUtilクラスは、コンストラクタを定義しないとpublicなデフォルトコンストラクタが用意されるため、外部のクラスで無駄にインスタンス化されてしまう懸念が生じる。

明示的にprivateコンストラクタを定義することで、Utilクラス外でのコンストラクタ呼び出しを防ぐことができる。
また、コンストラクタに例外出力処理を入れることで、Utilクラス内でのコンストラクタ呼び出しをエラーとすることができる。

※Utilクラスそもそもいらない論はここでは無視。
# コンストラクタ定義なしコード(ダメな例)
**Utilクラス**

“`java
public class S

元記事を表示

【Java】LocalDateTimeクラスで日付を取得する

#まずはimportが必要

“`java
import java.time.LocalDateTime;
“`
でパッケージの利用を宣言する必要があります。
**Eclipse**を使用している場合は宣言する前にLocalDateTimeのインスタンス化をすれば自動的にimport文が挿入されるようです。超便利ですね。

#現在の日付を取得してみよう

“`java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; // 形式を指定する場合はこのパッケージ宣言が必要

public class Sample_01 {

public static void main(String[] args) {
LocalDateTime d = LocalDateTime.now(); // 現在時刻のインスタンスを取得
// LocalDateTime d = LocalDateTime.of(2016, 1, 1, 10. 10, 10); // 特定の日付のインスタンスを取

元記事を表示

OTHERカテゴリの最新記事