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

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

SpringBoot+MyBatis+MySQLの初歩

# 概要
これまでJdbcTemplateの使用経験しかなくMyBatisを使ったことがなかったので、SpringBoot + MyBatis + MySQLを使用してみた。
## 環境
+ macOS Catalina 10.15.7
+ Java11
+ SpringBoot 2.3.4
+ MySQL 8.0
+ Gradle

##やってみたこと
今回は本の情報がDBに登録されており、それを1件取得、全件表示することにします。

+ データベースからID検索し表示
+ 全件取得して一覧表示

■初回アクセス時の画面
![初期画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250449/9f53fc14-b6be-3277-0313-548a2d58dff9.png)

■1件検索(idをフォームに入力して検索を押下)
![検索結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250449/fd9f8f9

元記事を表示

Encapsulation(カプセル化)復習

# Encapsulation(カプセル化)とはなんだっけかな?

最近OOPの基本概念の1つであるカプセル化の理解が薄れていたので、めちゃくちゃ復習範囲狭めで自分の復習用で書きます。

カプセル化ってなんなの?とプログラミングしたことない彼女に聞かれた場合、
簡単に説明すると、**薬のカプセルみたいに、外部から中にあるあの細かい粒たちを守ることw。**と最初に言い、それからコードで説明するかも。

~~外部からオブジェクトに対するアクセスコントロールと自分は理解しています。(本当はもっとあるかもしれない。。)~~
コメントでアドバイスを頂き、自分の理解が間違っていたことに気付けました。

**アクセスコントロールはカプセル化をするための手段なので、カプセル化とは違いますね。**

**カプセル化の説明**

カプセル化は、ソフトウェアを分割する際に、関係するデータとそのデータを必要する処理を1つにまとめ、無関係なものや関係性の低いものをクラスから排除することで「何のためのクラスなのか?」というクラスの目的を明確化するために行い、ほかのクラスに重複するデータや処理がない状態を目指すもの

元記事を表示

Javaのバージョン違いによるオプション使用可否

先日普段と違うPCを使うシーンがありました。
入っているJavaのバージョンを確認しようとしたところ以下のようなエラーが。。

“`Terminal:Terminal
$ java –version
Unrecognized option: –version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
“`

––versionのオプションは認識されていません?
Javaの仮想マシーンが作成できません??
致命的エラー???

おかしいなぁと思い調べたところ、以下の記事を見つけました。

https://stackoverflow.com/questions/37186197/errorcould-not-create-the-java-virtual-machine-errora-fatal-exception-has-occu

どうやらJDK9以降は ––vesion を使えるらしいですが、
JDK8以

元記事を表示

Doma入門 – トランザクション

## はじめに

データベースアクセスに欠かせないトランザクション機能についてポイントを紹介します。

この記事では、Doma 2.44.0を前提とします。

Domaの他の機能紹介については[Doma入門](https://qiita.com/nakamura-to/items/deaff05ba530317f3cf8)もお読みください。

## 最初に検討すること

トランザクションに関して最初に検討すべきことがあります。
それは、利用しているフレームワーク(SpringFrameworkなど)がトランザクション機能を提供しているかどうかです。提供している場合、まずはそちらの利用を検討ください。

### SpringFrameworkを使う場合

SpringFrameworkはトランザクション機能を提供します。

`org.seasar.doma.jdbc.Config`の実装クラスの`getDataSource`メソッドでは、`org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy`を使ってラップ

元記事を表示

Java/JavaScript/C#で暗号化する

各言語で暗号化。
やってみると、暗号化後の文字列が各言語で違ってしまったりして、意外とハマったりします。
ここでは、Java/JavaScript/C#を取り上げてみます。

# 暗号化
## Java
まずは、Java。

“`java:Crypto.java
import java.nio.charset.StandardCharsets;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import java.util.Base64;

public final class Crypto {

private static final String KEY = “1234567890abcdef”;
private static final String IV = “abcdef1234567890”;

private Crypto() {
}

private

元記事を表示

Log4J Asyncやったら遅くなるんだけど

みんな大好きLog4J。この記事は非同期の設定
作者はロギングのシステムについてはあんまりわかってない。
WEBでまよったりして動かなかったので記事まとめる。

# 結論
なんか私の環境ではAsyncじゃないほうが速い。

# 動機
WEBアプリケーションのボトルネックはロギングとDBなので速いものを求めた。

# 公式
http://logging.apache.org/log4j/2.x/manual/async.html
6-68倍速とのこと。すごい。
監査証跡ログとかExceptionログとかに使わないほうが良いよ!っていってるけどまぁ大丈夫だよね。使う。

# 要求
IPAの文書に従うと(プロジェクトメンバーが読んでくれてスペック教えてくれた)、
* SQLのログ
* アクセスログ
* アプリのログ(自由形式?)
を作っておけとのこと。
アクセスログはWEBサーバーで出しても良いんだろうけどアプリ側でも出すことにする
よって一旦3つのロガーを設定する例を考えた

# 書き方
## Asyncで囲むAsyncLoggerと書く
前者だと私が試した感じでうまく行かなかった。なんで

元記事を表示

JavaでTODOアプリを制作しよう11 存在しないIDのTODOにアクセスした時の例外処理

こんにちは。

Java + SpringでTODOアプリを作るシリーズですが、今回からいよいよ例外処理を実装していきます。

まずは例外処理に慣れるためにも比較的簡単なところから始めたいので、存在しないIDにアクセスした時の例外処理を見てみましょう!

## TODOアプリ作成リンク集
[1: [超基礎の理解] MVCの簡単な説明](https://qiita.com/nomad_kartman/items/bce2f4831b7b769f84f2)
[2: [雛形を用意する] Spring Initializrで雛形を作ってHello worldしたい](https://qiita.com/nomad_kartman/items/e173ea95b3ead96a412a)
[3: [MySQLとの接続・設定・データの表示] MySQLに仮のデータを保存 -> 全取得 -> topに表示する](https://qiita.com/nomad_kartman/items/f5f13037f048eeecf492)
[4: [POST機能] 投稿機能の実装] (https://qiit

元記事を表示

【Java】 キャッシュの影響でアップロードした画像が更新されない問題

##概要
作成中のwebアプリで画像をアップロードしたはいいものの、アップロードした画像が画面で中々更新されない問題で詰まったので、自分用にメモします。
原因としてはキャッシュが悪さをしていて、更新前の画像をそのまま読み込んでしまっているためと思われます。

##解決方法
結論から言ってしまえば、jsp側で表示している画像の”test.jpg
//変更後
test.jpg
“`

画像のURLがまったく同じで何も変更がないと、ブラウザは**「キャッシュを使用すればいい」**と判断してしまうので、更新が反映されなくなっていたようです。

##パラメーターをlastModifiedで付与する
任意の固有のパラメーターなので何でも良いのですが、せっかくな

元記事を表示

ARC104のD Multiset MeanをScala、Java、C++、Ruby、Perl、Elixirで解く

AtCoder ARC104の4問目をScala、C++、Java、Ruby、Perl、Elixirで解きました。言語ごとの処理速度の比較ができました。

[問題へのリンク](https://atcoder.jp/contests/arc104/tasks/arc104_d)

# 結果

| 言語 | 結果 |
| —- | —- |
| Scala | TLE |
| C++ | AC 1830ms |
| Java | AC 2995ms |
| JavaっぽいScala | AC 2991ms |
| Ruby | TLE |
| Perl | TLE |
| Elixir | TLE |

競技プログラミングにおける言語の選択と処理速度の関係は以下のツイートに言及がありました。

このツイートによると、C++、Javaは大丈夫だけど、他の言語は計算量がシビアな問題には厳しいようです。

競技中は解法を見つけ出すのに時間がかかり、わかったあとはScalaで

元記事を表示

【Java】com.sun.glass.WindowEventがimportされていてウインドウが閉じない

#開発環境
IDE: Eclipse photon 4.8
MacBook: Catalina 10.15.7
言語: java8

#閉じるボタンでウインドウを閉じるためのコード

“`java
addWindowListener(new WindowAdapter() {
// @SuppressWarnings(“unused”)
public void windowClosing (WindowEvent e) {
dispose();
System.exit(0);
}
});
“`

`@SuppressWarnings(“unused”)`のところは、Eclipseが提案してきたコメント。これを挿入すればエラーは表示されなくなったけど、`使用していないよと明示してJVMに教えたげてるので、使われていない変数があってもエラーとして認識しなくてもいいよ。書いた人もわかっているよ`ということでエラーを表示させなくするためのコメント。

つまり、解決してないってこと!

当然、ウインドウを閉じることはできない。でも教材通りに書いてるつも

元記事を表示

Dagger Hilt (DevFest 2020 資料)

DevFestの資料の記事版です。ステップごとにサンプルアプリの差分付きで説明します。
なぜDependency Injectionが必要なのか から始め、Dagger Hiltの説明、実践的なプラクティスまで説明していきます!

# Dependency Injection(DI)とはなにか

### なぜDIが必要なのか

DI、ちょっと難しいイメージありますが、そもそもなんで必要なんでしょうか?
作っているのが動画再生するアプリでVideoPlayerというクラスがあるとしましょう。
VideoPlayerのクラスの中にデータベースやcodecなどが**ハードコードされています。**

コード: https://github.com/takahirom/hilt-sample-app/commit/8c36602aaa4e27d8f10c81e2808f0ff452f1c8a4#diff-bbc9d28d8bcbd080a704cacc92b8cf37R19

“`kotlin
class VideoPlayer {
// データベースにビデオの一覧が保存されている (

元記事を表示

Eclipse実行時のエラーメッセージを翻訳してみた(Java)

Eclipse実行時のエラーを翻訳してみました

#エラー原因
org.springframework.beans.factory.BeanCreationException
RequestMappingの値が重複したときに起きるエラー

##エラー詳細の翻訳
encountered during context initialization
コンテキストの初期化中に発生しました

cancelling refresh attempt
更新の試行をキャンセルする

Error creating bean with name
名前のあるBeanの作成中にエラーが発生しました

Error creating bean with name
名前のあるBeanの作成中にエラーが発生しました

defined in class path resource
クラスパスリソースで定義

Invocation of init method failed
initメソッドの呼び出しに失敗しました

Ambiguous mapping.
あいまいなマッピング。

Cannot map ‘memberRes

元記事を表示

VSCodeでJavaの開発環境構築をする

学部の授業でJavaを用いたオブジェクト指向入門をしたものの,「だいぶ前のことで忘れてしまった...」ということで,復習がてら再入門していきます.
# 開発環境構築
Javaは2年前くらいに学部の授業で利用していましたが,PCを新しくしてから初めて利用するため,開発環境構築からしなくてはなりません.
統合開発環境としてはEclipseが有名で講義でも利用していました.しかし,利用頻度の小さいJavaのために新しくインストールしたくなかったため,VSCodeを利用して環境構築しました.

環境構築は,[こちら](https://code.visualstudio.com/docs/languages/java)を参考に行いました.以下はリンク先に書かれている,環境構築の概略です.

## JDK(Java SE Development Kit)のインストール
もし,JDKをインストールしていなかったら以下からダウンロードする必要があります.

– [Oracle Java SE](https://www.oracle.com/java/technologies/javase-downlo

元記事を表示

[Java] PDFバージョンを変換する

日常生活や仕事の中では、私たちの使ってるデバイスが、PDFバージョンに
厳しい条件が必要だという場合はよくあるんでしょう?こういう時なら、PDFバージョンを変換して、そのデバイスに合わせる必要があると思います。だから、この記事では、Free Spire.PDF for Javaを使用してPDFバージョンを変換する方法を説明します(PDFバージョン1.0-1.7 変換可能)

**JARパッケージのインポート**
**方法1:** [Free Spire.PDF for Java](https://www.e-iceblue.com/Download/pdf-for-java-free.html)をダウンロードして解凍したら、libフォルダーのSpire.Pdf.jarパッケージを依存関係としてJavaアプリケーションにインポートします。

**方法2:** Mavenリポジトリから直接にJARパッケージをインストールしたら、pom.xmlファイルを次のように構成します。

“`xml


com.e-ice

元記事を表示

ThymeleafでJavaScriptを生成する

## 概要
ひょんなことからThymeleafでJavaScriptを触ることがあったので備忘録です。

## 環境
OpenJDK 11.0.2
SpringBoot 2.3.4
Thymeleaf 3.0.11

## TemplateEngine設定
“`java:AppConfig.java
@Configuration
public class AppConfig {

@Bean
public TemplateEngine scriptTemplateEngine() {
final TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setDialect(new SpringStandardDialect());
templateEngine.setTemplateResolver(scriptTemplateResolver());

return templateEngine;
}

p

元記事を表示

Java APIをラムダ式を使って使用する方法

このサイトが分かりやすかったナリ

リストのsortメソッドの引数に、変数宣言なしでラムダ式を入れていたのがいまいち理解できなかったので調べた。

匿名クラスでメソッドをオーバーライドする代わりに、ラムダ式を使うという当たり前のことだが、したの説明を見てなんとなく納得したナリ

上記サイトから引用

“`java
new Predicate() {
@Override
public boolean test(Integer number) {
return Math.abs(number) >= 5;
}
}
“`
そして、この処理はラムダ式で置き換えることができ、次のコードのように記述することができます。

“`java
number -> Math.abs(number) >= 5
“`

元記事を表示

【Java】コレクションクラスのSet構造(HashSetとTreeSetについて)

#プログラミング勉強日記
2020年10月15日
JavaでTreeSetを使ったが、HashSetとの違いがよくわからなかったので、記録する。

#コレクションクラスとは
 コレクションは要素を集めたオブジェクトのこと。コレクションクラスは大きく分けてList,Map,Setの3つの種類がある。それぞれ性質の異なるクラスに分かれている。

 List構造はArrayListとLinkedListの2種類ある。List構造は要素を順番付けして管理する構造で、要素はインデックス番号順に並んでいるので、番号を指定して要素の取得や挿入、更新、変更などができる。

 Map構造はHashMapとTreeMapの2種類ある。Map構造はキーと値をセットにしたものを1つの要素として管理するデータ構造で、要素がキーとして管理されているのでキーを指定して値の更新や削除をお来ぬことができる。
 今回扱うHashSetとTreeSetは名前からもある通りSet構造であり、下記にまとめる。

#Set構造のコレクションクラスとは
 Set構造はHashSetとTreeSetの2種類あり、要素を順番付けしない

元記事を表示

Java の Stream で List を List に変換するサンプルコード

“`java
// List に入れる要素のクラス
public class MyData {

public final String name;
public final Integer age;

public MyData(String name, Integer age) {
this.name = name;
this.age = age;
}

public String getMyInfo() {
return name + “(” + age + “)”;
}
}
“`

“`java
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class Main {

public static void main(String[] args) {

// データを構築
List list = n

元記事を表示

JavaでEmail送信を実装する

#はじめに
SpringBootのプロジェクトでパスワードを再設定したかったのですが、初期化したパスワードをEmailで送信できないか実践してみた備忘録です。

#まずは環境設定
環境は
**IDE:Eclipse**
**バージョン:Java8、springframework.boot version 2.3.0**

また、メール送信のためにはSMTPサーバーが必要ですが、ローカルだと実際に送信できなさそうなので、今回は簡単にGoogleのSMTPを使用します。

build gradleに必要なものをビルド

**build.gradle**

“`
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-mail’
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
// パスワードの文字列をランダム生成するためのcommons-lang3をコンパイル
comp

元記事を表示

java mail pop3 imap 受信

メモ
受信のみ。送信はこちらを参考:https://qiita.com/rubytomato@github/items/b106ff8011bcad60bce2

“`xml:pom.xml



com.sun.mail
javax.mail
1.6.2



org.jsoup

元記事を表示

OTHERカテゴリの最新記事