Java案件準備

#DB
##用語
楽観ロック
悲観ロック
注　悲観ロックを行う場合は開発コストが高いので注意すること。
#SQL
##コンテンツ
シラバス
用語
TakeAway
参考書籍
早見表
###シラバス
第1章:データベースとSQL
1-1. データベースとは
1-2. さまざまなデータベース
1-3. データベースサーバ
■第2章:テーブルからデータを取り出す
2-1. ハローワールドの実行
2-2. テーブル構造を参照する
2-3. 検索条件を付けて絞り込む
2-4. 条件を組み合わせる
2-5. LIKEによるパターン検索

■第3章:ソートと演算
3-1. 並べ替える ── ORDER BY
3-2. 複数の列を指定して並べ替える
3-3. 取得行を制限する ── LIMIT
3-4. 数値の演算
3-5. 文字列の演算
3-6. 日付の演算
3-7. CASE式でデータを変換する


■第4章:データの追加・削除・更新
4-1. 行を追加する ── INSERT
4-2. 行を削除する ── DELETE
4-3. データを更新する ── UPDATE
4-4. 物理削除と論理削除

■第5章:集計とサブクエリ
5-1. 行数を数える ── COUNT
5-2. COUNT以外の集約関数
5-3. グループ化する ── GROUP BY
5-4. サブクエリ
5-5. 相関サブクエリ

■第6章:データベースオブジェクトの作成と削除
6-1. データベースオブジェクト
6-2. テーブルの作成・削除・変更
6-3. 制約
6-4. インデックスのしくみ
6-5. インデックスの作成と削除
6-6. ビューの作成と削除

■第7章:複数のテーブルを扱う
7-1. 集合演算
7-2. テーブルの結合
7-3. リレーショナルモデル

■第8章:データベース設計
8-1. データベース設計
8-2. 正規化
8-3. トランザクション

##用語
スカラ値
##TAKEAWAY
日付の型
Oracle
https://qiita.com/ponsuke0531/items/57bc035f129922b1b0de
注　日付の型がきちんとしていないとINSERTできない。できても問題が・・・

0割回避
A few accounts have 0 for total, so I divided by (total + 0.01)

GROUP BY
Any column in the SELECT statement that is not within an aggregator must be in the GROUP BY clause.

The GROUP BY always goes between WHERE and ORDER BY.

実行順序
https://qiita.com/yurina0402/items/78ae1f536b6755d6221a

##参考書籍
SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ) (日本語) 単行本（ソフトカバー） – 2016/6/17
ミック  (著)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus) (日本語) 単行本（ソフトカバー） – 2015/3/3
朝井 淳  (著)

##早見表
https://cdn.sqltutorial.org/wp-content/uploads/2016/04/SQL-cheat-sheet.pdf

#キーワード
Java
https://ja.wikipedia.org/wiki/Java
TypeScript
https://ja.wikipedia.org/wiki/TypeScript
Shell
JSP/Servlet
WebApi
Bash　PL/SQL
SpringMVC
マルチスレッド
プロセス
RMI (Java Remote Method Invocation)
https://ja.wikipedia.org/wiki/Java_Remote_Method_Invocation
Rest(Representational State Transfer)
https://ja.wikipedia.org/wiki/Representational_State_Transfer

#それってマルマルなんじゃない？
## なんらかのバージョンの問題。
##環境変数を設定していない。
https://www.javadrive.jp/start/install/index4.html
##CSSセレクタ指定時の記号の抜け
クラス→.
id→#
#あれってなんだっけ？
```java
JavaだとContinue

public class MyXpp {

  public static void main(String[] args) {
    // for
    // 0 - 9
    // break
    // continue
    for (int i = 0; i < 10; i++) {
      if (i == 5) {
        // break;
        continue;
      }
      System.out.println(i);
    }
  }

}

##配列で使うやり方
length
  // 配列
    // sales.length
    int[] sales = {700, 400, 500};

    // for (int i = 0; i < 3; i++) {
    // for (int i = 0; i < sales.length; i++) {
    //   System.out.println(sales[i]);
    // }

    for (int sale : sales) {
      System.out.println(sale);
    }
  }

  // コレクション
    // items.size()
    // items.get(i)

    List<String> items = new ArrayList<>();
    items.add("カッター");
    items.add("のり");
    items.add("ハサミ");

    for (int i = 0; i < items.size(); i++){
        System.out.println(items.get(i));
    }
        items.set(0, "付箋");
        items.remove(2);

    }

    Map<String, Integer> items = new HashMap<>();

    items.put("カッター", 100);
    items.put("のり", 200);
    items.put("ハサミ", 300);

    System.out.println(items.get("カッター")); 
    System.out.println(items.size()); 

    for (Map.Entry<String, Integer> item : items.entrySet()) {
      System.out.println(item.getKey() + ":" + item.getValue());
    }

    sales.put("カッター", 500);
    sales.remove("ハサミ");

    for (Map.Entry<String, Integer> item : items.entrySet()) {
      System.out.println(item.getKey() + ":" + item.getValue());
    }
  }

}

  LocalDateTime d = LocalDateTime.now();
    // LocalDateTime d = LocalDateTime.of(2018, 1, 1, 9, 9, 9);
    // LocalDateTime d = LocalDateTime.parse("2018-01-01T09:09:09");

    System.out.println(d.getYear());
    System.out.println(d.getMonth());
    System.out.println(d.getMonth().getValue());

    System.out.println(d.plusMonths(2).minusDays(3));

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy!MM!dd!");
    System.out.println(d.format(dtf));
```
#コメント
Linux
  #  コメント

