SpringBootやってみる~DBアクセス(mybatis)編~ データ登録①

#目的
自己学習向け・初心者向けメモ。
前回の [SpringBootやってみる~DBアクセス(mybatis)編~ データ取得②](https://qiita.com/y_ogawa_naaaa/items/8d8f88091da318d5f356 "SpringBootやってみる~DBアクセス(mybatis)編~ データ取得②") のアプリケーションをベースとする

#概要
- [完成図(予定)](#完成図(予定)) 
- [アプリケーションの実装](#アプリケーションの実装) 
- [アプリケーションの実行](#アプリケーションの実行)
- [次回](#次回)

#完成図
【登録画面】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/301b45b6-01c6-d449-ca33-3fd4ba775698.png)
【登録確認画面】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/18291cfd-1918-f001-3669-532de1314aee.png)
【登録完了画面】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/84d35294-ae5f-10ed-77dd-826187e133a4.png)


#アプリケーションの実装
作成したプログラムの構成は以下の通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/1410638c-f6d3-7fd6-9285-3b335d067615.png)

赤枠で囲っているものは、前回のソースコードから追加・変更したもので本記事にて記載する(HTMLファイルはgit参照)

【DemoController.java】
TOP画面からユーザ検索・ユーザ登録系の画面への遷移の追加
Formの修正の反映

```DemoController.java
    /**
     * Formオブジェクトを初期化して返却する
     * @return 検索用Formオブジェクト
     */
    @ModelAttribute("userForm")
    public UserForm clearUserForm(){
        return new UserForm();
    }

    /**
     * 初期表示画面に遷移する
     * @return 検索画面へのパス
     */
    @RequestMapping("/")
    public String index(Model model){
    	UserForm userForm = new UserForm();
    	userForm.setId(null);
    	userForm.setName(null);
    	userForm.setSex(null);
    	model.addAttribute("userForm",userForm);
        return "top";
    }

    /**
     * 検索画面に遷移する
     * @return 検索画面へのパス
     */
    @RequestMapping("/search")
    public String search(){
        return "search";
    }

    /**
     * 登録画面に遷移する
     * @return 登録画面へのパス
     */
    @RequestMapping("/register")
    public String register(){
    	return "register";
    }

    /**
     * 登録確認画面に遷移する
     * @return 登録画面へのパス
     */
    @RequestMapping("/confirm")
    public String confirm(){
        return "confirm";
    }

    /**
     * 検索処理を行い、一覧画面に遷移する
     * @param searchForm 検索用Formオブジェクト
     * @param model Modelオブジェクト
     * @param result バインド結果
     * @return 一覧画面へのパス
     */
    @RequestMapping("/search_result")
    public String searchResult(UserForm userForm, Model model, BindingResult result){
        //検索用Formオブジェクトのチェック処理
        //ユーザー情報リストを取得
        List<UserForm> demoFormList = demoService.demoFormList(userForm);
        //ユーザー情報リストを更新
        model.addAttribute("demoFormList", demoFormList);
        return "search_result";
    }

    /**
     * 確認画面に遷移する
     * @param demoForm Formオブジェクト
     * @param result バインド結果
     * @return 確認画面または入力画面へのパス
     */
    @PostMapping(value = "/confirm", params = "next")
    public String confirm(UserForm userForm, BindingResult result){
        //チェック処理を行い、画面遷移する
        return "confirm";
    }

    /**
     * 完了画面に遷移する
     * @param demoForm Formオブジェクト
     * @param result バインド結果
     * @return 完了画面
     */
    @PostMapping(value = "/complete", params = "next")
    public String send(UserForm userForm, BindingResult result){
        //追加処理を行う
        demoService.create(userForm);
        return "complete";
    }
```

【UserForm.java】
Formの共通化

【UserInfoMapper.java】
ユーザデータ登録・最大ID取得の追加

```UserInfoMapper.java

    /**
     * ユーザーデータを追加する
     * @param userData ユーザーデータテーブル(user_data)の追加データ
     */
     List<UserInfo> createRegisterForm(UserInfo userInfo);

    /**
     * 最大値IDを取得する
     * @return 最大値ID
     */
    String findMaxId();
```

【DemoService.java】
ユーザデータの追加

```DemoService.java
    /**
     * 引数のユーザーデータ追加
     * @param demoForm フォームオブジェクト
     */
    void create(UserForm userForm);
```

【DemoServiceImpl.java】
ユーザデータの追加

```DemoServiceImpl.java
    @Override
    public void create(UserForm userForm){
        //追加処理を行うエンティティを生成
        UserInfo userInfo = getUserData(userForm);
        //追加処理
        userInfo.setId(String.valueOf(Integer.parseInt(mapper.findMaxId()) + 1));
        mapper.createRegisterForm(userInfo);
    }

    /**
     * UserInfoオブジェクトに引数のフォームの各値を設定する
     * @param userForm UserInfoオブジェクト
     * @return ユーザーデータ
     */
    private UserInfo getUserData(UserForm userForm){
    	UserInfo userInfo = new UserInfo();
        userInfo.setName(userForm.getName());
        userInfo.setSex(userForm.getSex());
        return userInfo;
    }
```

ソースコードの詳細はいかに記載
[GitHub](https://github.com/yuki1234567890/learn "GitHub") 

#アプリケーションの実行
追加するユーザ情報を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/0d606721-72b5-6af3-fee8-eb4028e4f2b7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/78fe87c4-0c22-1b52-8581-a44291545bc2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/627656ec-489e-9090-0c4a-2a47a47bef24.png)


登録したユーザを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/e190b4bf-22cc-2032-9bec-49faca40a5c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530028/d95a8a88-ef98-a7cc-89f2-b89e6055326b.png)

#次回
[SpringBootやってみる~DBアクセス(mybatis)編~ データ登録②](https://qiita.com/y_ogawa_naaaa/private/e7152edb9183b8e74efb "SpringBootやってみる~DBアクセス(mybatis)編~ データ登録②")