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


結論から、本日は課題をほぼ進めておりません。
入社手続きなどが済んでから進むこともあり、そのような物理的な事情と復習をしたかったからです。

今までの実装の内容の整理(意味の確認)

  • Spring initializrでSpring boot(Javaプラットフォーム向けのフレームワークであるSpring Frameworkのひとつ)プロジェクトの雛形を生成したときにsettings.gradleが生成される、rootProject.nameをディレクトリ名に変更。
    →これはRails newでappフォルダが自動生成されることと同じ?

  • 今回はパッケージを複数にして実装している。Javaは一つのPackage(ディレクトリ)で実装することもできますが、複数のクラスが生み出されてきた時などに見通しが悪くなってしまいます。
    そのためPackageを分割して、見通しを良くしておくことが推奨される。

  • mysqlでは 'todo'を作成している。

  • Entity(実体? DBテーブルと1:1の関係になる)パッケージのTodoクラス。
    テーブルが増えるとクラスも増えるので、それに伴って.javaファイルも増やして管理した方が良いだろう。

  • Repository(Entityを利用してDBと接続するもの)パッケージの作成。

  • Service(Repositoryを扱う)パッケージのTodoServiceクラス。 ここまででDBを取得する。

  • Controller(これらを扱い画面側に渡すもの)パッケージのTodoControllerクラス。

  • HTML

Javaでわかっていないなと思う記述

  • EntityのTodoクラスの記述
Todo.java
@Data
@Entity
public class Todo {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private String title;
  private LocalDate deadline;
  private boolean status;

  @CreationTimestamp private LocalDateTime createTime;
  @UpdateTimestamp private LocalDateTime updateTime;
}
  • Repositoryの記述
TodoRepository
@Repository
public interface TodoRepository extends JpaRepository<Todo, Long> {}
  • Serviceクラスの記述
TodoService.java
/** Todo Service */
@Service
@Transactional
@RequiredArgsConstructor
public class TodoService {

  private final TodoRepository todoRepository;

  /**
   * Todo情報を全件取得する
   *
   * @return Todo情報
   */
  public List<Todo> searchAllTodo() {
    return todoRepository.findAll();
  }
}
  • Controllerの記述
TodoController.java
@GetMapping // --- ③このメソッドがHTMLのGetメソッドで呼び出されることを示すアノテーション
public String index(Model model) {
    model.addAttribute("todoList" , todoService.searchAllTodo());
    return "index"; // --- ④このメソッドが何かというHTMLファイルを呼び出すのかを示す文字列
}
TodoController.java
@PostMapping("/register")
public String register(TodoForm todoForm) {
    todoService.saveTodo(todoForm);
    return "redirect:/";
  • HTML
index.html
<body>
<div>
  <table>
    <tr>
      <th>タイトル</th>
      <th>期日</th>
      <th>ステータス</th>
    </tr>
    <tr th:each="todo : ${todoList}" th:object="${todo}">
      <td th:text="*{title}"></td>
      <td th:text="${#temporals.format(todo.deadline, 'yyyy年MM月dd日')}"></td>
      <td>
        <span th:if="${todo.status}">完了</span>
        <span th:unless="${todo.status}">未完了</span>
      </td>
    </tr>
  </table>
</div>
</body>

まとめ

今までやっていたことの意味だとか関連性などの流れはほぼ理解できたのですが、javaの記述が全くわかっていないので、一旦javaのカリキュラムを進めます💦

理解したような気になれば仮説と共に編集して追記します。