Spring - 6_1. Spring JDBC (Annotation)

Mybatis와 Spring Connection 연결하여 작업을해볼려고합니다.

우선 부트를 사용하지않기때문에 사용해야할 jar파일이많습니다.

아래 링크가서 다운받아 넣어주시면됩니다.

 

스프링 기본설정은 애너테이션사용예정이고

Mybatis는 xml으로 쿼리작성예정입니다.

 

Application(main) -> 서비스 - dao 이런식으로 흘러갑니다.

 

우선

ContextConfiguration.class

빈에등록하고, 스캔폴더를 지정하고, 커넥션에필요한 drvier, url, username, password 는 properties에 저장해 사용 하엿습니다.

 

여기서 DataSource, SqlSessionFactory 는 기본설정에 사용되고 실질적으로 사용되는 메소드는 SqlSessionTemplate() 메소드입니다.

 

package com.memory.javaconfig.config;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@ComponentScan("com.memory.javaconfig")
@PropertySource("connection-info.properties")
public class ContextConfiguration {
	// 1. JDBC 연결을위한 property 값 가져오기
	@Value("${oracle.dev.driver}") private String driver;
	@Value("${oracle.dev.url}") private String url;
	@Value("${oracle.dev.username}") private String username;
	@Value("${oracle.dev.password}") private String password;
	
	@Bean(destroyMethod = "close")
	public BasicDataSource dataSource() {
		BasicDataSource dataSource = new BasicDataSource();
		
		dataSource.setDriverClassName(driver);
		dataSource.setUrl(url);
		dataSource.setUsername(username);
		dataSource.setPassword(password);
		
		dataSource.setDefaultAutoCommit(false); // 자동커밋 끄기 
		
		return dataSource;
	}
	
	@Bean
	public SqlSessionFactory sqlSessionFactory(ApplicationContext context) throws Exception {
		SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
		
		// 커넥션 연결
		factoryBean.setDataSource(dataSource());
		
		// mybatis 연결
		factoryBean.setConfigLocation(context.getResource("com/memory/javaconfig/config/mybatis-config.xml"));
		
		return factoryBean.getObject();
	}
	
	@Bean
	public SqlSessionTemplate sqlSessionTemplate(ApplicationContext context) throws Exception {
		return new SqlSessionTemplate(sqlSessionFactory(context));
	}
	
	
}

 

 

Application.java

MenuService 객체는 빈에 등록되어있는 객체를 가져옵니다.

그후 selectMenuList 메소드를 List 타입으로 반환받아 출력합니다.

package com.memory.javaconfig;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.memory.javaconfig.config.ContextConfiguration;

public class Application {

	public static void main(String[] args) {
		
		ApplicationContext context = new AnnotationConfigApplicationContext(ContextConfiguration.class);
		
		// 서비스 객체 가져오기
		MenuService menuService = context.getBean("menuService", MenuService.class);
		
		List<Menu> selectMenuList = menuService.selectMenuList();
		
		System.out.println("===== 전체 메뉴 조회하기 =====");
		for(Menu menu : selectMenuList) {
			System.out.println(menu);
		}

	}

}

 

MenuService.interface

보통스프링 작업할때는 interface의 메소드를 구현하여 많이사용합니다.

package com.memory.javaconfig;

import java.util.List;

public interface MenuService {
	List<Menu> selectMenuList();
}

 

MenuServiceImpl.java

MenuService 인터페이스를 구현합니다.

필드부터 dao와 sqlSession 을 받아옵니다.

sqlSession은 커넥션 연결, 커밋,롤백 역할을 하기위해받아옵니다.

Autowired의 애너테이션이용해 자동주입을합니다.

주의할점으로는 Autowired 주입작업할때 기본생성자는 없이 만들어야합니다.

Dao의 클래스로 sqlSession 와같이 보냅니다.

package com.memory.javaconfig;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("menuService")
public class MenuServiceImpl implements MenuService{
	
	private MenuDao menuDao;
	private SqlSessionTemplate sqlSession;
	
	@Autowired
	public MenuServiceImpl(MenuDao menuDao, SqlSessionTemplate sqlSession) {
		this.menuDao = menuDao;
		this.sqlSession = sqlSession;
	}

	@Override
	public List<Menu> selectMenuList() {
		return menuDao.selectMenuList(sqlSession);
	}

}

 

 

MenuDao

package com.memory.javaconfig;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

public interface MenuDao {
	List<Menu> selectMenuList(SqlSessionTemplate sqlSession);
}

MenuDaoImpl.java

Dao는 실질적으로 데이터베이스의 데이터를 조회하거나 수정하는역할하기때문에

selectList 메소드이용하여 mybatis 사용합니다.

package com.memory.javaconfig;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

@Repository("menuDao")
public class MenuDaoImpl implements MenuDao{

	@Override
	public List<Menu> selectMenuList(SqlSessionTemplate sqlSession) {
		return sqlSession.selectList("MenuMapper.selectMenuList");
	}

}

 

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="MenuMapper">
	<resultMap id="menuResultMap" type="com.memory.javaconfig.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
		  WHERE ORDERABLE_STATUS = 'Y'
		  ORDER BY MENU_CODE
	</select>
</mapper>

 

총 실행화면

 

후기

우선 .. 자동주입이라던가 빈등록해 사용하는방법이 뭔가 ..더어려운느낌입니다..

그냥 편하게 new ~~ 로 객체생성하고싶은데 ..스프링 사용할려면 ..

좀더 연습을많이하고

좀더 배우기전에 ioc,aop, 부분 좀더 공부를 해야할것같습니다.

'프로그래밍 > Spring' 카테고리의 다른 글

Spring - 8. 다국어 메세지  (0) 2021.10.22
Spring - 7. Spring properties  (0) 2021.10.22
Spring - 5. Spring IOC  (0) 2021.10.18
Spring - 4. Spring IOC  (0) 2021.10.15
Spring - 3. Spring 개요  (0) 2021.10.15
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유