사용 환경
- Windows 10
- Java 1.8
- Gradle 7.2
- Spring Boot 2.5.6
- MyBatis 2.2.0
- MySQL 5.7
- Tomcat 9, 10
프로젝트 따라하기
-
프로젝트 생성
브라우져에서 spring initializr를 방문하여 아래와 같이 입력하고 GENERATE 버튼을 클릭합니다.
- Project: Gradle Project
- Language: Java
- Spring Boot: 2.5.6
- Project Meta:
- Group: trvoid
- Artifact: mysql-mybatis
- Name: mysql-mybatis
- Package name: trvoid.mybatis
- Packaging: War
- Java: 8
- Dependencies:
- Spring Web
- JDBC API
- MyBatis Framework
- MySQL Driver
생성된 프로젝트 파일을 다운로드하여 압축을 풉니다. 프로젝트 폴더 구조는 아래와 같습니다.
mysql-mybatis |-src |-main |-java |-trvoid.mybatis |-MysqlMybatisApplication.java |-ServletInitializer.java |-resources |-application.properties |-test |-java |-trvoid.mybatis |-MysqlMybatisApplicationTests.java |-build.gradle |-gradlew.bat
build.gradle
plugins { id 'org.springframework.boot' version '2.5.6' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' } group = 'trvoid' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' runtimeOnly 'mysql:mysql-connector-java' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() }
src/main/java/trvoid/mybatis/MysqlMybatisApplication.java
package trvoid.mybatis; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MysqlMybatisApplication { public static void main(String[] args) { SpringApplication.run(MysqlMybatisApplication.class, args); } }
src/main/java/trvoid/mybatis/ServletInitializer.java
package trvoid.mybatis; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MysqlMybatisApplication.class); } }
-
데이터 소스 설정
applicaton.properties
파일을 삭제하고applicaton.yml
파일을 추가하여 데이터 소스를 설정합니다.src/main/resources/application.yml
spring: profiles: active: local --- spring: profiles: local datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/my_test_db username: u1234 password: p1234
-
@Mapper
추가src/main/java/trvoid/mybatis/model/Car.java
package trvoid.mybatis.model; public class Car { private int id; private String model; private String manufacturer; public Car() { } public Car(int id, String model, String manufacturer) { this.id = id; this.model = model; this.manufacturer = manufacturer; } // getters and setters @Override public String toString() { return String.format("id:%d, model:%s, manufacturer:%s", id, model, manufacturer); } }
src/main/java/trvoid/mybatis/mapper/CarMapper.java
package trvoid.mybatis.mapper; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import trvoid.mybatis.model.Car; import java.util.List; @Mapper public interface CarMapper { String SELECT = " SELECT ID, MODEL, MANUFACTURER FROM CAR "; @Select(" SELECT COUNT(1) FROM ALL_OBJECTS " + " WHERE OBJECT_TYPE = 'TABLE' AND OBJECT_NAME = 'CAR' ") int countTable(); @Insert(" CREATE TABLE CAR ( " + " ID NUMBER(10) NOT NULL, " + " MODEL VARCHAR2(100) NOT NULL, " + " MANUFACTURER VARCHAR2(100) NULL, " + " CONSTRAINT CAR_PK PRIMARY KEY (ID) " + " ) ") void createTable(); @Insert(" INSERT INTO CAR ( " + " ID, MODEL, MANUFACTURER " + " ) VALUES ( " + " #{car.id}, #{car.model}, #{car.manufacturer,jdbcType=VARCHAR} " + " ) ") void insertCar(@Param("car") Car car); @Select(SELECT + " WHERE ID = #{carId} ") Car getCar(@Param("carId") String carId); @Select(SELECT) List<Car> findAll(); }
-
컨트롤러 추가
src/main/java/trvoid/mybatis/controller/MainController.java
package trvoid.mybatis.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import trvoid.mybatis.mapper.CarMapper; import trvoid.mybatis.model.Car; @RestController public class MainController { @Autowired CarMapper carMapper; @GetMapping("/") public String main() { return "hello"; } @GetMapping("/car/{id}") public Car car(@PathVariable String id) { Car car = carMapper.getCar(id); return car; } }
-
WAR 파일 생성
gradlew build
빌드 결과로 다음 파일이 생성됩니다.
build/libs/mysql-mybatis-0.0.1-SNAPSHOT.war
build/libs/mysql-mybatis-0.0.1-SNAPSHOT-plain.war
-
Tomcat 9에 배포
- Tomcat을 실행합니다.
- WAR 파일의 이름을
mysql-mybatis.war
로 변경하여 Tomcat의webapps
폴더 아래에 복사합니다. - 브라우져에서
http://localhost:8080/mysql-mybatis/car/1
URL에 접속합니다. - 화면에 아래와 같은 내용이 표시되는지 확인합니다.
{ "id": 1, "model": "J1", "manufacturer": "James" }
- Tomcat을 종료합니다.
-
Tomcat 10에 배포
- Tomcat을 실행합니다.
- WAR 파일의 이름을
mysql-mybatis.war
로 변경하여 Tomcat의webapps-javaee
폴더 아래에 복사합니다. - 브라우져에서
http://localhost:8080/mysql-mybatis/car/1
URL에 접속합니다. - 화면에 아래와 같은 내용이 표시되는지 확인합니다.
{ "id": 1, "model": "J1", "manufacturer": "James" }
Written with StackEdit.
댓글 없음:
댓글 쓰기