타닥타닥 개발자의 일상

SpringBoot와 Oracle SQl 연결하기, 데이터 웹페이지에 출력하기 본문

코딩 기록/SpringBoot

SpringBoot와 Oracle SQl 연결하기, 데이터 웹페이지에 출력하기

NomadHaven 2022. 2. 21. 18:10

 

1. Oracle SQL과 이클립스 연결하기

Open Perspective에서 Databasee Development 선택하고 Open

 

DataBase Connections 우클릭 > New > 새창으로 New Connection Profile 뜨면 Oracle 선택

체크한 부분 본인이 사용하고자 하는 대로 변경.

Username/Password는 연결하고자하는 오라클의 계정과 비밀번호로 입력.

우측 상단의 십자 볼트 + 버튼 클릭

 

본인의 오라클 버전과 맞는 버전 선택. 본인은 Orcacle11선택

저것만 선택하면 OK버튼이 활성화가 안된다.

Name/Type 탭 옆에 있는 JAR List탭 선택

 

이전에 한번 연결한적이 있다면 ojdbc14.jar이 있을텐데,

이거 말고 새로 연결해줘야 된다.

 

기존에 저장했던 ojdbc6.jar 열기

 

원래있었던 ojdbc14.jar은 Remove JAR/Zip하여 삭제.

삭제되면 OK버튼이 활성화 되고

eclipse와 Oracle이 연결 완료된다.

 

체크된 부분이 위와 같은 과정으로 연결한 Oracle DB

연결된 New Orcale이 잘 연결되었는지 확인하기 위해서 우측 상단의 디스켓 모양 버튼 클릭

 

팝업된 쿼리문 입력창에 본인이 설치한 조건에 맞게 상단탭 설정.

쿼리문 입력해서 잘 출력되는지 확인하기

 

이클립스에서 쿼리문을 커밋하기 위해서는 alt + c 누르면 된다.

 

커밋 성공하면 Satatus 창에 Success라고 뜬다.

 

연결된 Oracle DB 우클릭 > Properties 클릭

팝업된 Properties for New Oracle 창에서 Driver Properties항목 클릭

Connextion URL을 확인하여 복사해둔다.

이 주소는 스프링을 오라클과 연결시에 필요하다.

2. 스프링 부트 프로젝트 생성하기

 

File>New>Spring Starter Project

본인의 자바 버전과 맞게 java version을 선택, Pakage명 설정해준뒤 Next

 

 

이렇게 프로젝트를 생성했다면 자료를 불러오기 위한 Dependency 설정이 필요하다.

 

src/main/java 폴더의 pom.xml 파일 열기

 

 

pom.xml
<?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>
		
		<!--추가된 부분 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web/2.6.3 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency>
		
		<!--추가된 부분 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/2.6.3 -->
		<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
		
		<!--추가된 부분 Json library -->
<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>
	      
	      <!-- 추가한 부분 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc/2.6.3 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
	      
	      <!-- 추가한 부분 https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/2.2.2 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>


<!-- 추가한 부분 https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.7 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>

<!-- 추가한 부분 https://mvnrepository.com/artifact/org.mybatis/mybatis/3.5.9 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

<!-- 추가한 부분 https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6/11.2.0.4 -->
<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>

Maven Repository에서 필요한 dependency들을 복사하여 pom에 붙여넣었다.

dependency 출처들은  주석으로 달아 놓았다.

pom에 코드를 붙여넣고 저장하면 필요한 기능들이 자동으로 Maven Dependencies에 저장된다.

 

3. 스프링에 서버 설정 및 오라클 드라이버 연결하기

 

src/main/resources 폴더 안에있는 application.properties 클릭

#port number set
server.port=3000 //서버 포트 번호 설정


#DB set
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver //오라클 드라이버 연결
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe // 오라클 드라이버 url 설정
spring.datasource.username=hr
spring.datasource.password=**********

1.의 과정에서 확인했던Connextion URL을 spring.datasource.url=에 붙여넣는다.

 

4. 웹페이지 구동에 필요한 Dto/Dao/Controller를 구성하기

위의 캡쳐에서 표시한것처럼 기능별로 패키지 나누고 클래스를 만든다. Dao은 클래스 대신 interface로 만든다.

 


 

 

DatabaseConfig.java
package mul.camp.a;

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 arrResource[] = new PathMatchingResourcePatternResolver().getResources("classpath:sqls/*.xml");
		sqlSessionFactoryBean.setMapperLocations(arrResource);
		sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
		
		return (SqlSessionFactory)sqlSessionFactoryBean.getObject();		
	}
	
	@Bean
	public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
	
}

 

 

Sample-1Application.java
package mul.camp.a;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages= "mul.camp.a")
public class Sample01Application {

	public static void main(String[] args) {
		SpringApplication.run(Sample01Application.class, args);
	}

}

 

WebConfig.java
package mul.camp.a;

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) {
	
		registry.addMapping("/**").allowedOrigins("*"); //모든 경로 모든 곳에서 접속 가능하게 설정
	}

}

 

 


