MyBatis에서 제공하는 mybatis-spring 연동모듈을 이용하여 Mapper Inteface를 스프링 빈으로 주입받아 DB에 접근하는 기술입니다.
실습내용은 TBL_MENU 테이블의 목록을 전체 출력할려고합니다.
파일 목록은 아래와같습니다.
실습에 사용된 테이블은 아래와 같습니다.
Menu 객체를 저장할 파일의 정보는 아래와 같습니다.
Menu.java
package com.memory2.model.vo;
public class Menu {
private int code;
private String name;
private int price;
private int categoryCode;
private String orderableStatus;
public Menu() {
}
public Menu(int code, String name, int price, int categoryCode, String orderableStatus) {
this.code = code;
this.name = name;
this.price = price;
this.categoryCode = categoryCode;
this.orderableStatus = orderableStatus;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCategoryCode() {
return categoryCode;
}
public void setCategoryCode(int categoryCode) {
this.categoryCode = categoryCode;
}
public String getOrderableStatus() {
return orderableStatus;
}
public void setOrderableStatus(String orderableStatus) {
this.orderableStatus = orderableStatus;
}
@Override
public String toString() {
return "Menu [code=" + code + ", name=" + name + ", price=" + price + ", categoryCode=" + categoryCode
+ ", orderableStatus=" + orderableStatus + "]";
}
}
오라클 DB와 연결을 위한 properties 파일은 아래와같습니다.
oracle.dev.driver=oracle.jdbc.driver.OracleDriver
oracle.dev.url=jdbc:oracle:thin:@localhost:1521:xe
oracle.dev.username=mybatis
oracle.dev.password=mybatis
mybatis 설정 xml파일은 아래와같습니다.
mybatis-config.xml
mybatis에설정은 대부분 스프링 기본설정파일에서 진행하는거여서 빈상태입니다!
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
스프링 기본설정 xml파일입니다.
spring-context.xml
기존과 달라진점은 mybatis-spring:sacn 태그입니다.
직접주입하지않고 알아서 찾아주는 상태입니다.
<?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:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.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-4.3.xsd">
<!-- 1. 연결정보 properties 가져오기 -->
<context:property-placeholder location="connection-info.properties"/>
<!-- 2. 커넥션 연결하기 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${oracle.dev.driver}"/>
<property name="url" value="${oracle.dev.url}"/>
<property name="username" value="${oracle.dev.username}"/>
<property name="password" value="${oracle.dev.password}"/>
</bean>
<!-- SqlSessionFactoryBean 연결 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="com/memory2/config/mybatis-config.xml"/>
</bean>
<!-- SqlSessionTemplate 연결 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
</bean>
<!-- 빈 스캔범위 -->
<context:component-scan base-package="com.memory2"/>
<mybatis-spring:scan base-package="com.memory2.model.dao"/>
</beans>
실행에 필요한 Main class 파일입니다.
package com.memory2.run;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.memory2.model.service.MenuService;
import com.memory2.model.vo.Menu;
public class Application {
public static void main(String[] args) {
ApplicationContext context = new GenericXmlApplicationContext("com/memory2/config/spring-context.xml");
MenuService menuService = context.getBean("menuService", MenuService.class);
List<Menu> menuList = menuService.selectMenuList();
for(Menu menu : menuList) {
System.out.println(menu);
}
}
}
MenuService.interface
package com.memory2.model.service;
import java.util.List;
import com.memory2.model.vo.Menu;
public interface MenuService {
List<Menu> selectMenuList();
}
MenuServiceImpl.java
package com.memory2.model.service;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.memory2.model.dao.MenuDao;
import com.memory2.model.vo.Menu;
@Service("menuService")
public class MenuServiceImpl implements MenuService{
SqlSessionTemplate sqlSessionTemplate;
@Autowired
public MenuServiceImpl(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
}
@Override
public List<Menu> selectMenuList() {
return sqlSessionTemplate.getMapper(MenuDao.class).selectMenuList();
}
}
MenuDao.interface
package com.memory2.model.dao;
import java.util.List;
import com.memory2.model.vo.Menu;
public interface MenuDao {
List<Menu> selectMenuList();
}
MenuDao.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.memory2.model.dao.MenuDao">
<resultMap id="menuResultMap" type="com.memory2.model.vo.Menu">
<id property="code" column="MENU_CODE"/>
<result property="name" column="MENU_NAME"/>
<result property="price" column="MENU_PRICE"/>
<result property="categoryCode" column="CATEGORY_CODE"/>
<result property="orderableStatus" column="ORDERABLE_STATUS"/>
</resultMap>
<select id="selectMenuList" resultMap="menuResultMap">
SELECT
MENU_CODE
, MENU_NAME
, MENU_PRICE
, CATEGORY_CODE
, ORDERABLE_STATUS
FROM TBL_MENU
ORDER BY MENU_CODE
</select>
</mapper>
출력화면
'프로그래밍 > Spring' 카테고리의 다른 글
Spring - 11. Transactions AOP (0) | 2021.10.26 |
---|---|
Spring - 10. Transactions (0) | 2021.10.25 |
Spring - 6_2. Spring JDBC (XML) (0) | 2021.10.25 |
Spring - 8. 다국어 메세지 (0) | 2021.10.22 |
Spring - 7. Spring properties (0) | 2021.10.22 |