フレームワークを使ってWEB開発!
Docker+Java+Spring Bootハンズオン

本講座の対象者


・WEBアプリ作成したい人

・dockerで環境構築したい人

・docker-composeで環境構築したい人

・Spring環境構築したい人

・Springアプリ作成したい人

本講座のゴール


・JavaフレームワークSpringについて理解します。

・docker-composeについて理解します。

・docker-composeでSpring環境のWEBアプリ構築について理解します。

自己紹介

氏名:梅本 利春:フリーランスエンジニア(15年くらい)

出身:北海道紋別郡湧別町

経歴:WEBアプリ(主にバックエンド)、Androidアプリ、GUIアプリなど

使用言語:Java/Android/C#/Ruby/Python/Javascript

使用DB:Oracle/Postgresql/MySQL/SQLite

ハンズオンの流れ

1.事前準備

  ・Dockerセットアップ

  ・JDKセットアップ

  ・Sprint Tool Suite4環境構築

2.Docker環境構築

3.患者一覧画面作成

4.受付一覧画面作成

5.修正画面作成

6.登録画面作成

時間があれば・・・


7.Docker概要

8.SpringBoot概要

1.Dockerセットアップ

(Windows7/8/10Pro以外)

Windows7環境構築

・Vagrant構築

・Dockerインストール

・Docker-composeインストール

Vagrant構築

ダウンロードURL:http://www.vagrantup.com/

 「Download」⇒「Windows 64bit」をダウンロード、インストール

補足

Win7のVagrantで使用するPowerShellのバージョンの関係でパッケージのダウンロードが必要

URL:https://docs.microsoft.com/ja-jp/powershell/wmf/5.1/install-configure

OSに合わせたパッケージ(WMF5.1)のダウンロード(例:Windows7 SP1など)

(.NET Frameworkのバージョンが4.5.1以下の場合は先に.NET Frameworkのダウンロード、インストールが必要)

PowerShellを管理者権限で実行


#実行ポリシーをRestricted以外に変更
Set-ExecutionPolicy RemoteSigned
						

ダウンロードしたファイルのフォルダへ移動


#インストール
.\Install-WMF5.1.ps1
						

インストーラの指示に従ってインストール後、Restricted権限実行


#実行ポリシーをRestrictedに変更
Set-ExecutionPolicy Restricted
						

PC再起動

PowerShellでバージョン確認


vagrant --version
#結果:Vagrant 2.2.0
						

CentOS7セットアップ


vagrant plugin install vagrant-vbguest      #vbguestインストール(共有フォルダ用)
mkdir drug_docker                           #dataフォルダ作成(共有フォルダ)
vagrant box add centos/7                    #BOX取得
vagrant box list                            #BOX結果確認:centos/7 (virtualbox, 1809.01)
vagrant init centos/7                       #Vagrantfile生成
#生成されたVagrantfileの35行目の「#」削除(コメント解除)
#35行目:#config.vm.network "private_network", ip: "192.168.33.10"
#生成されたVagrantfileの38行目あたりのconfig.vm.synced_folder「#」削除(コメント解除)
#38行目:#config.vm.synced_folder "./drug_docker", "/var/vagrant_data"
vagrant up                                  #結果:default: Machine booted and ready!
						

Docker/docker-composeインストール


vagrant ssh   #Vagrantfileが存在する場所に移動して接続
#必要なパッケージインストール
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#リポジトリ追加
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast    #YUMパッケージインデックス更新
#インストール可能バージョン確認
sudo yum list docker-ce.x86_64 --showduplicates | sort -r
#インストール(バージョン指定)
sudo yum -y install docker-ce-18.03.1.ce-1.el7.centos
#Docker-Composeダウンロード※証明書の検証でNGがでた為、オプション-kを追加。検証をOFFにする
#/usr/local/bin/docker-composeにダウンロードするとエラーとなった為、/home/vagrant/docker-composeにダウンロード、移動、権限変更する
sudo curl -k -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-`uname -s`-`uname -m` > /home/vagrant/docker-compose
sudo mv ./docker-compose /usr/local/bin/docker-compose
sudo chmod 755 /usr/local/bin/docker-compose
sudo systemctl start docker    #起動
sudo systemctl status docker   #確認
sudo usermod -aG docker $USER  #現在のユーザーをdockerグループに入れる
exit                           #切断
vagrant ssh                    #再ログイン
systemctl status docker        #確認
						

Docker/docker-composeバージョン確認


$ docker --version
//結果:Docker version 18.06.1-ce, build e68fc7a
$ docker-compose --version
//結果:docker-compose version 1.21.0, build unknown
						

1.Dockerセットアップ

(64bit Windows 10 Pro)

Windows環境構築(64bit Windows 10 Pro)

1.Docker for Windowsのダウンロード

2.Docker for Windowsのインストール

1.Docker for Windowsのダウンロード

 URL:https://docs.docker.com/docker-for-windows/install/

 「Download from Docker Store」選択

 「Get Docker」選択

2.Docker for Windowsのインストール

 そのまま「OK」を選択


	//バージョン確認
>docker --version
 Docker version 18.06.1-ce, build e68fc7a
>docker-compose --version
 docker-compose version 1.22.0, build f46880fe
						
1.Dockerセットアップ(Mac)

Mac環境構築

1.Docker for Macのインストール

2.Docker-composeインストール

URL:https://docs.docker.com/docker-for-mac/install/

Download from Docker Store

ログイン(アカウントが必要になります。)

Get Dockerでダウンロード、インストール


		バージョン確認
		$ docker --version
		Docker version 18.06.0-ce, build 0ffa825
		$ docker-compose --version
		docker-compose version 1.22.0, build f46880f
							

1.JDKセットアップ(Windows)

JDK11.0.1のダウンロード

URL:https://www.oracle.com/technetwork/java/javase/downloads/index.html

Java SE 11.0.1(LTS)の「Download」選択

Windows: 「Accept」選択後、「jdk-11.0.1_windows-x64_bin.exe」選択してダウンロード

Mac  : 「Accept」選択後、「dk-11.0.1_osx-x64_bin.dmg」選択してダウンロード

 ダウンロードされたファイルを実行

 1.次へ

 2.インストール先を入力して次へ

 3.次へ

 4.インストールされた旨の画面に進んだので「閉じる」選択

 JAVA_HOME設定

 1.コントロールパネル⇒システム⇒システムの詳細設定⇒環境変数

 2.システム環境変数に「JAVA_HOME」があれば選択、編集ボタン、なければ新規ボタンを選択

  ※存在する場合は既存のアプリケーションに影響しますので終了後に戻してください。

 3.インストールしたホームディレクトリを入力

  例:F:\ProgramFIles\Java\jdk-11.0.1

 確認

 1.DOSを開く


java -version  #java version "11.0.1" 2018-10-16 LTS
path           #jdkのbinパスが出力されることを確認:F:\ProgramFIles\Java\jdk-11.0.1\bin;
						

1.JDKセットアップ(Mac)

JDK11.0.1のダウンロード

URL:https://www.oracle.com/technetwork/java/javase/downloads/index.html

Java SE 11.0.1(LTS)の「Download」選択

Windows: 「Accept」選択後、「jdk-11.0.1_windows-x64_bin.exe」選択してダウンロード

Mac  : 「Accept」選択後、「dk-11.0.1_osx-x64_bin.dmg」選択してダウンロード

 ダウンロードされたファイルを実行

 1.ダブルクリック

 2.続ける

 3.インストール

 4.閉じる

 5.バージョン確認


#バージョン確認 java version "11.0.1" 2018-10-16 LTS
java -version
						

JDKのアンインストール※参考まで


cd /Library/Java/JavaVirtualMachines
ls                                               #jdk確認
#ファイル命名:/Library/Java/JavaVirtualMachines/jdkmajor.minor.macro[_update].jdk
# jdk1.7.0_80.jdkをアンインストールする場合
sudo rm -rf jdk1.7.0_80.jdk
						
.
1.STS環境構築

STS4インストール

STS4ダウンロードURL:https://spring.io/tools

「Download STS4 (for Windows 64bit)」を選択、解凍

日本語化プラグインダウンロード、解凍

STS4ダウンロードURL:http://mergedoc.osdn.jp/

setup.exeを起動し、日本語化するSpringToolSuite4.exeを選択。

lombokをダウンロード

lombokダウンロードURL:https://projectlombok.org/download

ダウンロードしたlombokをダブルクリック

SpringToolSuite4.exeのインストール先が表示されてることを確認し、インストール

2.Docker環境構築

1.適当な場所にdrugフォルダを作成します。

2.docker-compose.yml作成します。ファイル名:docker-compose.yml


version: "3"
services:
  drug_db:
    image: postgres:9.6
    container_name: "drug_db"
    ports:
      - 5555:5432
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=password
    tty: true
    restart: always
    user: root
    volumes:
      - ./init:/docker-entrypoint-initdb.d
      - drug_db:/var/lib/postgresql/data

volumes:
  drug_db:
    external: false
						

3.drugフォルダ内にinitフォルダを作成します。

4.initフォルダ内にユーザとデータベース作成スクリプトを配置します。

  ファイル名:1_createdb.sql


create user drug_user with password 'pass';
create database drugdb;
						

5.initフォルダ内にユーザ権限、スキーマ作成シェルを配置します。

  ファイル名:2_user_permission.sh


#!/bin/bash
# ※Windows10Pro環境では上記コメント「!/bin/bash」は不要
# ※Windows環境では改行がCRLFとして読み込まれるため、エディタの設定で改行をLF、文字コードをUTF-8に変更してください。
psql -U root -d drugdb << "EOSQL"
ALTER ROLE drug_user WITH SUPERUSER;
CREATE SCHEMA drug_user;
EOSQL
						

6.initフォルダ内にシーケンス、テーブル、初期データ作成シェルを配置します。

  ファイル名:3_createdata.sh


#!/bin/bash
# ※Windows10Pro環境では上記コメント「!/bin/bash」は不要
# ※Windows環境では改行がCRLFとして読み込まれるため、エディタの設定で改行をLF、文字コードをUTF-8に変更してください。

psql -U drug_user -d drugdb << "EOSQL"

CREATE SEQUENCE drug_user.uke_no_seq MAXVALUE 99999999 CYCLE;
CREATE SEQUENCE drug_user.pt_no_seq MAXVALUE 99999999 CYCLE;
CREATE SEQUENCE drug_user.md_no_seq MAXVALUE 99999999 CYCLE;
CREATE SEQUENCE drug_user.hp_no_seq MAXVALUE 99999999 CYCLE;
CREATE SEQUENCE drug_user.dr_no_seq MAXVALUE 99999999 CYCLE;
CREATE SEQUENCE drug_user.ka_no_seq MAXVALUE 99999999 CYCLE;

