JDBC를 대체하는 SQL 매핑 프레임워크
SQL을 기반으로 DB와 자바 등의 언어를 연결시켜주는 역할
소스 코드에서 SQL 문장을 분리하여 별도의 XML 파일로 작성한 후 소스 코드와 연결
-> SQL 구문 실행에 필요한 코드의 복잡한 구조 단순화에 사용되는 프레임워크
자동 Connection 객체 close
내부적으로 PreparedStatement 객체 사용한 자동 처리
리턴 타입 지정을 통해 자동으로 해당 타입의 객체 생성 및 ResultSet 객체 등에 대한 처리
파라미터 지정을 통해 SQL 구문에서 사용할 데이터의 전달을 처리
xml 파일 설정
- pom.xml
- root-context.xml
- web.xml
<!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency>
윗 부분에 추가하면 됨
1. 스프링에서 JDBC 연동에 필요한 기능을 제공하는 spring-jdbc 라이브러리
<!-- 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 라이브러리 추가
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>
파일 연 후 아래쪽 탭 중 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"/>
<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 파일 생성
XXXController 클래스
XXXService 객체 자동 주입 설정
-> @Autowired 어노테이션 사용
XXXService 클래스
XXXMapper 객체 자동 주입 설정
-> @Autowired 어노테이션 사용