見出し画像

1分でspring bootの実装方法ご紹介

Spring Bootとは

Javaアプリケーションの開発を簡素化するためのフレームワークです。

公式サイト:

Spring Boot特徴


Spring Bootはアプリケーションの開発を簡単にするために、すべてのコードを一から書く必要がなくなります。Spring Bootは、既存のコードを利用して開発を円滑に行うことができます。

Spring Bootは、サーバー上で実行されるJavaアプリケーションを構築するためのフレームワークを提供します。

Spring Bootを使用すると、Webサービス、クライアントサイドのアプリケーション、データベースアクセスなど、ソフトウェア開発のすべての領域をサポートします。

Spring Bootは、form、entity、dtoなどのデータ型をサポートしています。Spring Bootでは、クラス間の通信、ユーザーに見せるデータをdtoとして扱うことができます。

また、Spring Bootは、データベースからのデータの取得、保存、変更を行うためのentityをサポートしています。

demoコード


詳細のTodoアプリのdemoコードを参考してください。

MyBatisを用いたTodoアプリにサービスフォルダを追加する場合、以下のフォルダ構成になります。

/src
    /main
        /java
            /com.example.todo
                /controller
                    TodoController.java
                /dto
                    TodoDTO.java
                /entity
                    Todo.java
                /form
                    TodoForm.java
                /mapper
                    TodoMapper.xml
                /repository
                    TodoRepository.java
                /service
                    TodoService.java
        /resources
            application.properties
            data.sql
            schema.sql
            mapper
                TodoMapper.xml
    /test
        /java
            /com.example.todo
                /controller
                    TodoControllerTest.java
                /repository
                    TodoRepositoryTest.java
                /service
                    TodoServiceTest.java

Controller(コントローラ)

画面からのリクエストを受け取り,業務処理を指示し,処理結果を画面に返す。

// TodoController.java

@RestController
public class TodoController {
 
    @Autowired
    private TodoRepository todoRepository;
 
    // Get all todos
    @GetMapping("/todos")
    public List<TodoDTO> getAllTodos() {
        List<Todo> todos = todoRepository.findAll();
        List<TodoDTO> todoDTOs = new ArrayList<>();
        for(Todo todo: todos) {
            TodoDTO todoDTO = new TodoDTO(todo);
            todoDTOs.add(todoDTO);
        }
        return todoDTOs;
    }
 
    // Create a new todo
    @PostMapping("/todos")
    public TodoDTO createTodo(@Valid @RequestBody TodoForm todoForm) {
        Todo todo = new Todo();
        todo.setName(todoForm.getName());
        todo.setDescription(todoForm.getDescription());
        todo.setStatus(false);
        Todo newTodo = todoRepository.save(todo);
        TodoDTO todoDTO = new TodoDTO(newTodo);
        return todoDTO;
    }
 
    // Update a todo
    @PutMapping("/todos/{id}")
    public TodoDTO updateTodo(@PathVariable(value = "id") Long todoId,
                                            @Valid @RequestBody TodoForm todoForm) {
        Todo todo = todoRepository.findById(todoId)
                .orElseThrow(() -> new ResourceNotFoundException("Todo", "id", todoId));
        todo.setName(todoForm.getName());
        todo.setDescription(todoForm.getDescription());
        todo.setStatus(todoForm.getStatus());
        Todo updatedTodo = todoRepository.save(todo);
        TodoDTO todoDTO = new TodoDTO(updatedTodo);
        return todoDTO;
    }
 
    // Delete a todo
    @DeleteMapping("/todos/{id}")
    public ResponseEntity<?> deleteTodo(@PathVariable(value = "id") Long todoId) {
        Todo todo = todoRepository.findById(todoId)
                .orElseThrow(() -> new ResourceNotFoundException("Todo", "id", todoId));
 
        todoRepository.delete(todo);
        return ResponseEntity.ok().build();
    }
}

サービスのの役割は,業務に関わる処理に専念することとし, 業務データ(Entity)のDBへの出し入れはRepositoryに譲って任せること

// TodoService.java

@Service
public class TodoService {
 
    @Autowired
    private TodoMapper todoMapper;
 
    // Get all todos
    public List<TodoDTO> getAllTodos() {
        List<TodoDTO> todoDTOs = todoMapper.getAllTodos();
        return todoDTOs;
    }
 
    // Create a new todo
    public TodoDTO createTodo(TodoForm todoForm) {
        todoMapper.createTodo(todoForm);
        TodoDTO todoDTO = new TodoDTO(todoForm);
        return todoDTO;
    }
 
    // Update a todo
    public TodoDTO updateTodo(TodoForm todoForm) {
        todoMapper.updateTodo(todoForm);
        TodoDTO todoDTO = new TodoDTO(todoForm);
        return todoDTO;
    }
 
    // Delete a todo
    public void deleteTodo(Long todoId) {
        todoMapper.deleteTodo(todoId);
    }
}

Repository層の役割は,以下の2つである.

  1. Entityのライフサイクル(CRUD)を制御する操作インタフェースを提供すること

  2. Entityiの永続化を行う処理の実装を提供すること

// TodoRepository.java

@Repository
public interface TodoRepository extends JpaRepository<Todo, Long> {
 
    // Get all todos
    List<Todo> findAll();
 
    // Create a new todo
    Todo save(Todo todo);
 
    // Update a todo
    Todo saveAndFlush(Todo todo);
 
    // Delete a todo
    void deleteById(Long todoId);
}

引き続き作業中


この記事が気に入ったらサポートをしてみませんか?