본문 바로가기

데일리 공부 기록

hands on sts4 - gradle, mybatis, mysql 연결

728x90

[목표]

: DB 연결해보자

 

sts4 설치부터

gradle, tiles 셋팅까지 

하지 않으신 분은 아래 포스팅을 먼저 확인

https://tomhoon.tistory.com/423

 

hands on sts4 - 설치부터 tiles 기본 셋팅까지

[목표] : tiles를 사용하기 위한 sts4 설치부터 셋팅까지 해본다 1. STS4 설치 STS3은 "web.servlet.view.tiles" 가 지원이 안되는지 계속 오류가 발생하였다. STS4로 설치하자. 설치 경로는 아래와 같다 https://sp

tomhoon.tistory.com

 


1. gradle로 필요한 라이브러리 가져오기

[build.gradle]

plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.12'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	// tiles
    implementation 'org.apache.tiles:tiles-jsp:3.0.8'
    implementation 'org.apache.tiles:tiles-core:3.0.8'
    implementation 'org.apache.tiles:tiles-servlet:3.0.8'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'javax.servlet:jstl'
	
	// MyBatis 라이브러리 의존성 추가
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
	runtimeOnly 'mysql:mysql-connector-java:8.0.25'
}

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

항상 Gradle에 

의존성 추가해주면

Refrest를 해주어야 된다.

 

그래야지 통신을 통해

새로운 의존성을 프로젝트에 불러올 수 있습니다.

 


 

 

2. spring boot 서버와 DB 연결하는 서버셋팅

 

[application.properties]

server.port=8082
spring.mvc.view.prefix=/WEB-INF/tiles/layouts/

spring.mvc.view.suffix=.jsp

# database
spring.datasource.driver=com.mysql.cj.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/itkey?&serverTimezone=UTC&autoReconnect=true&allowMultiQueries=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.mapper-locations=classpath:/mapper/**/*.xml

 

 


 

 

3. mapper 셋팅 

[mapper.xml]

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mybatis.UserMapper">

    <select id="findAll" resultType="HashMap">
        select * from sample_board_tb;
	</select>

</mapper>

 

 

주의할 점은

mapper namespace는

mapper로 만들어놓은 인터페이스 파일의

패키지 경로 + 파일명이다.

 

 


 

 

4. MyBatisConfig 셋팅

 

[MyBatisConfig.java]

 

package com.example.demo.mybatis;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
//패키지명 
@MapperScan(value = "com.example.demo.mybatis", sqlSessionFactoryRef = "SqlSessionFactory")
public class MyBatisConfig {

 @Value("${spring.datasource.mapper-locations}")
 String mPath;

 @Bean(name = "dataSource")
 @ConfigurationProperties(prefix = "spring.datasource")
 public DataSource DataSource() {
     return DataSourceBuilder.create().build();
 }


 @Bean(name = "SqlSessionFactory")
 public SqlSessionFactory SqlSessionFactory(@Qualifier("dataSource") DataSource DataSource, ApplicationContext applicationContext) throws Exception {
     SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
     sqlSessionFactoryBean.setDataSource(DataSource);
     sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources(mPath));
     return sqlSessionFactoryBean.getObject();
 }

 @Bean(name = "SessionTemplate")
 public SqlSessionTemplate SqlSessionTemplate(@Qualifier("SqlSessionFactory") SqlSessionFactory firstSqlSessionFactory) {
     return new SqlSessionTemplate(firstSqlSessionFactory);
 }

}

 

 

getResources에 오류가 뜬다면

import를 잘 확인하시길 바랍니다

>> import org.springframework.context.ApplicationContext

위 라이브러리를 불러와야 합니다.

 

 

 


 

 

 

 

5. DTO, Service, Mapper 쿼리 조회와 데이터 가져오는 로직 만들기

[ResponseDTO.java]

package com.example.demo.mybatis;

public class ResponseDTO {
	String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
	
}

 

[UserService.java]

package com.example.demo.mybatis;

import java.util.ArrayList;
import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    UserMapper userMapper;

    public ArrayList<HashMap<String, Object>> findAll() {
        return userMapper.findAll();
    }
}

 

인터페이스입니다 조심하세요

[UserMapper.java]  

package com.example.demo.mybatis;

import java.util.ArrayList;
import java.util.HashMap;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UserMapper {

     ArrayList<HashMap<String, Object>> findAll();
}

 

 

 


 

 

 

 

 

마지막. 테스트 해보기

 

 

원하는 Controller에

1. Service를 Import 한다.

2. Service에 등록한 메소드인 "findAll()" 를 불러온다.

 


테스트 DB 안에는

1,2,3,4 값이 있습니다.

 

STS4 에서 조회결과를 찍은 값