[Spring] MyBatis 연동

Gammi·2023년 1월 20일
0

Spring

목록 보기
2/6

✔ MyBatis


  • JDBC를 대체하는 SQL 매핑 프레임워크

  • SQL을 기반으로 DB와 자바 등의 언어를 연결시켜주는 역할

  • 소스 코드에서 SQL 문장을 분리하여 별도의 XML 파일로 작성한 후 소스 코드와 연결

    -> SQL 구문 실행에 필요한 코드의 복잡한 구조 단순화에 사용되는 프레임워크



✔ MyBatis 장점


  • 자동 Connection 객체 close

  • 내부적으로 PreparedStatement 객체 사용한 자동 처리

  • 리턴 타입 지정을 통해 자동으로 해당 타입의 객체 생성 및 ResultSet 객체 등에 대한 처리

  • 파라미터 지정을 통해 SQL 구문에서 사용할 데이터의 전달을 처리





✔ MyBatis를 활용한 데이터베이스 연동 애플리케이션 개발 과정


xml 파일 설정

  • pom.xml
  • root-context.xml
  • web.xml

1. pom.xml 라이브러리 추가


  • JDBC 연동에 필요한 라이브러리 추가
<!-- AspectJ -->
<dependency>
	<groupId>org.aspectj</groupId>
	<artifactId>aspectjrt</artifactId>
	<version>${org.aspectj-version}</version>
</dependency>

윗 부분에 추가하면 됨


1. 스프링에서 JDBC 연동에 필요한 기능을 제공하는 spring-jdbc 라이브러리

  • 기존 스프링 버전(${org.springframe-version}) 그대로 사용
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>${org.springframework-version}</version>
</dependency>



2. MySQL-Connector 추가

<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
	<groupId>com.mysql</groupId>
	<artifactId>mysql-connector-j</artifactId>
	<version>8.0.31</version>
</dependency>



3. HikariCP 라이브러리 추가

  • Tomcat DBCP 대용으로 사용 가능한 커넥션 풀
  • Tomcat DBCP에 비해 가볍고, 빠르고, 안정적인처리 가능
  • mvnrepository.com 대신 https://github.com/brettwooldridge/HikariCP 링크 접속 후 artifacts 부분의 라이브러리 태그 복사해 붙여넣기(Java 11+)
<dependency>
	<groupId>com.zaxxer</groupId>
	<artifactId>HikariCP</artifactId>
	<version>5.0.1</version>
</dependency>	



4. MyBatis 기본 라이브러리 추가

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.11</version>
</dependency>



5. MyBatis - Spring 연동 라이브러리 추가

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>2.1.0</version>
</dependency>



6. JSON 라이브러리 추가

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
	<groupId>org.json</groupId>
	<artifactId>json</artifactId>
	<version>20220924</version>
</dependency>



7. 암호화(해싱)에 사용할 BCryptPasswordEncoder 클래스 활용을 위한 라이브러리 추가

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-web</artifactId>
	<version>5.8.1</version>
</dependency>



8. 파일 처리 라이브러리(commons-io, commons-fileupload) 추가

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.11.0</version>
</dependency>
				
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.4</version>
</dependency>



9. 2.5버전을 4.0.0버전으로 변경

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>



10. 자바 1.6버전을 11버전으로 변경

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>2.5.1</version>
	<configuration>
		<source>11</source>
		<target>11</target>
		<compilerArgument>-Xlint:all</compilerArgument>
		<showWarnings>true</showWarnings>
		<showDeprecation>true</showDeprecation>
	</configuration>
</plugin>




2. root-context.xml 설정


  • 파일 연 후 아래쪽 탭 중 Namespaces 탭 클릭하여 mybatis-spring 체크

  • <beans> 태그 내 아래와 같이 설정



HikariCP 라이브러리 사용을 위한 설정

1. HikariCP를 활용한 DB 접속 정보 설정을 위해 HikariConfig 객체 설정(JDBC 기본 설정)

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
	<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mvc_board3"></property>
	<property name="username" value="root"></property>
	<property name="password" value="1234"></property>
</bean>



2. HikariCP의 DataSource 객체 생성을 위해 HikariConfig 객체 전달

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



3. Connection 객체 생성 및 쿼리 전달, 결과 리턴 등의 작업 수행할 SQLSessionFactory 객체 설정

  • MyBatis와 Spring 연결을 담당하며, 내부적으로 SQLSession 객체를 통해 작업 수행

  • 주의! 이전에 DataSource 객체 설정이 완료되어 있어야 함(아래의 Mapper 정의 참고)

  • 주의! configLocation, mapperLocations 항목을 위해 각각의 파일이 생성되어 있어야 함(아래의 Mapper 정의 참고)

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
	<property name="mapperLocations" value="classpath:/com/itwillbs/mvc_board/mapper/*Mapper.xml"></property>
</bean>



4. MaBatis 연동에 사용될 객체들의 패키지 위치 지정(기본 루트 패키지 지정)

<mybatis-spring:scan base-package="com.itwillbs.mvc_board"/>




3. servlet-context.xml 설정


  • 컨트롤러(@Controller)를 비롯한 어노테이션을 통해 자동 주입될 클래스가 포함되는 패키지 지정
<context:component-scan base-package="com.itwillbs.mvc_board" />
<context:component-scan base-package="com.itwillbs.mvc_board.controller" />
<context:component-scan base-package="com.itwillbs.mvc_board.service" />




Mapper 정의

  • SQL 구문 작성 및 처리 수행
  • 인터페이스 + 어노테이션 사용 또는 XML Mapper 사용 방식으로 나뉨

1. vo 패키지에 XXXVO 클래스 정의

-> XXX : 테이블명 



2. mapper 패키지에 XXXMapper 인터페이스 정의

-> XXX : 테이블명



3. src/main/resources - com.itwillbs.mvc_board.mapper 패키지 생성 및 XXXMapper.xml 파일 생성





✔ 객체 자동 주입 설정


  • 어노테이션을 사용하여 객체 자동 주입하기

  1. XXXController 클래스

    • XXXService 객체 자동 주입 설정

      -> @Autowired 어노테이션 사용



  1. XXXService 클래스

    • XXXMapper 객체 자동 주입 설정

      -> @Autowired 어노테이션 사용

profile
개발자가 되었어요⭐️

0개의 댓글