CREATE TABLE drug_user.pt_tran
(
  uke_no                        integer NOT NULL ,
  receipt_date                  timestamp without time zone ,
  pt_no                         integer ,
  hp_no                         integer ,
  dr_no                         integer ,
  del_flg                       integer ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT pt_tran_pk PRIMARY KEY (uke_no)
);

CREATE TABLE drug_user.ptset_tran
(
  uke_no                        integer NOT NULL ,
  gyo_no                        integer NOT NULL ,
  md_no                         integer ,
  tb_no                         integer ,
  nomi_no                       integer ,
  times_no                      integer ,
  del_flg                       integer ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT ptset_tran_pk PRIMARY KEY (uke_no,gyo_no)
);

CREATE TABLE drug_user.pt_master
(
  pt_no                         integer NOT NULL,
  pt_name                       character varying(50)          ,
  birthday_dt                   timestamp without time zone    ,
  insurance_no                  integer                        ,
  insurance_cd                  character varying(50)          ,
  insurance2_cd                 character varying(10)          ,
  fuyo_flg                      integer                        ,
  exp_dt                        timestamp without time zone    ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  tel_no                        character varying(13)          ,
  add_no                        character varying(8)          ,
  add1_name                     character varying(32)          ,
  add2_name                     character varying(32)          ,
  add3_name                     character varying(32)          ,
  gender_flg                    integer DEFAULT 0              ,
  CONSTRAINT pt_master_pk PRIMARY KEY (pt_no)
);

CREATE TABLE drug_user.md_master
(
  md_no                         integer NOT NULL ,
  md_name                       character varying(200)         ,
  times_no                      integer                        ,
  tb_no                         integer                        ,
  take_time                     character varying(20)          ,
  dtail                         character varying(200)         ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  md_price_k                    integer                        ,
  md_kensaku_flg                character varying(6)          ,
  CONSTRAINT md_master_pk PRIMARY KEY (md_no)
);

CREATE TABLE drug_user.hp_master
(
  hp_no                         integer NOT NULL              ,
  hp_name                       character varying(50)          ,
  hp_add_no                     integer DEFAULT 0              ,
  hp_add1_name                  character varying(200)         ,
  hp_add2_name                  character varying(200)         ,
  hp_add3_name                  character varying(200)         ,
  hp_tel                        character varying(13)          ,
  hp_cd                         character varying(13)          ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT hp_master_pk PRIMARY KEY (hp_no)
);

CREATE TABLE drug_user.hpdtl_master
(
  hp_no                         integer NOT NULL              ,
  ka_flg                        integer NOT NULL              ,
  dr_no                         integer NOT NULL          ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT hpdtl_master_pk PRIMARY KEY (hp_no,ka_flg,dr_no)
);

CREATE TABLE drug_user.dr_master
(
  dr_no                         integer NOT NULL          ,
  dr_name                       character varying(50)          ,
  hp_no                         integer DEFAULT 0              ,
  ka_no                         integer DEFAULT 0              ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT dr_master_pk PRIMARY KEY (dr_no)
);

CREATE TABLE drug_user.ka_master
(
  ka_no                         integer NOT NULL          ,
  ka_name                       character varying(50)          ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT ka_master_pk PRIMARY KEY (ka_no)
);

CREATE TABLE drug_user.name_master
(
  name_kbn                      integer NOT NULL          ,
  name_no                       integer NOT NULL          ,
  nm_name                       character varying(200)    ,
  name1_flg                     integer DEFAULT 0              ,
  name2_flg                     integer DEFAULT 0              ,
  name3_flg                     integer DEFAULT 0              ,
  name4_flg                     integer DEFAULT 0              ,
  name5_flg                     integer DEFAULT 0              ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT name_master_pk PRIMARY KEY (name_kbn,name_no)
);

CREATE TABLE drug_user.nomi_master
(
  nomi_no                       integer NOT NULL                ,
  nomi_name                     character varying(200)          ,
  times_no                      integer DEFAULT 0               ,
  nomi_name_flg                 character varying(6)          ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT nomi_master_pk PRIMARY KEY (nomi_no)
);

CREATE TABLE drug_user.kasan_master
(
  kasan_no                      integer NOT NULL                ,
  kasan_name                    character varying(50)           ,
  kasan_p                       integer DEFAULT 0               ,
  del_flg                       integer DEFAULT 0              ,
  register_user_id              character varying(30)          ,
  register_date                 timestamp without time zone    ,
  update_user_id                character varying(30)          ,
  update_date                   timestamp without time zone    ,
  CONSTRAINT kasan_master_pk PRIMARY KEY (kasan_no)
);




commit;

