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 |