2022. 12. 15. 13:41ㆍ[Spring]_/[Eclipse]
개요
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
구현하면서 만난 오류사항 정리 다음 포스트 참고
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
2번
Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
https://yn971106.tistory.com/165
참고문헌
https://mybatis.org/mybatis-3/ko/configuration.html
연동과정
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 에 지정한 위치에 두겠다는 의미입니다.
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 과 데이터를 입력해 두었고 해당 데이터가 정상적으로 출력되는 모습입니다.
감사합니다.
'[Spring]_ > [Eclipse]' 카테고리의 다른 글
[Eclipse]_Spring Security Handler 구현 1단계 (로그인 과정 구현) (0) | 2022.12.22 |
---|---|
[Eclipse]_Spring Security Handler 구현 3단계 (로그인 실패 시) (0) | 2022.12.20 |
[eclipse]_spring_security 설치 (0) | 2022.12.12 |
[eclipse]_Spring 설치 및 구현 (0) | 2022.12.09 |
[Eclipse]_Spring 최신 버전 servlet 오류(feat.jakarta error) (0) | 2022.12.09 |