File - New - Spring Starter Project
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>sample01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sample01</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
# port number setting
server.port=3000
# DB setting
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:xe
spring.datasource.username=hr
spring.datasource.password=hr
해당 설정은 오직 Oracle 사용 시에만 해당된다.
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@Configuration
public class DatabaseConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
System.out.println("DatabaseConfig sqlSessionFactory");
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
Resource arrResouce[] = new PathMatchingResourcePatternResolver().getResources("classpath:sqls/*.xml");
sqlSessionFactoryBean.setMapperLocations(arrResouce);
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return (SqlSessionFactory)sqlSessionFactoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// TODO Auto-generated method stub
// WebMvcConfigurer.super.addCorsMappings(registry);
// registry.addMapping("/**").allowedOrigins("http://localhost:8090");
registry.addMapping("/**").allowedOrigins("*");
}
}
public class MemberDto {
private String id;
private String pwd;
private String name;
private String email;
private int auth;
public MemberDto() {
}
public MemberDto(String id, String pwd, String name, String email, int auth) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
this.auth = auth;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAuth() {
return auth;
}
public void setAuth(int auth) {
this.auth = auth;
}
@Override
public String toString() {
return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", auth=" + auth + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mul.camp.a.dao.MemberDao">
<select id="allMember" resultType="mul.camp.a.dto.MemberDto">
SELECT * FROM MEMBER
</select>
</mapper>
기존 sts와는 다르게 namespace를 자세한 경로로 명시해줘야한다.
@Mapper
@Repository
public interface MemberDao {
public List<MemberDto> allMember();
}
이제는 더이상 Interface를 선언하고 상속받은 클래스를 따로 안 만들어줘도 된다. DAO에는 @Mapper, @Repository 어노테이션을 함께 추가해준다.
@Service
@Transactional
public class MemberService {
@Autowired
MemberDao dao;
public List<MemberDto> allMember() {
return dao.allMember();
}
}
Service에는 @Transactional 이라는 어노테이션이 추가되었다.
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import mul.camp.a.dto.MemberDto;
import mul.camp.a.service.MemberService;
@RestController // @Controller + @ResponseBody -> Restful
public class HelloController {
@Autowired
MemberService service;
@RequestMapping(value = "/base", method = RequestMethod.GET)
public String base() {
System.out.println(" HelloController base()");
return "base";
}
@RequestMapping(value= "/connParamGet")
public String connParamGet(String title) {
System.out.println("HelloController connParamGet()");
System.out.println("title :" + title);
return "통신성공";
}
@RequestMapping(value= "/getMember")
public MemberDto getMember() {
System.out.println("HelloController getMember()");
MemberDto dto = new MemberDto("abc", "123", "AAA", "aa@naver.com", 1);
return dto;
}
@RequestMapping(value= "/getMemberList")
public List<MemberDto> getMemberList(){
System.out.println("HelloController getMember()");
List<MemberDto> list = new ArrayList<MemberDto>();
list.add(new MemberDto("abc", "123", "AAA", "aa@naver.com", 1));
list.add(new MemberDto("bcd", "234", "BBB", "bb@naver.com", 2));
list.add(new MemberDto("cde", "456", "CCC", "cc@naver.com", 3));
return list;
}
@RequestMapping(value= "/dbTest")
public List<MemberDto> dbTest(){
System.out.println("HelloController dbTest()");
List<MemberDto> list = service.allMember();
return list;
}
}
기존 sts에서는 @Controller와 @ResponseBody를 따로 선언해줘야했지만 SpringBoot에서는 @RestController라는 어노테이션 하나로 AJAX 비동기처리가 가능해졌다.
DB연동은 이클립스에서 새로운 워크스페이스를 생성한 후 Oracle 11로 ojdbc6.jar가 존재하는 경로를 찾아 기존에 생성했던 데이터베이스 계정으로 접속해서 다시 연결해주었다.


