IT未経験者 入社前課題memo⑦


昨日までの超基礎java学習を終えて再度課題に戻って取り組んでみることにしました。
今日も今日とて夜に活動を開始した。

アプリケーション構造をざっくり復習すると、下記の1~3を経由してレスポンスを返している。

  1. クライアントサイド(HTML、CSS,JSなど)
  2. サーバーサイド(Javaという言語とTomcatを用いて、データベースとのやりとりを可能にしている。
  • 中身の構造Controller, Service, Repositoryをjava言語によって記述していく
  • Controllerの中身 Form
  • Serviceの中身 Entity, 検索条件
  • Repositoryの中身 Entity, 検索条件
    3.Datstore (MySQL)

制作内容にてMEMO

  • SQLコマンドで直接テーブルを作成しておいて、後程データの取得と表示を確認する。
  • Entityパッケージ内には、Todoクラス(データベースのテーブルと1:1の関係になる)
  • Repositoryパッケージは、そのEntityを利用してデータベースをと接続する。
  • Serviceパッケージ内、TodoServiceクラスはRepositoryを扱うもの。
  • Controllerパッケージ内、TodoControllerは上記を扱ってHTML側に渡す役割。
  • Form(登録機能)パッケージ内、TodoFormはHTML側から送られてくるデータを受け取る機能
  • 再度Controllerにて、送られてきたデータの処理機能を追加する。URLやデータ送信先の指定
  • 再度Serviceにて登録処理を追加。todoFormの入力値をTodoに送る?

検索機能

search.htmlで検索ワードを入力して
→ コントローラーで検索ワードを受け取りサービスクラスへ送る
→ サービスクラスではレポジトリに検索処理を依頼する
→ レポジトリが結果をサービスに返す
→ サービスがコントローラーに結果を返す
→ コントローラーがsearch.htmlに結果を返す
→ html上に表示される

  • レポジトリクラスの編集
TodoRepository.java
@Repository
public interface TodoRepository extends JpaRepository<TodoEntity, Long> {
    //↓追加する
    List<Todo> findByTitleContainingOrderByCreateTimeDesc(String title);
}

「JpaRepository」というインターフェイスを継承して作成します。
public interface 名前 extends JpaRepository <エンティティ , IDタイプ>
"Containing"  部分一致
"OrderByCreateTimeDesc" CreateTimeの昇順(最新順)

  • サービスクラスの編集
TodoService.java
public List<Todo> findToDoByTitle(String title) {
   return todoRepository.findByTitleContainingOrderByCreateTimeDesc(title);
}
  • コントローラーの編集
TodoController.java
/**
* 検索画面を表示
*
* @return 画面表示用HTMLパス
*/
@GetMapping("/search")
public String search() {
  return "search";
}

/**
*
* @param model
* @param title
* @return 画面表示用URL
*/
@GetMapping("/search/result")
public String searchResult(Model model,@ModelAttribute TodoSearchForm searchForm) {
    List<Todo> searchResult = todoService.findToDoByTitle(searchForm.getTitle());
    model.addAttribute("todoList", searchResult);
    return "result";
}