스프링에 JDBC연결하여 TBL_MENU 테이블 목록을 연결하여
이클립스로 목록을 출력할 예정입니다.
사용중인 테이블은 아래와 같습니다.
파일 폴더 목록은 아래와 같습니다.
우선 JDBC연결에 필요한 정보를 properties 파일에 작성합니다.
사용 데이터베이스는 오라클입니다.
connection-info.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
MenuMapper은 전체목록에 필요한 xml을 연결할 파일입니다.
<?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>
<mappers>
<mapper resource="com/memory/xmlconfig/mapper/MenuMapper.xml"/>
</mappers>
</configuration>
스프링 기초 설정및 jdbc작성할 xml을 작성합니다.
spring-context.xml
1. 우선 context 스키마이용하여 저장해둔 커넥션연결정보를가지고 dataSource에 연결합니다.
2. 연결정보가지고 SqlSessionFactory 객체 생성하여 dataSource 객체를 주입합니다.
3. SqlSessionTemplate에 마찬가지로 연결합니다.
아래의 빈 스캔 범위는 폴더상위폴더 를 기준으로 작성하였습니다.
<?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"
xsi:schemaLocation="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. 커넥션 정보 가져오기 -->
<context:property-placeholder location="connection-info.properties"/>
<!-- dataSource 연결 -->
<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}"/>
<property name="defaultAutoCommit" value="false"/>
</bean>
<!-- 2. SqlSessionFactory 생성 -->
<bean id="factoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="ConfigLocation" value="com/memory/xmlconfig/config/mybatis-config.xml"/>
</bean>
<!-- 3. sql 실직적 연결 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="factoryBean"/>
</bean>
<!-- 빈 스캔범위 -->
<context:component-scan base-package="com.memory/xmlconfig"/>
</beans>
기본적인 설정은 끝났습니다.
이제 메뉴 정보를 저장할 Menu class파일을 생성합니다.
Menu.java
package com.memory.xmlconfig.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 + "]";
}
}
실행할 Main 클래스를 생성해줍니다.
Application.java
이 파일에서 MenuService 를 빈으로 받아오고, Service객체 안에 있는 selectMenuList 메소드실행하여 List로 반환받아 출력합니다.
package com.memory.xmlconfig.run;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.memory.xmlconfig.model.service.MenuService;
import com.memory.xmlconfig.model.vo.Menu;
public class Application {
public static void main(String[] args) {
ApplicationContext context = new GenericXmlApplicationContext("com/memory/xmlconfig/config/spring-context.xml");
MenuService menuService = context.getBean("menuService",MenuService.class);
List<Menu> menuList = menuService.selectMenuList();
System.out.println("====== 메뉴 전체 목록 =====");
for(Menu menu : menuList) {
System.out.println(menu);
}
}
}
Main에서 실행하면 Serivce의 메소드를 호출합니다.
interface - class 파일로 이용하였습니다
MenuService.interface
package com.memory.xmlconfig.model.service;
import java.util.List;
import com.memory.xmlconfig.model.vo.Menu;
public interface MenuService {
List<Menu> selectMenuList();
}
MenuServiceImpl.java
우선 Service라는 애너테이션으로 빈으로등록합니다.
그후 Dao와 Template 를 자동주입으로 받아옵니다.
meneDao의 selectMenuSelect 메소드를 호출합니다.
package com.memory.xmlconfig.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.memory.xmlconfig.model.dao.MenuDao;
import com.memory.xmlconfig.model.vo.Menu;
@Service("menuService")
public class MenuServiceImpl implements MenuService{
private MenuDao menuDao;
private SqlSessionTemplate sqlSessionTemplate;
@Autowired
public MenuServiceImpl(MenuDao menuDao, SqlSessionTemplate sqlSessionTemplate) {
this.menuDao = menuDao;
this.sqlSessionTemplate = sqlSessionTemplate;
}
// 1. 메뉴 전체 조회
@Override
public List<Menu> selectMenuList() {
return menuDao.selectMenuList(sqlSessionTemplate);
}
}
menuDao.interface
package com.memory.xmlconfig.model.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import com.memory.xmlconfig.model.vo.Menu;
public interface MenuDao {
List<Menu> selectMenuList(SqlSessionTemplate sqlSessionTemplate);
}
menuDaoImpl.java
전체메뉴조회할때 mybatis의 xml 을 이용할것인데.
설명은 이와같습니다. namespace명.호출할id명
package com.memory.xmlconfig.model.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;
import com.memory.xmlconfig.model.vo.Menu;
@Repository("menuDao")
public class MenuDaoImpl implements MenuDao{
// 1. 메뉴 전체 조회
@Override
public List<Menu> selectMenuList(SqlSessionTemplate sqlSessionTemplate) {
return sqlSessionTemplate.selectList("MenuMapper.selectMenuList");
}
}
MenuMapper.xml
데이터를 불러올 쿼리문을 작성한 xml파일입니다.
resultMap은 테이블의 컬럼과 Menu 객체 필드명과 맞추기위해 사용한 기능입니다.
만약 resultMap을 사용하지않을려면 필드명과 테이블의컬럼명이 똑같아야 됩니다.
개인적으로 resultMap쓰는것이 더욱 가독성 있게 느껴지는것같습니다.
<?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="MenuMapper">
<resultMap id="menuResultMap" type="com.memory.xmlconfig.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 - 10. Transactions (0) | 2021.10.25 |
---|---|
Spring - 9. mapperscan (0) | 2021.10.25 |
Spring - 8. 다국어 메세지 (0) | 2021.10.22 |
Spring - 7. Spring properties (0) | 2021.10.22 |
Spring - 6_1. Spring JDBC (Annotation) (0) | 2021.10.22 |