Spring Legacy 03 (23.05.02)

Jane·2023년 5월 2일
0

IT 수업 정리

목록 보기
116/124

1. 레거시에서 마이바티스 활용

  • 스프링 부트 : 라이브러리를 설치해서 (톰캣 내장 라이브러리) application.properties에 설정을 적어서 활용했다.
  • 스프링 레거시에서 하는 법 : 마이바티스, 히카리CP, 커넥션 풀 등등 라이브러리를 다운받고 설정을 적어준다.

  • pom.xml에 사용할 라이브러리를 적어주고 시작

root-context.html

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- Root Context: defines shared resources visible to all other web components -->
	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName"
			value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
		<property name="jdbcUrl"
			value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe"></property>
		<property name="username" value="scott"></property>
		<property name="password" value="tiger"></property>
	</bean>

	<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
		destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>

	<!-- 1.번 방법을 위하여 mapperLocations 을 추가 함 -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations"
			value="classpath:/mappers/**/*.xml" />
	</bean>

	<!-- 1번 방식 사용을 위한 sqlSession -->
	<bean id="sqlSession"
		class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>

</beans>

1-1. XML 맵핑 방식

  • interface IBDao를 XML namespace에 매핑
  • sqlSession.getMapper(IBDao.class)를 이용.

BoardVO.java

package edu.global.ex.vo;

import java.sql.Timestamp;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class BoardVO {
   private int bid;
   private String bname;
   private String btitle;
   private String bcontent;
   private Timestamp bdate;
   private int bhit;
   private int bgroup;
   private int bstep;
   private int bindent;
}

IBDao.java

package edu.global.ex.board.one;

import java.util.List;

import edu.global.ex.vo.BoardVO;

public interface IBDao {
	public List<BoardVO> listDao();
}

resource > mappers > board1.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="edu.global.ex.board.one.IBDao">
   
   <select id="listDao" resultType="edu.global.ex.vo.BoardVO">
      <![CDATA[
         select * from mvc_board order by bGroup desc, bStep asc
      ]]>
   </select>
   

</mapper>

BController1.java

package edu.global.ex.board.one;

import javax.inject.Inject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class BController1 {

	@Inject
	BService1 bservice;

	@RequestMapping("/list1")
	public String list(Model model) throws Exception {
		System.out.println("list1()");

		model.addAttribute("boards", bservice.selectBoardList());
		return "list";
	}

}

BService1.java

package edu.global.ex.board.one;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;

import edu.global.ex.vo.BoardVO;

@Service
public class BService1 {
   
   @Inject
   private SqlSession sqlSession;
   
    public List<BoardVO> selectBoardList() throws Exception {
       
       IBDao dao = sqlSession.getMapper(IBDao.class);
      
       return dao.listDao();
    }

}

  • 주입 Annotation : @Autowired(스프링에서만 쓸 수 있다고 한다.), @Inject, @Resource
  • 필드 주입, 생성자 주입, 세터 주입

1-2. SQL Session 기반으로 맵핑

  1. interface는 필요가 없음
  2. sqlSession에서 제공하는 함수(selectList, selectOne)를 이용함
  3. 쿼리구현을 위한 XML이 필요. 해당 XML의 namespace는 개발자가가 정함

BService2.java

package edu.global.ex.board.two;

import java.util.List;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;

import edu.global.ex.vo.BoardVO;

@Service
public class BService2 {
   
   @Inject
   SqlSession sqlSession;
   
    public List<BoardVO> selectBoardList() throws Exception {
      return sqlSession.selectList("board.selectBoardList");
    }
}

resource > mappers > board2.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="board">
   
   <select id="selectBoardList" resultType="edu.global.ex.vo.BoardVO">
      <![CDATA[
         select * from mvc_board order by bGroup desc, bStep asc
      ]]>
   </select>
   

</mapper>
  • 1,2번처럼 다이렉트로 SQL 세션을 사용하는 것은 구 버전에서 많이 쓴다.
  • 3,4번은 마이바티스 3부터 제공.

1-3. @Select(쿼리), @Insert(쿼리)

1-4. Mapper 정의

profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글