INSERT INTO drug_user.md_master VALUES ( 1,'モンテルカスト錠10mg[タカタ]',1,1,'夕食後','説明',0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.md_master VALUES ( 2,'ロラタジン錠[NP]',1,1,'夕食後','説明',0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.md_master VALUES ( 3,'デキストロメトルファン臭化水素酸塩錠15mg[トーワ]',1,1,'1日3回朝昼夕食後','説明',0,'2019-02-07 18:00:00.000000000',null,null);

INSERT INTO drug_user.hp_master VALUES ( 1,'関東労災病院',0,'神奈川県川崎市中原区1234','2','3','tel','hpcd',0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hp_master VALUES ( 2,'横浜市立市民病院',0,'神奈川県横浜市戸塚区1234','2','3','tel','hpcd',0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hp_master VALUES ( 3,'かとうクリニック',0,'神奈川県横浜市港北区1234','2','3','tel','hpcd',0,'2019-02-07 18:00:00.000000000',null,null);

INSERT INTO drug_user.hpdtl_master VALUES ( 1,1,1,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 1,2,1,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 1,1,2,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 2,1,3,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 2,1,4,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 3,1,1,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 3,2,1,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 3,3,1,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 3,1,5,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.hpdtl_master VALUES ( 3,2,5,0,'2019-02-07 18:00:00.000000000',null,null);

INSERT INTO drug_user.dr_master VALUES ( 1,'先生1',0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.dr_master VALUES ( 2,'先生2',0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.dr_master VALUES ( 3,'先生3',0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.dr_master VALUES ( 4,'先生4',0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.dr_master VALUES ( 5,'先生5',0,0,0,'2019-02-07 18:00:00.000000000',null,null);

INSERT INTO drug_user.name_master VALUES (1, 1,'小児科',0,0,0,0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.name_master VALUES (1, 2,'内科',0,0,0,0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.name_master VALUES (1, 3,'呼吸器科',0,0,0,0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.name_master VALUES (1, 4,'外科',0,0,0,0,0,0,'2019-02-07 18:00:00.000000000',null,null);
INSERT INTO drug_user.name_master VALUES (1, 5,'泌尿器科',0,0,0,0,0,0,'2019-02-07 18:00:00.000000000',null,null);

INSERT INTO drug_user.pt_master VALUES ( 1,'患者1','1979-05-22 00:00:00.000000000',1000000001,'A0000001','B00001',1,'2020-02-07 18:00:00.000000000',0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_master VALUES ( 2,'患者2','1980-06-22 00:00:00.000000000',1000000002,'A0000002','B00002',1,'2020-02-08 18:00:00.000000000',0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_master VALUES ( 3,'患者3','1981-07-22 00:00:00.000000000',1000000003,'A0000003','B00003',1,'2020-02-09 18:00:00.000000000',0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_master VALUES ( 4,'患者4','1982-08-22 00:00:00.000000000',1000000004,'A0000004','B00004',1,'2020-02-10 18:00:00.000000000',0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_master VALUES ( 5,'患者5','1983-09-22 00:00:00.000000000',1000000005,'A0000005','B00005',1,'2020-02-11 18:00:00.000000000',0,'admin','2019-02-09 11:00:00.000000000',null,null);

INSERT INTO drug_user.pt_tran VALUES ( 1,'2019-02-08 10:00:00.000000000',1,1,1,0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_tran VALUES ( 2,'2019-02-08 11:00:00.000000000',2,1,2,0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_tran VALUES ( 3,'2019-02-08 12:00:00.000000000',3,1,3,0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_tran VALUES ( 4,'2019-02-09 11:00:00.000000000',4,2,4,0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_tran VALUES ( 5,'2019-02-09 12:00:00.000000000',5,2,5,0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_tran VALUES ( 6,'2019-02-09 13:00:00.000000000',1,1,1,0,'admin','2019-02-09 11:00:00.000000000',null,null);
INSERT INTO drug_user.pt_tran VALUES ( 7,'2019-02-10 14:00:00.000000000',2,1,2,0,'admin','2019-02-09 11:00:00.000000000',null,null);


COMMIT;

EOSQL

						

3.起動


docker-compose up
#バックグラウンドで実行する場合はオプション-dをつける。
#バックグラウンドでは実行ログが表示されないので正常に動いたら-dをつける。
						
3.患者一覧画面作成

機能概要

 患者情報を全件取得して一覧表示

1.プロジェクト作成

 パッケージエクスプローラ右クリック⇒新規⇒Spring スターター・プロジェクト

 名前:drugstore

 パッケージ:org.drug.store

 その他はそのままで次へ

Spring Bootバージョン:2.1.1

依存関係は下記を選択

 ①Lombok:アノテーション(@Data)でgetter/setterなどを自動生成

 ②Spring Web:URL MappingなどのAPIを提供

 ③Thymeleaf:テンプレートエンジン。HTMLでフロント作成できる。

 ④JDBC API:DBドライバ / ⑤PostgreSQL Driver:DB / ⑥MyBatis Framework:ORマッパー

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


drugstore
├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
│   └── org.drug.store                         #★
│       └── DtrugstoreApplication     # メインクラス
├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
│   ├── static                              # js/cssファイル格納用
│   ├── templates                           # テンプレートエンジン。HTMLが格納される
│   └── application.properties              # 設定情報:DB接続/ポート番号
├── src/test/java                              #
│   └── org.drug.store                      #
│       └── Test20181220ApplicationTests # 検証用クラス
├── JREシステムライブラリ                      # ライブラリ
├── Maven依存関係                              # Maven依存関係
├── target/generated-sources/annotations       # ソースコード生成
├── target/generated-test-sources/test-annotations  # テスト用ソース生成
├── src                                        # ディレクトリ
│     ├── main                                #
│     └── test                                #
├── target                                     # ディレクトリ
│     ├── generated-sources                   #
│     └── generated-test-sources              #
├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
├── mvnw.cmd                                   #
└── pom.xml                                    # 依存関係
						

設定:src/main/resources/application.properties

application.properties:設定情報

※コピペする際はコメント欄「#」(空白含む)は削除してください。

※spring.datasource.urlは1つのみ。Vagrant環境の場合は192.168.33.10の行を使用、それ以外はlocalhostを使用


#PostgreSQLデータベース:Win10ProまたはMac
spring.datasource.url=jdbc:postgresql://localhost:5555/drugdb
#PostgreSQLデータベース:Vagrant環境
spring.datasource.url=jdbc:postgresql://192.168.33.10:5555/drugdb
#PostgreSQLユーザー
spring.datasource.username=drug_user
#PostgreSQLパスワード
spring.datasource.password=pass
#PostgreSQLドライバ
spring.datasource.driver-class-name=org.postgresql.Driver
#Webポート番号
server.port=8000
						

動作確認

起動:localhost→右クリック→起動

起動ログでエラーが発生しないことを確認する

エラーが発生した場合はapplication.propertiesのチェック

パッケージ作成:src.main.java.org.drug.store.ptuserlist

患者(PtUser)クラス作成:src/main/java/org/drug/store/ptuserlist/PtUser.java

PtUser.java:pt_userテーブルとマッピング(DBと連携)


package org.drug.store.ptuserlist;

import lombok.Data;

@Data
public class PtUser {
    private int ptNo;
    private String ptName;
    private String birthdayDt;
	private int insuranceNo;
	private String insuranceCd;
	private String insuranceCd2;
    private int fuyoFlg;
    private String expDt;
}
						

PtUserFormクラス作成:src/main/java/org/drug/store/ptuserlist/PtUserForm.java

PtUserForm.java:HTMLと連携


package org.drug.store.ptuserlist;

import lombok.Data;

@Data
public class PtUserForm {
    private int ptNo;
    private String ptName;
    private String birthdayDt;
	private int insuranceNo;
	private String insuranceCd;
	private String insuranceCd2;
    private int fuyoFlg;
    private String expDt;
}
						

パッケージ作成:src.main.java.org.drug.store.mapper

PtUserMapper.java:ORマップ定義

※<が全角ですので変更してください


package org.drug.store.mapper;


import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.drug.store.ptuserlist.PtUser;

@Mapper
public interface PtUserMapper  {
	List<PtUser> selectAll();
}
						

フォルダ作成:src/main/resources/org/drug/store/mapper

PtUserMapper.xml:SQL定義ファイル

※<が全角ですので変更してください


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.drug.store.mapper.PtUserMapper">
    <select id="selectAll" resultType="org.drug.store.ptuserlist.PtUser">
		SELECT pt_no as ptNo
		      ,pt_name as ptName
		      ,TO_CHAR(pt.birthday_dt,'yyyy/MM/dd') as birthdayDt
		      ,insurance_no as insuranceNo
		      ,insurance_cd as insuranceCd
		      ,insurance2_cd as insuranceCd2
		      ,fuyo_flg as fuyoFlg
		      ,TO_CHAR(pt.exp_dt,'yyyy/MM/dd') as expDt
		FROM drug_user.pt_master pt
		WHERE del_flg = 0
    </select>
</mapper>

						

パッケージ:src.main.java.org.drug.store.ptuserlist

PtUserListService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.ptuserlist;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.drug.store.ptuserlist.PtUser;
import org.drug.store.mapper.PtUserMapper;

@Service
@Transactional //宣言的トランザクション管理:begin/commit/rollbackを直接書かない。publicのみ。メソッド開始/終了で制御
public class PtUserListService {

	@Autowired
	PtUserMapper ptUserMapper;

	public List<PtUser> getUserList() {
		List<PtUser> userList = ptUserMapper.selectAll();
		return userList;
	}
}
						

コントローラ:src/main/java/org/drug/store/ptuserlist/PtUserListController.java

PtUserListController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.ptuserlist;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.drug.store.ptuserlist.PtUser;

@Controller
public class PtUserListController {

	@Autowired
	private PtUserListService ptUserListService;

	@RequestMapping(path = "/ptuserlist", method = RequestMethod.GET)
	String index(Model model) {
		List<PtUser> list = this.ptUserListService.getUserList();
	    model.addAttribute("list", list);
	    return "drug/store/ptuserlist";
	}
}
						

src/main/resources/templates⇒新規⇒フォルダ:drug/store

HTML:src/main/resources/templates/drug/store⇒新規⇒その他⇒Web⇒HTMLファイル:ptuserlist.html

ptuserlist.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

Insert title here

</head>
<body>


	

患者一覧

患者ID 患者名 生年月日 保険番号 保険記号 保険記号2 扶養 有効期限

</body> </html>

src/main/resources/static/⇒新規⇒フォルダ:css

HTML:src/main/resources/static/css/⇒新規⇒その他⇒Web⇒CSSファイル:index.css

index.css:トップページのスタイルCSS


@charset "UTF-8";


/*********************************
*             表題              **
**********************************/

p {
	text-align: center;
	font-size: 30px;
}

/**********************************
*   線と表示サイズの為に設定     **
**********************************/


table {
	border-collapse: collapse;
	border: solid thick;
	table-layout: fixed;
	}

colgroup, tbody {
	border: solid medium;
	}

  th {
   border: solid thin;
   height: 2.4em;
   width: 2.4em;
   }
  td {
   border: solid thin;
   height: 2.4em;
   width: 2.4em;
   text-align: center;
   padding: 0;
   }





/**********************************
*   表の位置とデザインの為に設定 **
**********************************/

table.list {
font-size: 15px;
margin: 0 auto;
border-collapse: separate;
border-spacing: 0px 1px;
}

table.list th {
padding: 12px;
vertical-align: middle;
text-align: center;
border-bottom: #999 1px solid;
color:#fff;
}

table.list td {
padding: 12px;
vertical-align: middle;
text-align: left;
border-bottom: #999 1px solid;
font-size: 15px;
}

table.list th.r1 {
width: 152px;
border-right: #999 1px solid;
background: #447791;
}

table.list th.r2,
table.list td.r2 {
width: 128px;
border-left: #fff 1px solid;
border-right: #999 1px solid;
background: #5893b1;
}

table.list th.r2,
table.list th.r3,
table.list th.r4 {
text-align: center;
}

table.list th.r3,
table.list td.r3 {
width: 128px;
border-left: #fff 1px solid;
border-right: #999 1px solid;
background: #7cacc2;
}

table.list th.r4,
table.list td.r4 {
width: 128px;
border-left: #fff 1px solid;
background: #a0c2d3;
}

/**********************************************
*   表のマウスホバー時の配色変更の為に設定   **
**********************************************/

.list {
		border:1px;
}

.list tr:hover
{
    background: #fbf8e9;
    -o-transition: all 0.1s ease-in-out;
    -webkit-transition: all 0.1s ease-in-out;
    -moz-transition: all 0.1s ease-in-out;
    -ms-transition: all 0.1s ease-in-out;
    transition: all 0.1s ease-in-out;
}


/**********************************************
*              ボタンの為に設定              **
**********************************************/

.btn-circle-flat {
  display: inline-block;
  text-decoration: none;
  background: #87befd;
  color: #FFF;
  width: 120px;
  height: 120px;
  line-height: 120px;
  border-radius: 50%;
  text-align: center;
  vertical-align: middle;
  overflow: hidden;
  transition: .4s;
}

.btn-circle-flat:hover {
  background: #668ad8;
}

.button {
	text-align: center;
}

						
動作確認

1.vagrant環境はvagrant upで仮想環境を起動してvagrant sshで接続します。


vagrant up           #vagrant起動
vagrant ssh          #接続
						

2.docker-compose.ymlファイルが存在する場所で下記コマンド実行


docker-compose up -d
						

WEBサーバー起動

WEBブラウザで確認

 URL:http://localhost:8000/ptuserlist

4.受付一覧画面作成

機能概要

 特定患者の受付情報を全件取得して一覧表示

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


	drugstore
	├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
	│   └── org.drug.store                         #★
	│       └── DtrugstoreApplication     # メインクラス
	├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
	│   ├── static                              # js/cssファイル格納用
	│   ├── templates                           # テンプレートエンジン。HTMLが格納される
	│   └── application.properties              # 設定情報:DB接続/ポート番号
	├── src/test/java                              #
	│   └── org.drug.store                      #
	│       └── Test20181220ApplicationTests # 検証用クラス
	├── JREシステムライブラリ                      # ライブラリ
	├── Maven依存関係                              # Maven依存関係
	├── target/generated-sources/annotations       # ソースコード生成
	├── target/generated-test-sources/test-annotations  # テスト用ソース生成
	├── src                                        # ディレクトリ
	│     ├── main                                #
	│     └── test                                #
	├── target                                     # ディレクトリ
	│     ├── generated-sources                   #
	│     └── generated-test-sources              #
	├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
	├── mvnw.cmd                                   #
	└── pom.xml                                    # 依存関係
						

パッケージ作成:org.drug.store.ptuketukelist

受付(PtUketuke)クラス作成:src/main/java/org/drug/store/ptuketukelist/PtUketuke.java

PtUketuke.java:pt_tran,pt_masterテーブルとマッピング(DBと連携)


package org.drug.store.ptuketukelist;

import lombok.Data;

@Data
public class PtUketuke {
    private int ukeNo;
    private String receiptDate;
    private String hpName;
	private String drName;
}
						

PtUketukeFormクラス作成:src/main/java/org/drug/store/ptuketukelist/PtUketukeForm.java

PtUketukeForm.java:HTMLと連携


package org.drug.store.ptuketukelist;

import lombok.Data;

@Data
public class PtUketukeForm {
    private int ukeNo;
    private String receiptDate;
	private String hpName;
	private String drName;
}
						

パッケージ:src.main.java.org.drug.store.mapper

PtUketukeMapper.java:ORマップ定義

※<が全角ですので変更してください


package org.drug.store.mapper;


import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.drug.store.ptuketukelist.PtUketuke;

@Mapper
public interface PtUketukeMapper  {
	List<PtUketuke> selectAll();
}
						

フォルダ作成:src/main/resources/org/drug/store/mapper

PtUketukeMapper.xml:SQL定義ファイル

※<が全角ですので変更してください


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.drug.store.mapper.PtUketukeMapper">
    <select id="selectAll" resultType="org.drug.store.ptuketukelist.PtUketuke">
		SELECT pt.uke_no as ukeNo
		      ,TO_CHAR(pt.receipt_date,'yyyy/MM/dd') as receiptDate
		      ,hm.hp_name as hpName
		      ,dm.dr_name as drName
		FROM drug_user.pt_tran pt
		    ,drug_user.pt_master pm
		    ,drug_user.hp_master hm
		    ,drug_user.dr_master dm
		WHERE pt.del_flg = 0
		  AND pt.pt_no = pm.pt_no
		  AND pt.hp_no = hm.hp_no
		  AND pt.dr_no = dm.dr_no
		  AND pt.pt_no = 1
		ORDER BY pt.uke_no
    </select>
</mapper>

						

パッケージ:src.main.java.org.drug.store.ptuketukelist

PtUketukeService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.ptuketukelist;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.drug.store.ptuketukelist.PtUketuke;
import org.drug.store.mapper.PtUketukeMapper;

@Service
@Transactional //宣言的トランザクション管理:begin/commit/rollbackを直接書かない。publicのみ。メソッド開始/終了で制御
public class PtUketukeService {

	@Autowired
	PtUketukeMapper ptUketukeMapper;

	public List<PtUketuke> getUketukeList() {
		List<PtUketuke> uketukeList = ptUketukeMapper.selectAll();
		return uketukeList;
	}
}
						

コントローラ:src/main/java/org/drug/store/ptuketukelist/PtUketukeController.java

PtUketukeController.java:リクエストを受け取りマッピングするコントローラ

※表示バグがあり、下記のPtUketukeの文字が小文字になっています。大文字に変更してください。

 ・最終行の"</ptuketuke>"は不要です。


package org.drug.store.ptuketukelist;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class PtUketukeController {

	@Autowired
	private PtUketukeService ptuketukeService;

	@RequestMapping(path = "/ptuketukelist", method = RequestMethod.GET)
	String index(Model model) {
		List list = this.ptuketukeService.getUketukeList();
	    model.addAttribute("list", list);
	    return "drug/store/ptuketukelist";
	}

}
						

HTML:src/main/resources/templates/drug/store⇒新規⇒その他⇒Web⇒HTMLファイル:ptuketukelist.html

ptuketukeList.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

Insert title here

</head>
<body>

    
	

受付一覧

受付No 受付日 病院名 医者名

</body> </html>

src/main/resources/static/⇒新規⇒フォルダ:css

HTML:src/main/resources/static/css/⇒新規⇒その他⇒Web⇒CSSファイル:ptuketuke.css

ptuketuke.css:トップページのスタイルCSS


@charset "UTF-8";


/*********************************
*             表題              **
**********************************/

p {
	text-align: center;
	font-size: 30px;
}

/**********************************
*   線と表示サイズの為に設定     **
**********************************/


table {
	border-collapse: collapse;
	border: solid thick;
	table-layout: fixed;
	}

colgroup, tbody {
	border: solid medium;
	}

  th {
   border: solid thin;
   height: 2.4em;
   width: 2.4em;
   }
  td {
   border: solid thin;
   height: 2.4em;
   width: 2.4em;
   text-align: center;
   padding: 0;
   }





/**********************************
*   表の位置とデザインの為に設定 **
**********************************/

table.list {
font-size: 15px;
margin: 0 auto;
border-collapse: separate;
border-spacing: 0px 1px;
}

table.list th {
padding: 12px;
vertical-align: middle;
text-align: center;
border-bottom: #999 1px solid;
color:#fff;
}

table.list td {
padding: 12px;
vertical-align: middle;
text-align: left;
border-bottom: #999 1px solid;
font-size: 15px;
}

table.list th.r1 {
width: 152px;
border-right: #999 1px solid;
background: #447791;
}

table.list th.r2,
table.list td.r2 {
width: 128px;
border-left: #fff 1px solid;
border-right: #999 1px solid;
background: #5893b1;
}

table.list th.r2,
table.list th.r3,
table.list th.r4 {
text-align: center;
}

table.list th.r3,
table.list td.r3 {
width: 128px;
border-left: #fff 1px solid;
border-right: #999 1px solid;
background: #7cacc2;
}

table.list th.r4,
table.list td.r4 {
width: 128px;
border-left: #fff 1px solid;
background: #a0c2d3;
}

/**********************************************
*   表のマウスホバー時の配色変更の為に設定   **
**********************************************/

.list {
		border:1px;
}

.list tr:hover
{
    background: #fbf8e9;
    -o-transition: all 0.1s ease-in-out;
    -webkit-transition: all 0.1s ease-in-out;
    -moz-transition: all 0.1s ease-in-out;
    -ms-transition: all 0.1s ease-in-out;
    transition: all 0.1s ease-in-out;
}


/**********************************************
*              ボタンの為に設定              **
**********************************************/

.btn-circle-flat {
  display: inline-block;
  text-decoration: none;
  background: #87befd;
  color: #FFF;
  width: 120px;
  height: 120px;
  line-height: 120px;
  border-radius: 50%;
  text-align: center;
  vertical-align: middle;
  overflow: hidden;
  transition: .4s;
}

.btn-circle-flat:hover {
  background: #668ad8;
}

.button {
	text-align: center;
}

						

3.WEBサーバー起動

4.WEBブラウザで確認

 URL:http://localhost:8000/ptuketukelist

5.受付登録画面作成

機能概要:今回は②(本来は患者一覧での登録は②、受付一覧では①)

 ①新規受付登録:特定患者の受付登録

 ②新規会員受付登録:新規患者の受付登録

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


	drugstore
	├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
	│   └── org.drug.store                         #★
	│       └── DtrugstoreApplication     # メインクラス
	├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
	│   ├── static                              # js/cssファイル格納用
	│   ├── templates                           # テンプレートエンジン。HTMLが格納される
	│   └── application.properties              # 設定情報:DB接続/ポート番号
	├── src/test/java                              #
	│   └── org.drug.store                      #
	│       └── Test20181220ApplicationTests # 検証用クラス
	├── JREシステムライブラリ                      # ライブラリ
	├── Maven依存関係                              # Maven依存関係
	├── target/generated-sources/annotations       # ソースコード生成
	├── target/generated-test-sources/test-annotations  # テスト用ソース生成
	├── src                                        # ディレクトリ
	│     ├── main                                #
	│     └── test                                #
	├── target                                     # ディレクトリ
	│     ├── generated-sources                   #
	│     └── generated-test-sources              #
	├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
	├── mvnw.cmd                                   #
	└── pom.xml                                    # 依存関係
						

パッケージ作成:org.drug.store.ptuketukeregister

受付(PtUketukeRegister)クラス作成:src/main/java/org/drug/store/ptuketukeregister/PtUketukeRegister.java

PtUketukeRegister.java:pt_tran,pt_masterテーブルとマッピング(DBと連携)


package org.drug.store.ptuketukeregister;

import lombok.Data;
import java.sql.Timestamp;

@Data
public class PtUketukeRegister {
	private String ptName;
	private Timestamp birthdayDt;
	private int insuranceNo;
	private String insuranceCd;
	private String insuranceCd2;
	private int fuyoFlg;
	private int genderFlg;
    private Timestamp expDt;
    private String receiptDate;
	private int[] mdNo;
}
						

PtUketukeRegisterFormクラス作成:src/main/java/org/drug/store/ptuketukeregister/PtUketukeRegisterForm.java

PtUketukeRegisterForm.java:HTMLと連携


package org.drug.store.ptuketukeregister;

import lombok.Data;

@Data
public class PtUketukeRegisterForm {
	private String ptName;                    //患者名
	private String birthdayDtYear;            //生年月日_年
	private String birthdayDtMonth;           //生年月日_月
	private String birthdayDtDay;             //生年月日_日
	private int insuranceNo;                 //保険番号
	private String insuranceCd;              //保険記号
	private String insuranceCd2;             //保険記号2
	private int fuyoFlg;                    //扶養
	private int genderFlg;                  //性別
	private String expDtYear;               //有効期限_年
	private String expDtMonth;              //有効期限_月
	private String expDtDay;                //有効期限_日
	private String receiptDtYear;            //受付日_年
	private String receiptDtMonth;           //受付日_月
	private String receiptDtDay;             //受付日_日
	private int[] mdNo;                     //薬番号
}
						

PtGenderEnumクラス作成:src/main/java/org/drug/store/common/PtGenderEnum.java

PtGenderEnum.java:性別定数


package org.drug.store.common;

public enum PtGenderEnum {
	MALE(0,"男"),
	FEMALE(1,"女");

	final int code;
	final String label;

	private PtGenderEnum (int code , String label) {
		this.code = code;
		this.label = label;
	}

	public int getCode() {
		return code;
	}

	public String getLabel() {
		return label;
	}

	public static PtGenderEnum valueOf(int rm ) {
		switch (rm) {
			case 0:
			    return MALE;
		    case 1:
			    return FEMALE;
			default:
			    throw new IllegalArgumentException("argument out of range");
		}
	}
}
						

パッケージ:src.main.java.org.drug.store.mapper

PtUketukeMapper.java:ORマップ定義

insert_pt_tranメソッドを追加

※<が全角ですので変更してください


package org.drug.store.mapper;


import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.drug.store.ptuketukelist.PtUketuke;

@Mapper
public interface PtUketukeMapper  {
	List<PtUketuke> selectAll();

	void insert_pt_tran(PtUketukeRegister uketuke);    //ここを追加
}
						

フォルダ作成:src/main/resources/org/drug/store/mapper

PtUketukeMapper.xml:SQL定義ファイル

※<が全角ですので変更してください

※resulttype⇒resultType


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    

	
        INSERT INTO drug_user.pt_master (pt_no,pt_name,birthday_dt,insurance_no,insurance_cd,insurance2_cd,fuyo_flg,exp_dt,del_flg,register_user_id,register_date )
        VALUES ( nextval('pt_no_seq'), #{ptName} , #{birthdayDt}, #{insuranceNo} , #{insuranceCd}, #{insuranceCd2}, #{fuyoFlg}, #{expDt}, 0,'test1',CURRENT_DATE )
    



						

サービス:src/main/java/org/drug/store/common/DrugCommonUtil.java

DrugCommonUtil.java:共通部品


package org.drug.store.common;

import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

import org.springframework.util.StringUtils;

public class DrugCommonUtil {
	private static DateTimeFormatter DATEFORMAT_DATETIME = DateTimeFormatter.ofPattern("yyyyMMDDHHmmss");
	private static DateTimeFormatter DATEFORMAT_DATE = DateTimeFormatter.ofPattern("yyyyMMdd");

	   /**
     * 日時文字列(YYYYMMDDHHMISS)をTimestamp値に変換
     *
     * @param srcString
     * @return 日時yyyyMMddHHmmssのTimestamp値
     */

	public static Timestamp dateTimeStringToTimestamp(String srcString) {
		if(isEmpty(srcString)) {
			return null;
		}try {
			LocalDateTime dateTime = LocalDateTime.parse(srcString, DATEFORMAT_DATETIME);
			return Timestamp.valueOf(dateTime);
		}catch(DateTimeParseException e){
			return dateStringToTimestamp(srcString);
		}
	}

	 /**
     * 日付文字列(YYYYMMDD)をTimestamp値に変換
     *
     * @param srcString
     * @return 日時yyyyMMddのTimestamp値
     */
	public static Timestamp dateStringToTimestamp(String srcString) {
		if(isEmpty(srcString)) {
			return null;
		}try {
			LocalDate date = LocalDate.parse(srcString, DATEFORMAT_DATE);
			return Timestamp.valueOf(date.atTime(LocalTime.MIN));
		}catch(DateTimeParseException e) {
			return null;
		}
	}

	 /**
     * 拡張null判定。null、空文字に加えて文字列"null"もtrueと判定する.
     *
     * @param val
     *            判定文字列
     * @return 判定結果
     */

	public static boolean isEmpty(String val) {
		if(StringUtils.isEmpty(val)||StringUtils.pathEquals(val, "null")) {
			return true;
		}
		return false;
	}

}
						

サービス:src/main/java/org/drug/store/ptuketukeregister/PtUketukeRegisterService.java

PtUketukeRegisterService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.ptUketukeRegister;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.sql.Timestamp;
import org.drug.store.common.DrugCommonUtil;
import org.drug.store.mapper.PtUketukeMapper;
import org.drug.store.mapper.PtUserMapper;
import org.drug.store.ptuserlist.PtUser;

@Service
@Transactional //宣言的トランザクション管理:begin/commit/rollbackを直接書かない。publicのみ。メソッド開始/終了で制御
public class PtUketukeRegisterService {

	@Autowired
	private PtUketukeMapper ptUketukeMapper;

	@Autowired
	PtUserMapper ptUserMapper;

	public List<PtUser> getUserList() {
		List<PtUser> userList = ptUserMapper.selectAll();
		return userList;
	}

	public void insertUketuke(PtUketukeRegisterForm uketuke) {
		PtUketukeRegister ptUketuke = new PtUketukeRegister();

		//生年月日
		String year = uketuke.getBirthdayDtYear();
		String month = uketuke.getBirthdayDtMonth();
		String day = uketuke.getBirthdayDtDay();
		month = String.format("%02d", Integer.parseInt(month));
		day = String.format("%02d", Integer.parseInt(day));
		Timestamp tsBirthdayDt = DrugCommonUtil.dateStringToTimestamp(year+month+day);

		ptUketuke.setPtName(uketuke.getPtName());
		ptUketuke.setBirthdayDt(tsBirthdayDt);
		ptUketuke.setGenderFlg(uketuke.getGenderFlg());              //性別

		ptUketukeMapper.insert_pt_tran(ptUketuke);
	}

}
						

コントローラ:src/main/java/org/drug/store/ptuketukeregister/PtUketukeRegisterController.java

PtUketukeRegisterController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.ptuketukeregister;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class PtUketukeRegisterController {

	@Autowired
	private PtUketukeRegisterService ptUketukeRegisterService;

	@RequestMapping(path = "/ptuketuke", method = RequestMethod.GET)
	String index(Model model) {
		PtUketukeRegisterForm ptUketukeRegisterForm = new PtUketukeRegisterForm();
		model.addAttribute("uketuke",ptUketukeRegisterForm);
		model.addAttribute("ptGenderEnums",PtGenderEnum.values());
	    return "drug/store/ptuketuke";
	}

	@RequestMapping(path = "/ptuketuke", method = RequestMethod.POST)
	String uketuke(Model model, PtUketukeRegisterForm ptUketukeRegisterForm) {
		//登録
		this.ptUketukeRegisterService.insertUketuke(ptUketukeRegisterForm);

		//再検索
		List<PtUser> list = this.ptUketukeRegisterService.getUserList();
	    model.addAttribute("list", list);

	    return "drug/store/ptuserlist";
	}

}
						

HTML:src/main/resources/templates/drug/store⇒新規⇒その他⇒Web⇒HTMLファイル:ptuketuke.html

ptuketuke.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

Insert title here

</head>
<body>

	
(※)は必須
1
お名前
(※)氏名
生年月日
   生年月日
保険番号
   保険番号
保険記号
   保険記号
   保険記号2
有効期限
   有効期限
(※)扶養
ご住所
(※)郵便番号
(※)住所(都道府県)
(※)住所(市区町村)
(※)住所(番地/号室)
ご連絡先
(※)電話番号
性別
(※)性別
受付日
   受付日
2
メールアドレス
(※)アドレス
パスワード
(※)パスワード
(※)パスワード再入力
</body> </html>

src/main/resources/static/⇒新規⇒フォルダ:css

HTML:src/main/resources/static/css/⇒新規⇒その他⇒Web⇒CSSファイル:ptuketukeregister.css

ptuketukeregister.css:トップページのスタイルCSS


@charset "UTF-8";

.kana {
	ime-mode: active;
}

button._hidden {
	display: none;
}



.container {
	width: 1100px;
	margin-right: auto;
	margin-left: auto;
}
.box {
    display: table-cell;
}
.row {
    display: table-row;
}
.gray {
    background: gray;
	width: 1000px
}

.silver {
    background: silver;
}

.orange {
    background: orange;
}

.row2 {
	height: 100px;
}
.UserInfo1_1 {
    width: 220px;
    background: #e7f3f0;
	float:left;
}
.UserDtl_1 {
	font-size: 1.3em;
	float:left;
	width: 280px;
}

.UserInfoTitle {
    width: 30px;
	height: 423px;
    font-size: 2.5em;
    color: #FFFFFF;
    background: #1e9484;
	float:left;
	border: 1px solid gray;
}
.UserInfoTitle2 {
    width: 30px;
	height: 80px;
    font-size: 2.5em;
    color: #FFFFFF;
    background: #1e9484;
	float:left;
	border: 1px solid gray;
}
.head {

    font-size: 1.3em;
    font-weight: bold;
    margin: 0 1px 0 2px;
	height: 30px;
}
.head2 {
    font-size: 1.3em;
    font-weight: bold;
    margin: 0 1px 0 2px;
	height: 53px;
}
.head3 {
    font-size: 1.3em;
    font-weight: bold;
    margin: 0 1px 0 2px;
	height: 120px;
}

/** 登録ボタン **/
.flat.fade {
  position: relative;
  text-align: center;
  /* 中央揃え */
  display: block;
  margin: 0 auto;
  /* 幅の指定 */
  width: 100%;
  max-width: 200px;
  box-sizing: border-box;
  padding: 10px;
  /* 色の指定 */
  background: linear-gradient(135deg, #ffd900, #ff9300);
  color: #fff;
  font-weight: bold;
  border-radius: 8px;
  transition: 0.3s;
}
.flat.fade:hover {
  opacity: 0.7;
}
.flat.fade:active, .flat.fade:focus {
  top: 2px;
}


						

src/main/resources/static/⇒新規⇒フォルダ:js

HTML:src/main/resources/static/js/⇒新規⇒その他⇒Web⇒jsファイル:ptuketuke.js

ptuketuke.js:受付登録JS

※<optionの開始タグは全角です。修正をお願いします。


(function() {
  'use strict';

  /*
    今日の日付データを変数todayに格納
   */
  var optionLoop, this_day, this_month, this_year, today;
  today = new Date();
  this_year = today.getFullYear();
  this_month = today.getMonth() + 1;
  this_day = today.getDate();

  /*
    ループ処理(スタート数字、終了数字、表示id名、デフォルト数字)
   */
  optionLoop = function(start, end, id, this_day) {
    var i, opt;
    opt = null;
    for (i = start; i <= end ; i++) {
      if (i === this_day) {
        opt += "<option value='" + i + "' selected>" + i + "</option>";
      } else {
        opt += "<option value='" + i + "'>" + i + "</option>";
      }
    }
    return document.getElementById(id).innerHTML = opt;
  };


  /*
    関数設定(スタート数字[必須]、終了数字[必須]、表示id名[省略可能]、デフォルト数字[省略可能])
   */
  //生年月日
  optionLoop(1950, this_year, 'birthdayDtYear', this_year);
  optionLoop(1, 12, 'birthdayDtMonth', this_month);
  optionLoop(1, 31, 'birthdayDtDay', this_day);

  //有効期限
  optionLoop(this_year, this_year+10, 'expDtYear', this_year);
  optionLoop(1, 12, 'expDtMonth', this_month);
  optionLoop(1, 31, 'expDtDay', this_day);

  //受付日
  optionLoop(this_year-5, this_year+5, 'receiptDtYear', this_year);
  optionLoop(1, 12, 'receiptDtMonth', this_month);
  optionLoop(1, 31, 'receiptDtDay', this_day);

  //電話番号(数字のみ)(JQuery)
  $('#nkTel').on("keypress", function(event){return leaveOnlyNumber(event);});

  function leaveOnlyNumber(e){
	// 数字以外の不要な文字を削除
	var st = String.fromCharCode(e.which);
	if ("0123456789".indexOf(st,0) < 0) { return false; }
	return true;
  }

})();

						

3.WEBサーバー起動

4.WEBブラウザで確認

 URL:http://localhost:8000/ptuketuke

6.Docker概要

Dockerの登場背景

○物理環境から仮想環境への流れ

 オンプレで動く環境はハードの納品が遅い、構築手順が複雑、
 手順書が古くなる、無駄なリソースが必要など諸問題あり

 Hyper-Vなどの仮想環境により1台で複数の仮想マシンが動作できる。
 スケールしやすい、リソース共有が便利、仮想化の流れへ

○新たな課題

 アプリケーションの移植は従来どおりで手順書依存、
 自分の環境では動くが他の環境では動かないといった問題が発生

○Dockerへ

 Dockerfileを構築手順として構成管理することで手順書依存から脱却。

 Dockerfileを配布することで環境依存からの脱却

 仮想OSを必要としないのでHyper-V等よりメモリ消費が少ない

Docker実行環境の例。

Dockerとは非常に軽量なコンテナ型のアプリケーション実行環境

CPUやメモリ、ディスク入出力など、コンテナ内で利用するリソースを他のコンテナから隔離したり、設定に基づいて振り分けたりする機能。

Dockerでは、最終的なアプリケーションはホストOS上の1つのプロセスとして実行されているため、余計なオーバーヘッドがない。

ハイパーバイザ型やホスト型の仮想実行環境の例。

この環境では、仮想化されたハードウェア上でLinux OSが動作し、さらにその上で目的のアプリケーションのプロセスが動作している。

アプリケーションを実行するためにはまずゲストOSを稼働させなければならず、起動に時間もかかるし、CPUやメモリ、ディスクなどのリソースも多く消費する。

Dockerと仮想マシンの比較

Dockerコンポーネント

 Docker Engineを中心に複数のコンポーネント単位で機能開発

 必要に応じて複数のコンポーネントを組み合わせて使用

Dockerのメリット

・コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。

・作成した環境を配布しやすい。

・スクラップ&ビルドが容易にできる。

Dockerを一通りこなすためには・・・

Dockerfileを書いて

docker buildコマンドでDockerイメージをビルドして

そのイメージを何らかのリポジトリ(DockerHub等)にdocker pushして

そのイメージを何らかのVM上にdocker pullして

そのイメージをdocker runしてコンテナを実行して

そのコンテナの特定のポートに外部からアクセスする

といった一連の作業を自分一人で出来ることが望ましい

Docker-composeとは

 複数コンテナのDockerアプリケーションを定義、実行するツール

 Dockerだけでは複数コンテナを一斉に操作できない為にdockere-composeがつくられた。

 docker-compose.ymlに記載して各コンテナが起動する

docker-composeのメリット

・開発、テスト環境に適している

・単一ホスト上でも環境を分けたい場合に利用

・Composeファイルを再利用できる

7.Spring Boot概要

Spring Bootの特徴

Spring Bootとは

 Spring Frameworkでアプリケーションを簡単に作るための仕組み

○XML設定ファイルの記述が不要

○アノテーションによってコーディング量の削減

○Webコンテナを内含:デフォルトでTomcatコンテナが含まれる。Jarファイル単体でWEBアプリが可能。

Spring Boot以前のSpring Framework

問題点:組み合わせが難しい、初期セットアップが大変

Spring Boot

・あらかじめおススメの組み合わせが決まっている。

・依存ライブラリを同根するだけで自動で設定ができる

・組み込みサーバを同根し、アプリを即実行可能。

MVCモデル

コントローラ:

モデル:MODEL

ビュー:HTML/CSS

プロジェクトの依存関係

要するにここで使いたいSpringフレームワークを選ぶ

ここで選んだフレームワークが pom.xml に書き込まれ、Mavenが必要なJar一式を落としてくれる

今回のアプリで選んだフレームワークは以下の通り

・Web:リクエストマッピングで使用

・Thymeleaf:HTMLテンプレートエンジン。

・Postgresql:データベース

・JDBC:データベースを接続するドライバ

・Lombok:アノテーション(@Data)でgetter/setterなどを自動生成

基本的な使い方

フレームワークを利用する。必要に応じてpom.xmlに追加することで柔軟に拡張可能。

pom.xmlに追加するとMaven依存関係ライブラリに必要なJarファイルがダウンロードされる。

下記URLのリクエストマッピングを実装する場合

URL:http://localhost:8000/web/test

コントローラクラスにwebをマッピングしてメソッドにtestをマッピングします。


@Controller
@RequestMapping("web")
public class SampleController {

	@RequestMapping(path = "/test", method = RequestMethod.GET)
	String showPage(Model model) {
	    return "test";
	}

}
						

pom.xml




	org.springframework.boot
	spring-boot-starter-jdbc



	org.springframework.boot
	spring-boot-starter-thymeleaf



	org.springframework.boot
	spring-boot-starter-web




	org.postgresql
	postgresql
	runtime



	org.projectlombok
	lombok
	true



	org.springframework.boot
	spring-boot-starter-tomcat
	provided



	org.springframework.boot
	spring-boot-starter-test
	test

						
8.Spring Boot登録機能 ※ここは途中なので無視してください。

○登録:サービス

 SampleServiceに追加処理追加

 ソース:SampleService.java

 ※UserのUが小文字になっていますので修正してください。


@Service
@Transactional
public class SampleService {

	@Autowired
	private JdbcTemplate jdbcTemplate;

	public List getUserList() {
		List userList = jdbcTemplate.queryForObject("select * from java_user.user", new UserMapper());

		return userList;
	}

	//下記メソッド追加
	public boolean insertUser(Model model, @ModelAttribute  UserForm userForm) {
		jdbcTemplate.update("INSERT INTO java_user.user(name,nm_add,nk_tel) VALUES(?,?,?)",userForm.getName(),userForm.getNm_add(),userForm.getNk_tel());
		return true;
	}
}
						

○登録画面表示:コントローラ

 SampleControllerにリクエストマッピング=/memberのメソッド=GETで追加

 SampleControllerにリクエストマッピング=/memberのメソッド=POSTで追加

 ソース:SampleController.java

 ※UserのUが小文字になっていますので修正してください。


package org.drug.store;
import java.util.List;

@Controller
public class SampleController {

	//下記メソッド追加 SampleControllerにリクエストマッピング=/memberのメソッド=GETで追加
	@RequestMapping(path = "/member", method = RequestMethod.GET)
	String member(Model model) {
	    return "/sample/member";
	}

	//下記メソッド追加 SampleControllerにリクエストマッピング=/memberのメソッド=POSTで追加
	@RequestMapping(path = "/member", method = RequestMethod.POST)
	String memberReg(Model model, @ModelAttribute  UserForm userForm ) {
		this.sampleService.insertUser(model, userForm);
	    List list = this.sampleService.getUserList();
	    model.addAttribute("list", list);
		return "/sample/index";
	}
}
						

○登録画面表示:ビュー

 member.html追加

 ソース:member.html

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	
	Insert title here
	
	
	
	
</head>
<body>

	
(※)は必須
1
お名前
(※)ご購入者様のお名前
(※)フリガナ
ご住所
(※)住所
ご連絡先
(※)電場番号
生年月日
   生年月日
2
メールアドレス
(※)アドレス
パスワード
(※)パスワード
(※)パスワード再入力
</body> </html>

○登録画面表示:スタイルシート

 ソース:src/main/resources/static/css/member.css


@charset "UTF-8";

.kana {
	ime-mode: active;
}

button._hidden {
	display: none;
}



.container {
	margin-left: 200px;
}
.box {
    display: table-cell;
}
.row {
    display: table-row;
}
.gray {
    background: gray;
	width: 1000px
}

.silver {
    background: silver;
}

.orange {
    background: orange;
}

.row2 {
	height: 100px;
}
.UserInfo1_1 {
    width: 220px;
    background: #e7f3f0;
	float:left;
}
.UserDtl_1 {
	font-size: 1.3em;
	float:left;
	width: 280px;
}

.UserInfoTitle {
    width: 30px;
	height: 150px;
    font-size: 2.5em;
    color: #FFFFFF;
    background: #1e9484;
	float:left;
	border: 1px solid gray;
}
.UserInfoTitle2 {
    width: 30px;
	height: 90px;
    font-size: 2.5em;
    color: #FFFFFF;
    background: #1e9484;
	float:left;
	border: 1px solid gray;
}
.head {

    font-size: 1.3em;
    font-weight: bold;
    margin: 0 1px 0 2px;
	height: 30px;
}
.head2 {
    font-size: 1.3em;
    font-weight: bold;
    margin: 0 1px 0 2px;
	height: 60px;
}
						

○登録処理:JavaScript

 ソース:src/main/resources/static/js/member.js


function executeSubmit() {
	var name = document.getElementById('name').value;
	if ( name == '' ) {
		alert('氏名を入力してください');
		return;
	}
	console.log(name);
	document.forms[0].submit();
	return;
}

$(function(){
	  // ここにプログラムを記述
	  $('#num-input').on('input', function() {
	  	console.log('test1');
	      // 半角変換
	      var halfVal = $(this).val().replace(/[!-~]/g,
	          function (tmpStr) {
	              // 文字コードをシフト
	              return String.fromCharCode(tmpStr.charCodeAt(0) - 0xFEE0);
	          }
	      );
	    // 数字以外の不要な文字を削除
	    $(this).val(halfVal.replace(/[^0-9]/g, ''));
	  });
});
						

動作確認

 URL:http://localhost:8080/sample

次回セミナー(まだ検討中ですが。。)


 1.会員登録、注文登録

  業務で扱うような画面設計を考慮した登録機能

 2.API

  JSONを使用したAPI連携機能

 3.その他

  Flaskを利用したアプリ、他検討中・・・

XX.病院一覧画面

機能概要:病院の一覧を取得して一覧表示

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


	drugstore
	├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
	│   └── org.drug.store                         #★
	│       └── DtrugstoreApplication     # メインクラス
	├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
	│   ├── static                              # js/cssファイル格納用
	│   ├── templates                           # テンプレートエンジン。HTMLが格納される
	│   └── application.properties              # 設定情報:DB接続/ポート番号
	├── src/test/java                              #
	│   └── org.drug.store                      #
	│       └── Test20181220ApplicationTests # 検証用クラス
	├── JREシステムライブラリ                      # ライブラリ
	├── Maven依存関係                              # Maven依存関係
	├── target/generated-sources/annotations       # ソースコード生成
	├── target/generated-test-sources/test-annotations  # テスト用ソース生成
	├── src                                        # ディレクトリ
	│     ├── main                                #
	│     └── test                                #
	├── target                                     # ディレクトリ
	│     ├── generated-sources                   #
	│     └── generated-test-sources              #
	├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
	├── mvnw.cmd                                   #
	└── pom.xml                                    # 依存関係
						

パッケージ作成:org.drug.store.hpList

病院リスト(HpList)クラス作成:src/main/java/org/drug/store/hpList/HpList.java

HpList.java:hp_masterテーブルとマッピング(DBと連携)


package org.drug.store.hplist;

import lombok.Data;

@Data
public class HpList {

	private int hpNo;
	private String hpName;
	private String hpTel;
	private String hpCd;

}

						

HpListFormクラス作成:src/main/java/org/drug/store/hpList/HpListForm.java

HpListForm.java:HTMLと連携


package org.drug.store.hplist;

import lombok.Data;

@Data
public class HpListForm {

	private int hpNo;
	private String hpName;
	private String hpTel;
	private String hpCd;

}
						

パッケージ:src.main.java.org.drug.store.mapper

HpListMapper.java:ORマップ定義

insert_hp_masterメソッドを追加

※<が全角ですので変更してください


package org.drug.store.mapper;


import java.util.List;
import org.drug.store.hplist.HpList;
import org.drug.store.hpregister.HpRegister;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface HpListMapper {
	List selectAll();
}
						

フォルダ作成:src/main/resources/org/drug/store/mapper

HpListMapper.xml:SQL定義ファイル

※<が全角ですので変更してください

※resulttype⇒resultType


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

	




						

サービス:src/main/java/org/drug/store/hpList/HpListService.java

HpListService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.hplist;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.drug.store.mapper.HpListMapper;

@Transactional
@Service
public class HpListService {

	@Autowired
	HpListMapper hpListMapper;

	public List getHpList(){
		List hpList = hpListMapper.selectAll();
		return hpList;
	}

}

						

コントローラ:src/main/java/org/drug/store/hpList/HpListController.java

HpListController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.hplist;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HpListController {

	@Autowired
	private HpListService hpListService;

	@RequestMapping(path="/hplist", method = RequestMethod.GET)
		public String index(Model model) {
		List list = this.hpListService.getHpList();
		model.addAttribute("list", list);
		return "drug/store/hplist";
	}

}
						

HTML:src/main/resources/templates/drug/store/hplist.html

hplist.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

病院一覧



	
	
ID 病院名 電話番号 医療機関コード

</body> </html>
XX.病院登録画面

機能概要:病院を新規登録する

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


drugstore
├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
│   └── org.drug.store                         #★
│       └── DtrugstoreApplication     # メインクラス
├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
│   ├── static                              # js/cssファイル格納用
│   ├── templates                           # テンプレートエンジン。HTMLが格納される
│   └── application.properties              # 設定情報:DB接続/ポート番号
├── src/test/java                              #
│   └── org.drug.store                      #
│       └── Test20181220ApplicationTests # 検証用クラス
├── JREシステムライブラリ                      # ライブラリ
├── Maven依存関係                              # Maven依存関係
├── target/generated-sources/annotations       # ソースコード生成
├── target/generated-test-sources/test-annotations  # テスト用ソース生成
├── src                                        # ディレクトリ
│     ├── main                                #
│     └── test                                #
├── target                                     # ディレクトリ
│     ├── generated-sources                   #
│     └── generated-test-sources              #
├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
├── mvnw.cmd                                   #
└── pom.xml                                    # 依存関係
		

パッケージ作成:org.drug.store.hpregister

病院登録(HpRegister)クラス作成:src/main/java/org/drug/store/hpregister/HpRegister.java

HpRegister.java:hp_masterテーブルとマッピング(DBと連携)


package org.drug.store.hpregsiter;

import lombok.Data;

@Data
public class HpRegister {

	private int hpNo;
	private String hpName;
	private String hpAddNo;
	private String hpAddName1;
	private String hpAddName2;
	private String hpAddName3;
	private String hpTel;
	private String hpCd;

}

		

HpRegisterFormクラス作成:src/main/java/org/drug/store/hpregister/HpRegisterForm.java

HpRegisterForm.java:HTMLと連携


package org.drug.store.hpregister;

import lombok.Data;

@Data
public class HpRegisterForm {

	private int hpNo;
	private String hpName;
	private String hpAddNo;
	private String hpAddName1;
	private String hpAddName2;
	private String hpAddName3;
	private String hpTel;
	private String hpCd;

}
		

パッケージ:src.main.java.org.drug.store.mapper

HpListMapper.java:ORマップ定義

insert_hp_masterメソッドを追加

※<が全角ですので変更してください


package org.drug.store.mapper;

import java.util.List;
import org.drug.store.hplist.HpList;
import org.drug.store.hpregister.HpRegister;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface HpListMapper {
	List selectAll();
//ここを追加
	void insert_hp_master(HpRegister toroku);
}
		

フォルダ作成:src/main/resources/org/drug/store/mapper

HpListMapper.xml:SQL定義ファイル

※<が全角ですので変更してください

※resulttype⇒resultType


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >



//ここから追加

INSERT INTO
drug_user.hp_master(
hp_no,
hp_name,
hp_add_no,
hp_add1_name,
hp_add2_name,
hp_add3_name,
hp_tel,
hp_cd,
del_flg,
register_user_id,
register_date
)
VALUES
(
nextval('hp_no_seq'),
#{hpName},
#{hpAddNo},
#{hpAddName1},
#{hpAddName2},
#{hpAddName3},
#{hpTel},
#{hpCd},
0,
'test1',
CURRENT_DATE
)





		

サービス:src/main/java/org/drug/store/hpregister/HpRegisterService.java

HpRegisterService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.hpregister;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.drug.store.hplist.HpList;
import org.drug.store.mapper.HpListMapper;

@Service
@Transactional
public class HpRegisterService {

	@Autowired
	HpListMapper hpListMapper;

	public List getHpList(){
		List list =hpListMapper.selectAll();
		return list;
	}

	public void insertToroku(HpRegisterForm toroku) {
		HpRegister hpToroku = new HpRegister();

		hpToroku.setHpName(toroku.getHpName());
		hpToroku.setHpAddNo(toroku.getHpAddNo());
		hpToroku.setHpAddName1(toroku.getHpAddName1());
		hpToroku.setHpAddName1(toroku.getHpAddName2());
		hpToroku.setHpAddName1(toroku.getHpAddName2());
		hpToroku.setHpTel(toroku.getHpTel());
		hpToroku.setHpCd(toroku.getHpCd());

		hpListMapper.insert_hp_master(hpToroku);
	}
}


		

コントローラ:src/main/java/org/drug/store/hpregister/HpRegisterController.java

HpRegisterController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.hpregister;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import org.drug.store.hplist.HpList;

@Controller
public class HpRegisterController {

	@Autowired
	private HpRegisterService hpRegisterService;

	@RequestMapping(path ="/hptoroku", method = RequestMethod.GET)
	String index(Model model) {
		HpRegisterForm hpRegisterForm = new HpRegisterForm();
		model.addAttribute("hpToroku", hpRegisterForm);
		return "drug/store/hptoroku";
	}

	@RequestMapping(path="/hptoroku", method = RequestMethod.POST)
	String toroku(Model model, HpRegisterForm hpRegisterForm) {
		//登録
		this.hpRegisterService.insertToroku(hpRegisterForm);
		//再検索
		List list = this.hpRegisterService.getHpList();
		model.addAttribute("list", list);

		return "drug/store/hplist";
	}

}
		

HTML:src/main/resources/templates/drug/store/hptoroku.html

hptoroku.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

hptoroku




	
(※)は必須
1
病院名
病院名
郵便番号
郵便番号
病院住所
都道府県
市区町村
番地・号室
電話番号
電話番号
医療機関コード
医療機関コード
</body> </html>
XX.医師一覧画面

機能概要:医師の一覧を取得して一覧表示

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


	drugstore
	├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
	│   └── org.drug.store                         #★
	│       └── DtrugstoreApplication     # メインクラス
	├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
	│   ├── static                              # js/cssファイル格納用
	│   ├── templates                           # テンプレートエンジン。HTMLが格納される
	│   └── application.properties              # 設定情報:DB接続/ポート番号
	├── src/test/java                              #
	│   └── org.drug.store                      #
	│       └── Test20181220ApplicationTests # 検証用クラス
	├── JREシステムライブラリ                      # ライブラリ
	├── Maven依存関係                              # Maven依存関係
	├── target/generated-sources/annotations       # ソースコード生成
	├── target/generated-test-sources/test-annotations  # テスト用ソース生成
	├── src                                        # ディレクトリ
	│     ├── main                                #
	│     └── test                                #
	├── target                                     # ディレクトリ
	│     ├── generated-sources                   #
	│     └── generated-test-sources              #
	├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
	├── mvnw.cmd                                   #
	└── pom.xml                                    # 依存関係
						

パッケージ作成:org.drug.store.drList

医師リスト(DrList)クラス作成:src/main/java/org/drug/store/drList/DrList.java

DrList.java:dr_masterテーブルとマッピング(DBと連携)


package org.drug.store.drlist;

import lombok.Data;

@Data
public class DrList {
	private int drNo;
	private String drName;
	private String hpName;
	private String kaName;

}


						

DrListFormクラス作成:src/main/java/org/drug/store/drList/DrListForm.java

DrListForm.java:HTMLと連携


package org.drug.store.drlist;

import lombok.Data;

@Data
public class DrListForm {

	private int drNo;
	private String drName;
	private String hpName;
	private String kaName;

}
						

パッケージ:src.main.java.org.drug.store.mapper

DrListMapper.java:ORマップ定義

insert_dr_masterメソッドを追加

※<が全角ですので変更してください


package org.drug.store.mapper;

import java.util.List;
import org.drug.store.drlist.DrList;
import org.drug.store.drregister.DrRegister;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface DrListMapper {

	List selectAll();
}

						

フォルダ作成:src/main/resources/org/drug/store/mapper

DrListMapper.xml:SQL定義ファイル

※<が全角ですので変更してください

※resulttype⇒resultType


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

	



						

サービス:src/main/java/org/drug/store/drList/DrListService.java

DrListService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.drlist;

imimport java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.drug.store.mapper.DrListMapper;

@Transactional
@Service
public class DrListService {

	@Autowired
	DrListMapper drListMapper;

	public List getDrList(){
		List drList = drListMapper.selectAll();
		return drList;
	}
}

						

コントローラ:src/main/java/org/drug/store/drList/DrListController.java

DrListController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.drlist;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class DrListController {

	@Autowired
	private DrListService drListService;

	@RequestMapping(path="/drlist", method = RequestMethod.GET)
	public String index(Model model) {
		List list = this.drListService.getDrList();
		model.addAttribute("list", list);
		return "drug/store/drlist";
	}

}
						

HTML:src/main/resources/templates/drug/store/drlist.html

drlist.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

医師一覧



	
	
ID 医師名 病院名 診療科

</body> </html>
XX.医師登録画面

機能概要:医師を新規登録する

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


drugstore
├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
│   └── org.drug.store                         #★
│       └── DtrugstoreApplication     # メインクラス
├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
│   ├── static                              # js/cssファイル格納用
│   ├── templates                           # テンプレートエンジン。HTMLが格納される
│   └── application.properties              # 設定情報:DB接続/ポート番号
├── src/test/java                              #
│   └── org.drug.store                      #
│       └── Test20181220ApplicationTests # 検証用クラス
├── JREシステムライブラリ                      # ライブラリ
├── Maven依存関係                              # Maven依存関係
├── target/generated-sources/annotations       # ソースコード生成
├── target/generated-test-sources/test-annotations  # テスト用ソース生成
├── src                                        # ディレクトリ
│     ├── main                                #
│     └── test                                #
├── target                                     # ディレクトリ
│     ├── generated-sources                   #
│     └── generated-test-sources              #
├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
├── mvnw.cmd                                   #
└── pom.xml                                    # 依存関係
		

パッケージ作成:org.drug.store.drregister

医師登録(DrList)クラス作成:src/main/java/org/drug/store/drregister/DrRegister.java

DrRegister.java:dr_masterテーブルとマッピング(DBと連携)


package org.drug.store.drregister;

import lombok.Data;

@Data
public class DrRegister {

	private int drNo;
	private String drName;
	private int hpNo;
	private int kaNo;

}


		

DrRegisterFormクラス作成:src/main/java/org/drug/store/drregister/DrRegisterForm.java

DrRegisterForm.java:HTMLと連携


package org.drug.store.drregister;

import lombok.Data;

@Data
public class DrRegisterForm {

	private int drNo;
	private String drName;
	private int hpNo;
	private int kaNo;

}
		

パッケージ:src.main.java.org.drug.store.mapper

DrListMapper.java:ORマップ定義

insert_dr_masterメソッドを追加

※<が全角ですので変更してください


package org.drug.store.mapper;

import java.util.List;
import org.drug.store.drlist.DrList;
import org.drug.store.drregister.DrRegister;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface DrListMapper {
//ここを追加
List selectAll();

void insert_dr_master(@Param("rec") DrRegister rec);

}

		

フォルダ作成:src/main/resources/org/drug/store/mapper

DrListMapper.xml:SQL定義ファイル

※<が全角ですので変更してください

※resulttype⇒resultType


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >


//ここから追加

INSERT INTO
drug_user.dr_master(
dr_no,
dr_name,
hp_no,
ka_no,
del_flg,
register_user_id,
register_date
)
VALUES
(
nextval('dr_no_seq'),
#{rec.drName},
#{rec.hpNo},
#{rec.kaNo},
0,
'test1',
CURRENT_DATE
)




		

サービス:src/main/java/org/drug/store/drregister/DrRegisterService.java

DrRegisterService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.drregister;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.drug.store.drlist.DrList;
import org.drug.store.hplist.HpList;
import org.drug.store.kalist.KaList;
import org.drug.store.mapper.DrListMapper;
import org.drug.store.mapper.HpListMapper;
import org.drug.store.mapper.KaListMapper;

@Service
@Transactional
public class DrRegisterService {

	@Autowired
	private DrListMapper drListMapper;

	public List getDrList(){
	List list =drListMapper.selectAll();
	return list;
	}

	public void insertToroku(DrRegisterForm toroku) {
		DrRegister drToroku=new DrRegister();

		drToroku.setDrName(toroku.getDrName());
		drToroku.setHpNo(toroku.getHpNo());
		drToroku.setKaNo(toroku.getKaNo());

		drListMapper.insert_dr_master(drToroku);
	}

	@Autowired
	private HpListMapper hpListMapper;

	public List getHpList(){
		List list= hpListMapper.selectAll();
		return list;
	}

	@Autowired
	private KaListMapper kaListMapper;

	public List getKaList(){
	List list=kaListMapper.selectAll();
	return list;
	}

}

		

コントローラ:src/main/java/org/drug/store/drregister/DrRegisterController.java

DrListController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.drregister;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import org.drug.store.drlist.DrList;
import org.drug.store.hplist.HpList;
import org.drug.store.kalist.KaList;

@Controller
public class DrRegisterController {

	@Autowired
	private DrRegisterService drRegisterService;

	@RequestMapping(value="/drtoroku", method=RequestMethod.GET)
	String index(Model model) {
		DrRegisterForm drRegisterForm = new DrRegisterForm();
		model.addAttribute("drToroku", drRegisterForm);

		List hpList=this.drRegisterService.getHpList();
		model.addAttribute("hpList", hpList);

		List kaList=this.drRegisterService.getKaList();
		model.addAttribute("kaList", kaList);

		return "drug/store/drtoroku";
	}

	//登録処理
	@RequestMapping(value="/drtoroku", method = RequestMethod.POST)
	String toroku(Model model, DrRegisterForm drRegisterForm) {
		this.drRegisterService.insertToroku(drRegisterForm);

		List list=this.drRegisterService.getDrList();
		model.addAttribute("list", list);

		return "/drlist";

	}
}
		

HTML:src/main/resources/templates/drug/store/drtoroku.html

drlist.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

drtoroku




	
(※)は必須
1
医師名
医師名
病院名
病院名
診療科
診療科
</body> </html>
XX.診療科一覧画面

機能概要:診療科の一覧を取得して一覧表示

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


drugstore
├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
│   └── org.drug.store                         #★
│       └── DtrugstoreApplication     # メインクラス
├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
│   ├── static                              # js/cssファイル格納用
│   ├── templates                           # テンプレートエンジン。HTMLが格納される
│   └── application.properties              # 設定情報:DB接続/ポート番号
├── src/test/java                              #
│   └── org.drug.store                      #
│       └── Test20181220ApplicationTests # 検証用クラス
├── JREシステムライブラリ                      # ライブラリ
├── Maven依存関係                              # Maven依存関係
├── target/generated-sources/annotations       # ソースコード生成
├── target/generated-test-sources/test-annotations  # テスト用ソース生成
├── src                                        # ディレクトリ
│     ├── main                                #
│     └── test                                #
├── target                                     # ディレクトリ
│     ├── generated-sources                   #
│     └── generated-test-sources              #
├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
├── mvnw.cmd                                   #
└── pom.xml                                    # 依存関係
		

パッケージ作成:org.drug.store.kaList

診療科リスト(kaList)クラス作成:src/main/java/org/drug/store/kaList/KaList.java

KaList.java:ka_masterテーブルとマッピング(DBと連携)


package org.drug.store.kalist;

import lombok.Data;

@Data
public class KaList {

	private int kaNo;
	private String kaName;
}


		

KaListFormクラス作成:src/main/java/org/drug/store/kaList/KaListForm.java

KaListForm.java:HTMLと連携


package org.drug.store.kalist;

import lombok.Data;

@Data
public class KaListForm {

	private int kaNo;
	private String kaName;
}

		

パッケージ:src.main.java.org.drug.store.mapper

KaListMapper.java:ORマップ定義

insert_ka_masterメソッドを追加

※<が全角ですので変更してください


package org.drug.store.mapper;

iimport java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import org.drug.store.kalist.KaList;
import org.drug.store.karegister.KaRegister;

@Mapper
public interface KaListMapper {

	List selectAll();
}


		

フォルダ作成:src/main/resources/org/drug/store/mapper

KaListMapper.xml:SQL定義ファイル

※<が全角ですので変更してください

※resulttype⇒resultType


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

	

	
		INSERT INTO
			drug_user.ka_master(
				ka_no,
				ka_name,
				del_flg,
				register_user_id,
				register_date
			)
		VALUES
			(
				nextval('ka_no_seq'),
				#{rec.kaName},
				0,
				'test1',
				CURRENT_DATE
			)
	


		

サービス:src/main/java/org/drug/store/kaList/KaListService.java

KaListService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.kalist;

iimport java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.drug.store.mapper.KaListMapper;

@Service
@Transactional
public class KaListService {

	@Autowired
	KaListMapper kaListMapper;

	public List getKaList(){
		List kaList=kaListMapper.selectAll();
		return kaList;
	}

}

		

コントローラ:src/main/java/org/drug/store/kaList/KaListController.java

KaListController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.kalist;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class KaListController {

	@Autowired
	private KaListService kaListService;

	@RequestMapping(path="/kalist", method=RequestMethod.GET)
		public String index(Model model) {
		List list=this.kaListService.getKaList();
		model.addAttribute("list", list);
		return "drug/store/kalist";
	}

}
		

HTML:src/main/resources/templates/drug/store/kalist.html

kalist.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

診療科一覧



	
	
ID 診療科名

</body> </html>
XX.診療科登録画面

機能概要:診療科の新規登録

 ファイル構成

ファイル構成(Maven標準ディレクトリ)


drugstore
├── src/main/java                              # 作成するアプリケーション/ライブラリのソースコード。
│   └── org.drug.store                         #★
│       └── DtrugstoreApplication     # メインクラス
├── src/main/resources                         #★ 作成するアプリケーション/ライブラリのリソース。
│   ├── static                              # js/cssファイル格納用
│   ├── templates                           # テンプレートエンジン。HTMLが格納される
│   └── application.properties              # 設定情報:DB接続/ポート番号
├── src/test/java                              #
│   └── org.drug.store                      #
│       └── Test20181220ApplicationTests # 検証用クラス
├── JREシステムライブラリ                      # ライブラリ
├── Maven依存関係                              # Maven依存関係
├── target/generated-sources/annotations       # ソースコード生成
├── target/generated-test-sources/test-annotations  # テスト用ソース生成
├── src                                        # ディレクトリ
│     ├── main                                #
│     └── test                                #
├── target                                     # ディレクトリ
│     ├── generated-sources                   #
│     └── generated-test-sources              #
├── mvnw                                       # Maven Warapperラッパースクリプト。バージョン互換性に対応
├── mvnw.cmd                                   #
└── pom.xml                                    # 依存関係
		

パッケージ作成:org.drug.store.karegister

診療科登録(kaList)クラス作成:src/main/java/org/drug/store/karegister/KaRegister.java

KaRegister.java:ka_masterテーブルとマッピング(DBと連携)


package org.drug.store.karegister;

import lombok.Data;

@Data
public class KaRegister {

	private int kaNo;
	private String kaName;

}


		

KaRegisterFormクラス作成:src/main/java/org/drug/store/karegister/KaRegisterForm.java

KaRegisterForm.java:HTMLと連携


package org.drug.store.karegister;

import lombok.Data;

@Data
public class KaRegisterForm {

	private int kaNo;
	private String kaName;

}

		

パッケージ:src.main.java.org.drug.store.mapper

KaListMapper.java:ORマップ定義

insert_ka_masterメソッドを追加

※<が全角ですので変更してください


package org.drug.store.mapper;

iimport java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import org.drug.store.kalist.KaList;
import org.drug.store.karegister.KaRegister;

@Mapper
public interface KaListMapper {

	List selectAll();
//ここを追加
	void insert_ka_master(@Param("rec") KaRegister rec);

}


		

フォルダ作成:src/main/resources/org/drug/store/mapper

KaListMapper.xml:SQL定義ファイル

※<が全角ですので変更してください

※resulttype⇒resultType


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

	
//ここから追加
	
		INSERT INTO
			drug_user.ka_master(
				ka_no,
				ka_name,
				del_flg,
				register_user_id,
				register_date
			)
		VALUES
			(
				nextval('ka_no_seq'),
				#{rec.kaName},
				0,
				'test1',
				CURRENT_DATE
			)
	


		

サービス:src/main/java/org/drug/store/karegister/KaRegisterService.java

KaRegisterService.java:ビジネスロジック

※<が全角ですので変更してください


package org.drug.store.karegister;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import org.drug.store.mapper.KaListMapper;
import org.drug.store.kalist.KaList;

@Service
@Transactional
public class KaRegisterService {

	@Autowired
	KaListMapper kaListMapper;

	public List getKaList(){
	List list=kaListMapper.selectAll();
	return list;
	}

	public void insertToroku(KaRegisterForm toroku) {
		KaRegister kaToroku = new KaRegister();

		kaToroku.setKaName(toroku.getKaName());

		kaListMapper.insert_ka_master(kaToroku);

	}

}
		

コントローラ:src/main/java/org/drug/store/karegister/KaRegisterController.java

KaListController.java:リクエストを受け取りマッピングするコントローラ

※<が全角ですので変更してください


package org.drug.store.karegister;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import org.drug.store.kalist.KaList;

@Controller
public class KaRegisterController {

	@Autowired
	private KaRegisterService kaRegisterService;

	@RequestMapping(value="/katoroku", method=RequestMethod.GET)
	String index(Model model) {
		KaRegisterForm kaRegisterForm= new KaRegisterForm();
		model.addAttribute("kaToroku", kaRegisterForm);

		return "drug/store/katoroku";
	}

	@RequestMapping(value="/katoroku", method=RequestMethod.POST)
	String toroku(Model model, KaRegisterForm kaRegisterForm) {
		//登録
		this.kaRegisterService.insertToroku(kaRegisterForm);
		//再検索して一覧表示
		List list=this.kaRegisterService.getKaList();
		model.addAttribute("list", list);

		return "drug/store/kalist";
	}
}

		

HTML:src/main/resources/templates/drug/store/katoroku.html

katoroku.html:画面表示するHTML

※コピペする際はDOCTYPE、html、head、bodyの開始タグ<が全角の為、半角に修正お願いします。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>

katoroku




	
(※)は必須
1
診療科名
診療科名
</body> </html>