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つである.
Entityのライフサイクル(CRUD)を制御する操作インタフェースを提供すること
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);
}
引き続き作業中
この記事が気に入ったらサポートをしてみませんか?