[Spring]_Oracle 연결 & Mapper 연동 ( Error 정리)

2022. 12. 15. 13:41[Spring]_/[Eclipse]

728x90
반응형

개요

Intellij를 사용하다가 다음 프로젝트가 Eclipse 환경으로 인해

Eclipse 에 spring 최신버전을 설치하였고

Oracle 연동 및 Mapper 환경 구현

 

환경 

Eclipse 최신버전 2022-09 (4.25.0)

Tomcat - 10.0.23  v

maven Artifact ID : maven-archetype-webapp 1.4v

Spring 6.0.2 ver

Spring Security 6.0.0 ver

spring-jdbc : 6.0.2 ver

mybatis : 3.5.11ver

mybatis-spring : 3.0.1ver

 

특이사항

하위 포스트의 후속내용입니다.

https://yn971106.tistory.com/163

 

[eclipse]_spring_security 설치

개요 Intellij를 사용하다가 다음 프로젝트가 Eclipse 환경으로 인해 Eclipse 에 spring 최신버전을 설치하였고 SpringSecurity 를 설치 하는 과정 설명 환경 Eclipse 최신버전 2022-09 (4.25.0) Tomcat - 10.0.23 v maven Ar

yn971106.tistory.com

 

구현하면서 만난 오류사항 정리 다음 포스트 참고

1번

No qualifying bean of type 'com.yoon.menu.service.impl.menuMapper' available: expected at least 1 bean which qualifies as autowire candidate

https://yn971106.tistory.com/164

 

No qualifying bean of type '...' available: expected at least 1 bean which qualifies as autowire candidate

환경 Eclipse 최신버전 2022-09 (4.25.0) Tomcat - 10.0.23 v maven Artifact ID : maven-archetype-webapp 1.4v Spring 6.0.2 ver Spring Security 6.0.0 ver spring-jdbc : 6.0.2 ver mybatis : 3.5.11ver mybatis-spring : 3.0.1ver eclipse-maven spring 프로젝

yn971106.tistory.com

2번 

Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

https://yn971106.tistory.com/165

 

Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

환경 Eclipse 최신버전 2022-09 (4.25.0) Tomcat - 10.0.23 v maven Artifact ID : maven-archetype-webapp 1.4v Spring 6.0.2 ver Spring Security 6.0.0 ver spring-jdbc : 6.0.2 ver mybatis : 3.5.11ver mybatis-spring : 3.0.1ver eclipse-maven spring 프로젝

yn971106.tistory.com

참고문헌

https://mybatis.org/mybatis-3/ko/configuration.html

 

MyBatis – 마이바티스 3 | 매퍼 설정

매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할

mybatis.org


연동과정

1.pom.xml 에 Dependency 추가

<!--mabatis-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>3.0.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>6.0.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>6.0.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.9.0</version>
</dependency>


<!-- oracle -->
        <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc10 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc10</artifactId>
    <version>19.17.0.0</version>
</dependency>

mybatis

spring-mybatis

jdbc

dbcp2

spring-tx

을 설치합니다.


2. web.xml 부분 확인

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/*Context.xml</param-value>
</context-param>

저의 경우에 context 설정파일을 한곳에 몰았고

해당 경로의 Context 로 끝나는 xml 을 읽도록 하였습니다.


3. contextConfigLocation 경로에 xml 파일 생성

 

dataSourceContext -> sqlSessionFactroy 빈 등록 및 mapper 에 관한 설정

jdbcContext -> Oracle 연결 설정

 

설정파일 위치


4. jdbcContext.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
		<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
		<property name="username" value="C##yoon"/>
		<property name="password" value="qwer1234"/>
	</bean>
	
	
	
</beans>

url 의 경우 설치하신 DB 의 주소를 입력해 주시고

등록하신 계정의 정보를 username 과 password 에 넣어주시면 됩니다.


5. dataSourceContext.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
  xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
       
       <!-- <mybatis-spring:scan base-package="com.yoon.**" /> -->
<!--         -->

       <mybatis:scan base-package="com.yoon.mapper"  lazy-initialization="true" />

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation"  value="classpath:/sqlmap/config/sql-mapper-config.xml"></property>
        <property name="mapperLocations"  value="classpath:/sqlmap/mapper/*.xml"></property>
    </bean>
           


       </beans>

mybatis-spring:scan -> mapper interface 가 위치할 곳을 지정합니다.

 

여기서 sqlSessionFactory 의 이름으로 bean 을 등록하게 됩니다.

이는 mybatis 가 DB 에 연결하는 정보를 담는 객체를 생성하게 됩니다.

 

이들은 dataSource -> 이전 jdbcContext.xml 에서 Oracle 연동 정보를 dataSource 라는 id의 빈으로 등록하였고 이를 여기서 사용하여 Oracle 접속정보를 가져오게 됩니다.

 

configLocation -> Mapper 에 설정할 정보는 value 에 지정한 경로의 파일에 지정하겠다는 의미입니다.

mapperLocations -> Mapper.xml (쿼리가 들어있는 xml 파일) 의 위치는 value 에 지정한 위치에 두겠다는 의미입니다.

config 파일과 xml 의 위치


6. 간단한 Spring MVC 구조로 테스트 하기

Controller 생성

package com.yoon.menu.controller;


import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.yoon.menu.service.MenuService;

import jakarta.annotation.Resource;


@Controller
public class MenuController {
	
	
	@Resource
	private MenuService menuService;
	
	// 메인메뉴 1
	@RequestMapping(value="/menu1", method=RequestMethod.GET)
	@ResponseBody
    public ModelAndView urlTest() throws SQLException {
        System.out.println("Testhere");
        
        ModelAndView model = new ModelAndView();
        
        
        List<Map<String,String>> result = menuService.menuTest();
       
        System.out.println(result);
        model.setViewName("/menu/menu1");
        
        
        return model;    // JSP 경로
    }
	
	
	
}

service

package com.yoon.menu.service;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;


public interface MenuService {
	
	
	public List<Map<String,String>> menuTest() throws SQLException; 
	
	
}

ServiceImpl

package com.yoon.menu.service.impl;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.yoon.mapper.MenuMapper;
import com.yoon.menu.service.MenuService;

import jakarta.annotation.Resource;


@Service
public class MenuServiceImpl implements MenuService{

	@Resource
	private MenuMapper menuMapper;

	@Override
	public List<Map<String,String>> menuTest() throws SQLException {
		// TODO Auto-generated method stub
		List<Map<String,String>> result = menuMapper.menuTest();
		
		System.out.println("tetet");
		System.out.println(result);
		return result;
	}
	
	
	

}

Mapper Interface

package com.yoon.mapper;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;



@Mapper
public interface MenuMapper {

	public List<Map<String,String>> menuTest() throws SQLException;
	
}

MenuMapper.xml

<?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="com.yoon.mapper.MenuMapper">

	<select id="menuTest"  resultType="HashMap">
		select 
		*
		from user_info_manager
	</select>

</mapper>

전체 디렉토리 구조

 

미리 DB 에 table 과 데이터를 입력해 두었고 해당 데이터가 정상적으로 출력되는 모습입니다.

감사합니다.

728x90
반응형