자바 프레임 워크 7,8주차

2026. 4. 22. 12:522026 상반기 전공과목 공부/Java 프레임워크

반응형

더보기
plugins {
    id 'java'
    id 'org.springframework.boot' version '4.0.5'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'indusw.sba'
version = '0.0.1-SNAPSHOT'
description = 'admin-2024001910a'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(25)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'com.mysql:mysql-connector-j'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    
    
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-webmvc'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-thymeleaf-test'
    testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
    testCompileOnly 'org.projectlombok:lombok'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
    testAnnotationProcessor 'org.projectlombok:lombok'

}

tasks.named('test') {
    useJUnitPlatform()
}

city 클래스 생성

더보기
package indusw.sba.admin2024001910a.domain;

import lombok.Builder;
import lombok.Data;


@Data // @Getter, @Setter @EqualAndHashCode, @ToString, @NoArgsConstructor 의 합 집합
@Builder // Builder Pattern을 사용한 설정

public class City {
    private int id;
    private String name;
    private String countryCode;
    private String district;
    private String population;
}

CityController 생성

더보기
package indusw.sba.admin2024001910a.controller;

import indusw.sba.admin2024001910a.domain.City;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/city")

public class CityController {
    @GetMapping("/")
    public String getCities() {
    // service 호출 -> repository(dto, model...) -> db
        // -> repository -> service ->controller 반환
        return "city/cities";
    }
    @GetMapping("/{id}")
    public String getCity(@PathVariable("id") String id, Model model) {
        City city = City.builder()
                .id(10)
                .name("Korea")
                .build();
        model.addAttribute("city",id);
        return "city/city";
    }
}

city 폴더를 만들고

members 폴더 안에 있는 list.html을 복사해서

cities.html로 붙여넣음


CityController

수정

package indusw.sba.admin2024001910a.controller;

import indusw.sba.admin2024001910a.domain.City;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/city")

public class CityController {
    @GetMapping("/")
    public String getCities() {
    // service 호출 -> repository(dto, model...) -> db
        // -> repository -> service ->controller 반환
        return "city/cities";
    }
    @GetMapping("/{id}")
    public String getCity(@PathVariable("id") int id, Model model) {
        City city = City.builder()
                .id(id)
                .name("Korea")
                .build();
        model.addAttribute("city",city);
        return "city/city";
    }
}

blank.html 복사해서

city.html 만듬


crtl+shift+r눌러서 바꿈

다 replaceAll


database를 보면

population형식이 int형이기 때문에 코드를 수정

 

City.java

더보기
package indusw.sba.admin2024001910a.domain;

import lombok.Builder;
import lombok.Data;


@Data // @Getter, @Setter @EqualAndHashCode, @ToString, @NoArgsConstructor 의 합 집합
@Builder // Builder Pattern을 사용한 설정

public class City {
    private int id;
    private String name;
    private String countryCode;
    private String district;
    private int population;
}

city.html

코드에 추가

<!-- Page Heading -->
<h1 class="h3 mb-4 text-gray-800">
    <span th:text="${city.id}"></span>
    <span th:text="${city.name}"></span>
    <span th:text="${city.population}"></span>
</h1>

CityController 수정

더보기
package indusw.sba.admin2024001910a.controller;

import indusw.sba.admin2024001910a.domain.City;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/city")

public class CityController {
    @GetMapping("/")
    public String getCities() {
    // service 호출 -> repository(dto, model...) -> db
        // -> repository -> service ->controller 반환
        return "city/cities";
    }
    @GetMapping("/{id}")
    public String getCity(@PathVariable("id") int id, Model model) {
        City city = City.builder()
                .id(id)
                .name("Korea")
                .population(55000000)
                .build();
        model.addAttribute("city",city);
        return "city/city";
    }
}

CityController 수정

더보기
package indusw.sba.admin2024001910a.controller;

import indusw.sba.admin2024001910a.domain.City;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@Controller
@RequestMapping("/city")

public class CityController {
    @GetMapping("/")
    public String getCities() {
    // service 호출 -> repository(dto, model...) -> db
        // -> repository -> service ->controller 반환
        return "city/cities";
    }
    @Autowired
    DataSource dataSource;

    @GetMapping("/{id}")
    public String getCity(@PathVariable("id") int id, Model model) {
        System.out.println("datasource : " + dataSource);
        Connection connection = null;
        try {
            System.out.println("datasource : " + dataSource.getConnection());
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        City city = City.builder()
                .id(id)
                .name("Korea")
                .population(55000000)
                .build();
        model.addAttribute("city",city);
        return "city/city";
    }
}

실행하면

정상적으로 로그가 찍히고 실행이 된다


connection은 beans가 아니라 @Autowired가 안된다



CityController 수정

더보기
package indusw.sba.admin2024001910a.controller;

import indusw.sba.admin2024001910a.domain.City;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

@Controller
@RequestMapping("/city")

public class CityController {

    @GetMapping("/")
    public String getCities() {
        // service 호출 -> repository(dto, model...) -> db
        // -> repository -> service ->controller 반환
        return "city/cities";
    }

    @Autowired
    DataSource dataSource;
//    @Autowired Connection connection;

    @GetMapping("/{id}")    // get record using id
    public String getCity(@PathVariable("id") int id, Model model) {
        System.out.println("datasource : " + dataSource);
        Connection connection = null;
        City city = null;
        try {
            System.out.println("datasource : " + dataSource.getConnection());
            connection = dataSource.getConnection();
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("select * from city where id = " + id);
            if (rs.next()) {
                city = City.builder()
                        .id(rs.getInt(1))
                        .name(rs.getString(2))
                        .population(rs.getInt(5))
                        .build();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        model.addAttribute("city", city);
        return "city/city";
    }
}

실행하면