プロパティファイル
 #コメント

SQL
-- コメント
/* コメント **/

Java
// (コメント)
/ **
コメント
*/

HTML
<!-- (コメント) -->
<!--
(コメント)
複数行
-->
CSS
/*
(コメント)
*/

JavaScript
下記アドレス参照
https://jsprimer.net/basic/comments/

#環境作り
DockerにLinuxを入れる話
https://blauthree.hatenablog.com/entry/2019/07/13/000839
##実コマンド
docker --version
docker pull centos
docker run -it -d --name centos centos
docker exec -it centos /bin/bash
yum install java-1.8.0-openjdk-devel
java -version

#cheatSheet
https://programmingwithmosh.com/wp-content/uploads/2019/07/Java-Cheat-Sheet.pdf
注　windowsではエスケープシーケンスは¥
https://github.com/in28minutes/java-cheat-sheet

#SpringBoot API
##コンテンツ
用語
トラブルシューティング
参考
環境構築
Curl　コマンド
##用語
@RestController
@ResponseBody

##トラブルシューティング
・アノテーションの抜け
・設定ファイルは？
　https://groupe-sii.github.io/cheat-sheets/spring/spring-boot/index.html
・起動クラス　 HajibootRestApplication

参考アドレス
https://macchinetta.github.io/server-guideline-thymeleaf/current/ja/
https://spring.pleiades.io/guides/tutorials/bookmarks/
##参考
はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発 (I・O BOOKS) 単行本 – 2016/9/1 
槙 俊明  (著)

目次
第1章 「Spring Boot」とは(「Spring Framework」の歴史
「Spring Boot」とは
はじめての「Spring Boot」)
第2章 速習「Spring Framework」(「Spring Framework」によるDI
「Spring JDBC」によるDBアクセス
「Spring Data JPA」によるDBアクセス)
第3章 「Spring Boot」による「Webアプリ開発」(この章で作るアプリ
「REST Webサービス」の開発
「Thymeleaf」を使った、「画面のあるWebアプリ」の開発
「Flyway」で「DBマイグレーション」
「Spring Security」で「認証」「認可」を追加)
第4章 PaaS「Cloud Foundry」にデプロイ(「PaaS」(Platform as a Service)の重要性
「Cloud Foundry」とは
「Cloud Foundry CLI」のインストール
「Hello Worldアプリケーション」のデプロイ
「顧客管理システム」のデプロイ
「Spring Boot Actuator」で「アプリケーションの状態」を監視)
第5章 「Spring Boot」におけるテスト(「Hello World」アプリの結合テスト
「REST API」の結合テスト)
附録 ソフトのインストール方法

##環境構築
・プロジェクト・エクスプローラーの中で右クリック＞インポート＞インポートを選択
・「既存Mavenプロジェクト」を選択
・「参照」ボタンから、ダウンロードしたフォルダーを選択します。
・【Mavenの更新方法】プロジェクトを右クリック＞『Maven』＞『プロジェクトの更新』を選択
・プロジェクト選択　→　実行　→ SpringBootApplication

## Curl　コマンド
curl http://localhost:8080/api/customers -i -XGET
curl http://localhost:8080/api/customers/1 -i -XGET

curl -X POST -H "Content-Type: application/json" -d '{"firstName":"sensuikan1973", "lastName":"Nobi"}' localhost:8080/api/customers/

curl -X PUT -H "Content-Type: application/json" -d '{"firstName":"sensuikan1973", "lastName":"Nobi"}' localhost:8080/api/customers/1

curl http://localhost:8080/api/customers/4 -i -XDELETE
## Postmanノート 1
###GET　localhost:8080/api/customers/
###GET　localhost:8080/api/customers/5
###POST　localhost:8080/api/customers/　
注意点：Body　JSON
{"firstName":"sensuikan1973", "lastName":"ttttt"}
###PUT　localhost:8080/api/customers/1
注意点：Body　JSON
{"firstName":"00000000", "lastName":"ttttt"}
DELETE localhost:8080/api/customers/1
## Postmanノート 2
###http://localhost:8080/rest/get/
###http://localhost:8080/rest/get/yamada@xxx.co.jp

