(Spring Boot)Spring Bootで一連の流れ

前回MySQLのセットアップを行いました。
次は夢が詰まったDB接続です。

pom.xmlの設定

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

pom.xmlを右クリック、maven install

application.propertiesの設定

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/test_db
spring.datasource.username=root
spring.datasource.password=password

イメージ

Contoroller ↔ Service ↔ Repository ↔ DB

戻りのデータは定石ではないかもしれませんがとりあえずPOJOにしました。

とりあえずコントローラから接続してみる(データはあらかじめあり)

Controller

@RestController
@ResponseBody
public class HelloController {

    @Autowired
    private HelloService service;
    
    @GetMapping("/findall")
    public ResponseEntity<List<HelloEntity>> findAll() {
        List<HelloEntity> list =service.findAll();
        
        list.stream()
            .forEach(entity -> System.out.println(entity.getId() + ":" + entity.getName()));
        
        return ResponseEntity.ok(list);
    }
    
 }

Service

@Service
public interface HelloService {
    public void hello(String message);
    public List<HelloEntity> findAll();
}
@Service
public class HelloServiceImpl implements HelloService {
    
    @Override
    public void hello(String message) {
        System.out.println("Hello," + message);
    }

    @Autowired
    HelloRepository repository;
    
    public List<HelloEntity> findAll() {
        List<HelloEntity> entityList = repository.findAll();
        return entityList;
    }
}

Repository

public interface HelloRepository {
    public List<HelloEntity> findAll();
}
@Repository
public class HelloRepositoryImpl implements HelloRepository {

    @Autowired
    JdbcTemplate dao;
    
    public List<HelloEntity> findAll() {
        
        List<Map<String, Object>> list = dao.queryForList("select id, name from users;");
        
        List<HelloEntity> entityList =list.stream()
                    .map(map -> HelloEntity.create((Integer) map.get("id"), (String) map.get("name")))
                    .collect(Collectors.toList());
        
        return entityList;
    }

}

Entity

import lombok.Getter;

@Getter
public final class HelloEntity {
    
    private HelloEntity(Integer id, String name) {
        this.id = id;
        this.name = name;
    };
    
    public static HelloEntity create(Integer id, String name) {
        return new HelloEntity(id, name);
    }

    private Integer id;
    
    private String name;
}

まとめ

SpringBootについて最初に書いたエントリから、ここまでのエントリでひとまず一連の処理ができるかなと。 しかし、DB接続はORMを使いたいですね。次回はORMとしてDomaを使って処理を作成したいと思います。(Domaしか使ったことないからですが…)