Controller

Hellocontroller.java
package mul.camp.a.controller;


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 + ResponsBody -> Restful
public class HelloController {
	
	@Autowired
	MemberService service;
	

	@RequestMapping(value = "/base", method = RequestMethod.GET) //RequestMethod.GET 안적어도 자동으로 GET 설정되긴 한다.
	public String base() {
		System.out.println("HelloContoller base()");
		return "base";
		
	}
	
	@RequestMapping(value = "/connParamGet")
	public String connParamGet(String title) {
		System.out.println("HelloContoller connParamGet()");
		System.out.println("title: "+title);

		return "통신성공";
	}
	
	@RequestMapping(value = "/getMember")
	public MemberDto getMember() {
		System.out.println("HelloContoller getMember()");
		
		MemberDto dto = new MemberDto("abc","123","AAA","aa@naver.com",1);
		return dto;
		
	}
	
	@RequestMapping(value = "/getMemberList")
	public List<MemberDto> getMemberList(){
		System.out.println("HelloContoller getMemberList()");
		
		List<MemberDto> list = new ArrayList<MemberDto>();
		list.add(new MemberDto("abcd","1234","AAA5","a5a@naver.com",1));
		list.add(new MemberDto("3acd","1d234","aAAA5","ava@naver.com",2));
		list.add(new MemberDto("3adcd","1d23z4","aAAzA5","azva@naver.com",2));
		list.add(new MemberDto("ad-cd","1d239z4","aAdAzA5","azdva@naver.com",3));
		
		return list;
	}
	
	@RequestMapping(value="/dbTest")
	public List<MemberDto> dbTest(){
		System.out.println("HelloContoller dbTest()");
		
		List<MemberDto> list = service.allMember();
		
		return list;
	}
	
	
}

 


Dao(Interface)

 

MemberDao.java(Interface)
package mul.camp.a.dao;

import java.util.List;

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

import mul.camp.a.dto.MemberDto;

@Mapper
@Repository
public interface MemberDao {
	
	//반드시 xml에 있는 변수명과 일치해야한다.
	public List<MemberDto> allMember(); 

}

 


Dto

MemberDto.java
package mul.camp.a.dto;

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;
	}
	
	
}

Service

MemberService.java
package mul.camp.a.service;

import java.util.List;

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

import mul.camp.a.dao.MemberDao;
import mul.camp.a.dto.MemberDto;

@Service
@Transactional
public class MemberService {
	
	@Autowired
	MemberDao dao;
	
	public List<MemberDto>allMember(){
		
		return dao.allMember();
		
	}

}

SQL

*쿼리문 입력할 xml 파일 생성하는 방법 new >Other...>Xml files 

<?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>

 

 


웹페이지가 잘 구동되는지 확인해보기

 

우선 SpringBoot 프로젝트를 저장하고 실행버튼(Run) 버튼을 눌러 서버를 활성화 해야한다.

서버 활성화 뒤, 

 

HelloController.java 의 아래코드가 잘 적용되는지 확인해보자

	@RequestMapping(value = "/base", method = RequestMethod.GET) //RequestMethod.GET 안적어도 자동으로 GET 설정되긴 한다.
	public String base() {
		System.out.println("HelloContoller base()");
		return "base";
		
	}

 

 

 

주소창에 /base 입력

결과

 

코드대로 base라는 문자를 잘 리턴해주었다.

 

 

 

컨트롤러에 입력한 코드가 잘 실행되는지 위와 같은 방식으로 확인해보자.

 


 

 

	@RequestMapping(value = "/connParamGet")
	public String connParamGet(String title) {
		System.out.println("HelloContoller connParamGet()");
		System.out.println("title: "+title);

		return "통신성공";
	}


 

 

 

@RequestMapping(value = "/getMember")
	public MemberDto getMember() {
		System.out.println("HelloContoller getMember()");
		
		MemberDto dto = new MemberDto("abc","123","AAA","aa@naver.com",1);
		return dto;
		
	}

 

json viewer라는 크롬 확장 프로그램을 다운받으면 위의 화면과 같이 좀더 가독성이 좋게 보인다.

 


 

@RequestMapping(value = "/getMemberList")
	public List<MemberDto> getMemberList(){
		System.out.println("HelloContoller getMemberList()");
		
		List<MemberDto> list = new ArrayList<MemberDto>();
		list.add(new MemberDto("abcd","1234","AAA5","a5a@naver.com",1));
		list.add(new MemberDto("3acd","1d234","aAAA5","ava@naver.com",2));
		list.add(new MemberDto("3adcd","1d23z4","aAAzA5","azva@naver.com",2));
		list.add(new MemberDto("ad-cd","1d239z4","aAdAzA5","azdva@naver.com",3));
		
		return list;
	}


@RequestMapping(value="/dbTest")
	public List<MemberDto> dbTest(){
		System.out.println("HelloContoller dbTest()");
		
		List<MemberDto> list = service.allMember();
		
		return list; }

기존 오라클에 저장되어있던 Member Table의 자료가 잘 출력된다.

Comments