上記は画面で確認
==================================================
###POST http://localhost:8080/rest/insert
注意点：Body　JSON
{"userId":"tamura@co.jp", 
"password":"7777", 
"userName":"tamura",
"birthday":"1986-11-05",
"age":"31",
"marriage":"false",
"role":"ROLE_ADMIN" }
###PUT http://localhost:8080/rest/update
注意点：Body　JSON
{"userId":"tamura@co.jp", 
"password":"7777", 
"userName":"tamura888",
"birthday":"1986-11-05",
"age":"31",
"marriage":"false",
"role":"ROLE_ADMIN" }
###DELETE http://localhost:8080/rest/delete/tamura@co.jp

#Java
##用語
参照型
基本型
ディフォルトコンストラクタ

##シラバス
01 Javaを使ってみよう 
概要
公式サイト
必要となる知識
レッスンにおける環境
OpenJDKのインストール

02 Javaが動作する原理を理解しよう 
Javaが動作する原理
JDK
JRE, JVM

03 はじめてのJavaプログラム 
MyApp.java
コンパイル
実行
コメントの書き方

04 変数を使ってみよう 
変数の宣言
値の代入
動作確認

05 さまざまなデータ型を使おう 
文字
整数
浮動小数点数
文字列
特殊文字

06 データの演算をしてみよう 
数値の演算
文字列の連結

07 データ型の変換をしてみよう
キャスト
動作確認

08 ifで条件分岐をしてみよう
if ... else if ... else ...
比較演算子
論理演算子
条件演算子

09 switchで条件分岐をしてみよう
switch

10 whileで繰り返し処理をしてみよう 
while
do ... while

11 forで繰り返し処理をしてみよう
for
break
continue

12 配列を使ってみよう 
配列の宣言
要素へのアクセス

13 配列の要素を操作してみよう 
forとの組み合わせ
length

14 データ型とメモリの関係を理解しよう
基本データ型
参照型
メモリの使い方

15 基本データ型と参照型を理解しよう 
挙動の違い
文字列型に関する注意事項

16 メソッドを使ってみよう 
メソッドの作り方
メソッドの使い方

17 メソッドをオーバーロードしてみよう
変数の有効範囲
メソッドのオーバーロード

18 クラスを使ってみよう
クラスの作り方
インスタンスの作り方
動作確認

19 コンストラクタを使ってみよう 
コンストラクタ
コンストラクタのオーバーロード
this()

20 クラスを継承してみよう 
クラスの継承
super()
メソッドのオーバーライド
アノテーション

21 パッケージとアクセス権を理解しよう 
パッケージ
アクセス修飾子

22 パッケージを使ってみよう
パッケージへの分類

23 パッケージをコンパイルしてみよう 
import
コンパイル
実行

24 getter､setterを使ってみよう
getter
setter

25 static修飾子を使ってみよう
static修飾子
クラス変数
クラス・メソッド

26 イニシャライザを使ってみよう
staticイニシャライザ
インスタンスイニシャライザ

27 final修飾子を使ってみよう
final修飾子

28 抽象クラスを使ってみよう 
抽象クラス
抽象メソッド

29 インターフェースを作ってみよう
インターフェースの作り方
インターフェースの使い方

30 列挙型を作ってみよう
列挙型の作り方
列挙型の使い方

31 例外処理を扱ってみよう 
例外処理
try ... catch ... finally ...
動作確認

32 ラッパークラスを使ってみよう
ラッパークラス
相互変換の方法

33 ジェネリクスを使ってみよう 
ジェネリクス
動作確認

34 スレッド処理を実装してみよう
スレッドの作り方
スレッドの実行方法
Runnableインターフェース

35 無名クラス､ラムダ式を使おう 
無名クラス
関数型インターフェース
ラムダ式

36 Stringクラスを使ってみよう
Stringクラスのメソッド
文字列の比較

37 printfメソッドを使ってみよう 
printf()
String.format()

38 Math､Randomクラスを使おう 
Mathクラス
Randomクラス

39 ArrayListを使ってみよう 
ArrayList
LinkedList

40 HashSetを使ってみよう 
HashSet
TreeSet
LinkedHashSet

41 HashMapを使ってみよう 
HashMap
TreeMap
LinkedHashMap

42 Stream APIを使ってみよう
stream()
filter()
map()
forEach()

43 LocalDateTimeクラスを使ってみよう
LocalDateTimeクラス

##用語
For
For-each

length 配列で使用
size ArrayListで使用

##TakeAway
###抽象クラス
// 抽象クラス -> 具象クラス
abstract class User {
  public abstract void sayHi(); // 抽象メソッド
}

class JapaneseUser extends User {
  @Override
  public void sayHi() {
    System.out.println("こんにちは！");
  }
}
###ArrayList
https://www.w3schools.com/java/java_arraylist.asp
###Java8以降の日付
https://qiita.com/tag1216/items/91a471b33f383981bfaa
###ラムダ式の話
https://qiita.com/kuryus/items/820bdf48cc341a6445f0