LoginSignup
4
2

More than 3 years have passed since last update.

MyBatis+SpringBootでCRUDアプリを作る ※余計なものはナシ※ 2/2

Last updated at Posted at 2021-01-23

前回の記事の続きです。
次はクラスを作っていきます。
前回までの分はこちら
https://qiita.com/sumichan/items/bdc2a0e909416ae55162

3-1.Model.java

今回使うのはidとtask(やること)だけです。
@NotBlankはvalidationでblank入力を禁止します。
@Dataはlombokがセッティングさせていれば使用できますが、されていなければgetter,setterを自分で書いてください。

@Data //lombokが入っていればこれでgetter,setter生成完了
public class Todo {

    private Long id;

    @NotBlank
    private String task;
}

3-2.TodoMapper.java

個人的にmapperから書いていくとわかりやすいです。
必要なSQLを書いていきます。今回だとこの5つを使います。
mapperクラスにはinterfaceのクラスにして、@Mapperを付けます。


@Mapper
public interface TodoMapper {

    //全件取得
    @Select("select * from todo")
    List<Todo> selectAll();

    //idが一致した1件を取得
    @Select("select * from todo where id = #{id}")
    Todo selectOne(Long id);

    //登録
    @Options(useGeneratedKeys = true) //自動で連番のidを取得する
    @Insert("insert into todo (task) values (#{task})")
    void insert(Todo todo);

    //更新
    @Update("update todo set task = #{task} where id = #{id}")
    int update(Todo todo);

    //削除
    @Delete("delete from todo where id = #{id}")
    void delete(Long id);
}

3-3.TodoService.java

サービスクラスには@Serviceを付けます。
mapperへ何を取ってくるのか指示しています。


@Service
public class TodoService {

    @Autowired
    private TodoMapper todoMapper;

    //全件取得
    @Transactional
    public List<Todo> selectAll() {
        return todoMapper.selectAll();
    }

    //一件取得
    @Transactional
    public Todo selectOne(Long id) {
        return todoMapper.selectOne(id);
    }

    //登録
    @Transactional
    public void insert(Todo todo) {
        todoMapper.insert(todo);
    }

    //更新
    @Transactional
    public int update(Todo todo) {
        return todoMapper.update(todo);
    }

    //削除
    @Transactional
    public void delete(Long id) {
        todoMapper.delete(id);
    }


}

3-4.TodoController.java

controlleは実行した結果のSQLを画面に渡しています。
あとは画面遷移の指示をしています。

@Controller
@RequestMapping("/todos")
public class TodoController {

    @Autowired
    private TodoService todoService;

    //全件取得したtodoを、todoに入れておき、top.htmlで表示する。
    @GetMapping("")
    public String top(Model model) { //全件取得
        model.addAttribute("todo", todoService.selectAll());
        //todoにselectAll()の結果を入れて、top.htmlで表示する
        return "todos/top";//画面はtopへ移り、todoを表示する
    }

    @GetMapping("new") //top→newボタン
    public String newTodo(Model model, @ModelAttribute Todo todo) {
        //newボタンがtopで押されるとここを通る
        return "todos/new";
    }

    @PostMapping("new") //formから作成された画面
    public String create(@Validated @ModelAttribute Todo todo,BindingResult result) {

        if (result.hasErrors()) {
            return "todos/new";
        }

        todoService.insert(todo);//バリデーションに引っかからなければinsert実行
        return "redirect:/todos";//一覧表に戻る
    }

    @GetMapping("{id}") //1件分のデータの中身を確認する
    public String show(@PathVariable Long id, Model model) {
        model.addAttribute("todo", todoService.selectOne(id));//urlのidを使ってsql実行
        return "todos/show";
    }

    @GetMapping("{id}/change") //編集画面に行くまでの画面
    public String change(@PathVariable Long id, Model model) {
        model.addAttribute("todo", todoService.selectOne(id));
        return "todos/change";//取得したidを使って、change画面へ
    }

    @PutMapping("put/{id}") //更新画面
    public String update(Todo todo) {
        todoService.update(todo);
        return "redirect:/todos";
    }

    @DeleteMapping("{id}/delete") //消去画面
    public String dast(@PathVariable Long id) {
        todoService.delete(id);
        return "redirect:/todos";
    }
}

if (result.hasErrors()

バリデーションチェックに引っかかった場合(今回はtaskがブランクだった場合)は、new.htmlに戻るように指示されています。
バリデーションチェックを使用する場合は@Validatedを付けて、BindingResultを使います。

@PathVariableでURLの値を使うことができます。

4.http://localhost:8080/todosを実行する

設定を8080にしていなければ変えてください。
無事にCRUDができたら完成です!
お疲れ様でした!

ソースコード

参考

https://qiita.com/ozaki25/items/fe5fc876bd55a9d7daa9
大変お世話になりました。
ありがとうございます。

最後に

このアプリができればMyBatisを使ったCRUDの流れが掴めると思います。
応用して色々試してみてください!

最後まで読んでいただきありがとうございました。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2