ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC - MyBatis XML 설정
    Spring/Spring MVC 2022. 1. 4. 16:46
    728x90
    반응형

    MyBatis XML 설정

    이번엔 XML으로 설정하는 방법을 알아보자

     

    db.properties 생성
    db.classname = oracle.jdbc.OracleDriver
    db.url = jdbc:oracle:thin:@localhost:1521/xepdb1
    db.username = 아이디
    db.password = 비밀번호

     

    Mapper 생성

     Mapper는 쿼리문을 작성하는 파일이다.

     

    mapper.xml               (/WEB-INF/mapper/)

    <?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="test_db">
    	<insert id="insert_data" parameterType="kr.co.beans.DataBean">
    		<![CDATA[
    			insert into spring_mvc_table (data1, data2, data3)
    			values (#{data1}, #{data2}, #{data3}) 
    		]]>
    	</insert>
    	<select id='select_data' resultType="kr.co.beans.DataBean">
    		<![CDATA[
    			select data1, data2, data3 from spring_mvc_table
    		]]>
    	</select>
    </mapper>
    <참고>
    CDATA는 XML 문법 중 하나이다.
    작성 중 특수한 문자들이 들어갈 경우 오류가 발생할 수도 있는데 이를 방지하기 위해 넣어준 것이다.
    빼도 상관없다.

     

     

    ServletAppContext.xml 설정

     

    1. PropertyPlaceholderConfigurer Bean 정의

     db.properties 파일에 작성한 데이터를 XML에서 사용할 수 있도록 Bean을 정의한다.

    	<!-- properties 파일의 내용을 사용할 수 있도록 Bean을 정의한다 -->
    	<beans:bean class='org.springframework.beans.factory.config.PropertyPlaceholderConfigurer'>
    		<beans:property name="location">
    			<beans:value>/WEB-INF/properties/db.properties</beans:value>
    		</beans:property>
    	</beans:bean>

     

    2. BasicDataSource Bean 정의

     데이터베이스 접속 정보를 관리하는 Bean을 정의한다.

    	<beans:bean class='org.apache.commons.dbcp2.BasicDataSource' id='basic_data_source'>
    		<beans:property name='driverClassName' value='${db.classname}'/>
    		<beans:property name="url" value="${db.url}"/>
    		<beans:property name="username" value='${db.username}'/>
    		<beans:property name="password" value='${db.password}'/>
    	</beans:bean>

     

     

    3. SqlSessionFactoryBean Bean 정의

     데이터 베이스 접속 정보와 Mapper 파일을 관리하는 Bean을 정의한다.

    	<beans:bean class='org.mybatis.spring.SqlSessionFactoryBean' id='sqlSession'>
    		<beans:property name="dataSource" ref='basic_data_source'/>
    		<beans:property name="mapperLocations" value='/WEB-INF/mapper/*.xml'/>
    	</beans:bean>

     

    4. SqlSessionTeamplate Bean 정의

     쿼리문을 전달하는 Bean을 정의한다. 이 Bean을 주입받아 필요한 쿼리를 실행하게 된다.

     

    	<beans:bean class='org.mybatis.spring.SqlSessionTemplate' id='sqlSessionTemplate'>
    		<beans:constructor-arg index='0' ref='sqlSession'/>
    	</beans:bean>

     

     

    5. 설정이 끝난 ServletAppContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/mvc"
    			 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    			 xmlns:beans="http://www.springframework.org/schema/beans"
    			 xmlns:context="http://www.springframework.org/schema/context"
    			 xsi:schemaLocation="http://www.springframework.org/schema/mvc
    			 					 http://www.springframework.org/schema/mvc/spring-mvc.xsd
    			 					 http://www.springframework.org/schema/beans
    			 					 http://www.springframework.org/schema/beans/spring-beans.xsd
    			 					 http://www.springframework.org/schema/context
    			 					 http://www.springframework.org/schema/context/spring-context.xsd">
    			 					 
    	<!-- 스캔한 패지키 내부의 클래스 중 Controller 어노테이션을 가지고 있는 클래스들을 Controller로 로딩하도록 한다 -->
    	<annotation-driven/>
    	
    	<!-- 스캔할 bean들이 모여있는 패키지를 지정한다. -->
    	<context:component-scan base-package="kr.co.controller"/>
    	
    	<!-- Controller의 메서드에서 반환하는 문자열 앞 뒤에 붙힐 경로 정보를 셋팅한다. -->
    	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<beans:property name="prefix" value="/WEB-INF/views/"/>
    		<beans:property name="suffix" value=".jsp"/>
    	</beans:bean>
    	
    	<!-- 정적파일(이미지, 사운드, 동영상, JS, CSS 등등) 경로 셋팅 -->
    	<resources mapping="/**" location="/resources/"/>
    	
    	<!-- properties 파일의 내용을 사용할 수 있도록 Bean을 정의한다 -->
    	<beans:bean class='org.springframework.beans.factory.config.PropertyPlaceholderConfigurer'>
    		<beans:property name="location">
    			<beans:value>/WEB-INF/properties/db.properties</beans:value>
    		</beans:property>
    	</beans:bean>
    	
    	<beans:bean class='org.apache.commons.dbcp2.BasicDataSource' id='basic_data_source'>
    		<beans:property name='driverClassName' value='${db.classname}'/>
    		<beans:property name="url" value="${db.url}"/>
    		<beans:property name="username" value='${db.username}'/>
    		<beans:property name="password" value='${db.password}'/>
    	</beans:bean>
    	
    	<beans:bean class='org.mybatis.spring.SqlSessionFactoryBean' id='sqlSession'>
    		<beans:property name="dataSource" ref='basic_data_source'/>
    		<beans:property name="mapperLocations" value='/WEB-INF/mapper/*.xml'/>
    	</beans:bean>
    	
    	<beans:bean class='org.mybatis.spring.SqlSessionTemplate' id='sqlSessionTemplate'>
    		<beans:constructor-arg index='0' ref='sqlSession'/>
    	</beans:bean>
    			 
    </beans:beans>

     

     

    Controller에서 SqlSessionTemplate 주입받아 사용

     

    @Controller
    public class TestController {
    	
    	@Autowired
    	SqlSessionTemplate SqlSessionTemplate;
    	
    	@GetMapping("/input_data")
    	public String input_data() {
    		return "input_data";
    	}
    	
    	@PostMapping("/input_pro")
    	public String input_pro(DataBean dataBean) {
    		
    		SqlSessionTemplate.insert("test_db.insert_data", dataBean);
    		
    		return "input_pro";
    	}
    	
    	@GetMapping("/read_data")
    	public String read_data(Model model) {
    		
    		List<DataBean> list = SqlSessionTemplate.selectList("test_db.select_data");
    		model.addAttribute("list", list);
    		
    		return "read_data";
    		
    	} 
    }
    @Autowired
    SqlSessionTemplate SqlSessionTemplate;
     - mapper.xml에서 정의한 mapper를 사용하기 위해 주입받는다.

    SqlSessionTemplate.insert("test_db.insert_data", dataBean);
    List<DataBean> list = SqlSessionTemplate.selectList("test_db.select_data");
     - 쿼리문 실행

     

    728x90
    반응형

    댓글

Designed by Tistory.