일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Spring
- JSR - 303
- collection framework
- DDL TRUNCATE
- properties 파일 주입
- properties 변수
- Spring MVC Interceptor
- 자바 List
- 스프링 파라미터 추출
- DDL DROP
- Spring 객체로 주입받기
- 자바스크립트
- ddl alter
- 자바
- JSR - 380
- Spring 커맨드 객체
- Servlet cookie
- 오라클 DROP
- 자바오류
- 코드로 배우는 스프링 웹 프로젝트
- Spring MVC5 기본 세팅
- 오라클 CREATE
- 오라클 TRUNCATE
- annotation
- 스프링 인터셉터
- Mybatis 오류
- Dependency Injection
- properties 파일
- Spring Cookie
- Spring message
- Today
- Total
개발이좋아
[Spring MVC] Spring MVC 프로젝트에 Mybatis 연동 (Java 설정, Xml 설정) 본문
Mybatis는 자바에서 데이터베이스 연동을 위한 JDBC 프로그래밍을 쉽게 할 수 있게 해주는 라이브러리이다.
Spring에서 Mybatis를 이용하기 위해서는 라이브러리를 추가해주어야 한다.
1. 라이브러리 세팅
1) 데이터베이스 드라이브 jar 파일
(오라클 DBMS 드라이버)
2) Spring jdbc (https://mvnrepository.com/artifact/org.springframework/spring-jdbc)
3) dbcp2 (https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2)
4) mybatis (https://mvnrepository.com/artifact/org.mybatis/mybatis)
5) mybatis-spring (https://mvnrepository.com/artifact/org.mybatis/mybatis-spring)
※ 1번 데이터베이스 드라이브의 경우 사용하는 DBMS마다 상이하므로 해당 DMBS의 드라이버 jar파일을 세팅해준다.
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
위 코드는 위에 목록에서 설명한 라이브러리들을 pom.xml 파일에 추가한 코드이다.
오라클에 경우 메이븐을 이용한 라이브러리 세팅이 가끔 오류를 일으키니 데이터베이스 드라이버 jar 파일을 프로젝트 내의 WEB-INF 폴더에 lib 폴더를 만들어 드라이버 jar파일을 추가해준다.
2. 데이터베이스 연동을 위한 properties 파일 작성
properties 파일은 프로젝트에서 절대 변하지 않는 값을 설정할 때 편하게 사용할 수 있는 파일이다.
예를 들어 데이터베이스 접속 정보 관리, 다국어 처리 등에 쓰이며 jsp파일에서도 사용할 수 있다.
[Web개발/Spring] - [Spring] properties 파일 내용을 변수에 주입하기 (@PropertySource, @PropertySources, @Value)
properties 파일에는 프로젝트에서 사용하는 데이터베이스에 접속 정보를 기입해준다.
이 정보는 DMBS마다 상이하며 본 포스팅에서는 오라클의 접속 정보를 기입해주었다.
WEB-INF 폴더에 properties 폴더를 만들어 그 안에 db.properties 파일을 만들어준다.
properties 파일에 데이터베이스 접속 정보를 기입해준다.
접속 정보는 오라클 설정에 따라 변할 수 있으므로 본인의 설정에 맞추어 작성한다.
url에는 ip와 포트 넘버, 리스너 버전을 기입해주고, username에는 오라클에서 사용하는 사용자 아이디를 password에는 username에 작성한 사용자 아이디에 맞는 비밀번호를 기입한다.
3. Mapper 파일 만들기
Mapper 파일에는 실제로 로직에서 사용할 sql문을 작성한다.
이는 Java 설정과 xml 설정이 서로 상이하므로 프로젝트에서 사용하는 설정에 따라 따로 작성한다.
1) Java 설정을 이용하는 프로젝트인 경우
Java 설정을 이용하는 경우 Mapper 파일을 인터페이스 파일로 생성해주면 되고 xml설정과는 다르게 따로 설정을 해줄 필요가 없다.
public interface MapperInterface {
@Insert("insert into spring_mvc_table(data1, data2, data3) values(#{data1}, #{data2}, #{data3})")
void insert_data(DataBean bean);
@Select("select * from spring_mvc_table")
List<DataBean> select_data();
}
위 코드와 같이 sql문은 @Insert, @Select, @Delete, @Update와 같은 어노테이션을 이용하여 작성한다.
메서드에는 sql문의 실행결과를 반환할 데이터 형을 사용하여 메서드를 작성해준다.
해당 Mapper 파일은 보통 DAO 파일에서 주입받아 사용하게 된다.
2) Xml 설정을 이용하는 프로젝트인 경우
Xml 설정을 이용하는 경우 Mapper 파일을 xml파일로 작성한다. 이때 <! DOCTYPE> 태그에 mybatis 설정을 해주어야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- mybatis 설정 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- sql 작성부 -->
<mapper namespace="test_db">
<insert id="insert_data" parameterType="매개변수 타입">
<![CDATA[
insert into spring_mvc_table(data1, data2, data3)
values(#{data1}, #{data2}, #{data3})
]]>
</insert>
<select id="select_data" resultType="반환 타입">
<![CDATA[
select * from spring_mvc_table
]]>
</select>
</mapper>
<mapper> 태그에는 namespace 설정을 해주어야 하는데 namespace 속성의 값은 dao파일 등에서 mapper 파일에 sql문을 실행할 때 실행할 sql문을 찾기 위해 사용되는 값이다.
sql문 작성은 <insert>, <select> <update>, <delete> 등의 태그를 이용하여 작성하며 각 태그들은 데이터베이스에 insert, select, update, delete 문법과 대응되는 태그들이다.
태그의 속성에 id값은 <mapper>태그의 namespace 속성과 함께 사용되며, 특정 sql문 찾아서 사용하기 위해 작성해주는 속성이고 , parameterType 속성은 해당 mapper의 sql문을 실행시키는 메서드의 베개 변수의 타입을 작성해주고,
resultType은 해당 mapper 파일의 sql문을 실행시키는 메서드가 반환하는 타입으로 설정해준다.
만약 sql문을 실행시키는 메서드의 매개변수가 int타입이라면 java.lang.Integer를 설정해주고 메서드가 반환하는 타입이 String타입 이라면 java.lang.String으로 설정해준다.
해당 mapper파일은 보통 dao파일에서 sqlSessionTemplate 객체를 주입받아 사용하게 된다.
4. 데이터베이스 접속 설정
데이터베이스 접속 설정 또한 Java 설정파일을 이용하는 프로젝트와 Xml설정 파일을 이용하는 프로젝트에 따라 설정 방법이 다르므로 해당 프로젝트에 맞는 설정 방법을 이용하도록 한다.
1) Java 설정 파일을 이용하는 데이터베이스 접속 설정
Java 설정 파일을 이용하는 경우 BaiscDataSource(다른 DataSource 객체도 사용가능) 객체와 SqlSessionFactory Bean 객체, Mapper Bean 객체를 이용하여 설정한다.
// Spring MVC 프로젝트에 관련된 설정을 하는 클래스
@Configuration
// Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다.
@EnableWebMvc
// 스캔할 패키지를 지정한다.
@ComponentScan("스캔할 패키지 이름")
// properties 파일의 내용을 주입받기 위한 설정(properties 파일의 위치를 작성)
@PropertySource("/WEB-INF/properties/db.properties")
public class ServletAppContext implements WebMvcConfigurer{
// properties 파일의 내용을 주입받는다.
@Value("${db.classname}")
private String db_classname;
// properties 파일의 내용을 주입받는다.
@Value("${db.url}")
private String db_url;
// properties 파일의 내용을 주입받는다.
@Value("${db.username}")
private String db_username;
// properties 파일의 내용을 주입받는다.
@Value("${db.password}")
private String db_password;
// 데이터베이스 접속 정보 관리
@Bean
public BasicDataSource dataSource() {
BasicDataSource source = new BasicDataSource();
// @Value 어노테이션으로 주입받은 변수를 세팅
source.setDriverClassName(db_classname);
// @Value 어노테이션으로 주입받은 변수를 세팅
source.setUrl(db_url);
// @Value 어노테이션으로 주입받은 변수를 세팅
source.setUsername(db_username);
// @Value 어노테이션으로 주입받은 변수를 세팅
source.setPassword(db_password);
return source;
}
// 쿼리문과 접속 관리하는 객체
@Bean
public SqlSessionFactory factory(BasicDataSource source) throws Exception{
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(source);
SqlSessionFactory factory = factoryBean.getObject();
return factory;
}
// 쿼리문 실행을 위한 객체
@Bean
// MapperFactoryBean의 제네릭에는 Mapper 인터페이스 파일로 설정해준다,
public MapperFactoryBean<MapperInterface> test_mapper(SqlSessionFactory factory) throws Exception {
MapperFactoryBean<MapperInterface> factoryBean = new MapperFactoryBean<>(MapperInterface.class);
factoryBean.setSqlSessionFactory(factory);
return factoryBean;
}
}
@PropertySource 어노테이션을 이용하여 properties 파일의 내용을 주입받을 수있도록 설정한 후 @Value 어노테이션을 이용하여 위에서 작성한 properties 파일의 데이터베이스 접속 정보 내용을 주입받는다.
BasicDataSource 객체는 데이터베이스 접속정보를 관리하는 객체로 위에서 properties 파일의 내용을 주입받은 변수들을 각각의 메서드에 세팅해준다.
SqlSessionFactory 객체는 쿼리문과 접속을 관리하는 객체로 매개변수로 위에서 작성한 BasicDataSource 객체를 주입받는다.
MapperFactoryBean 객체는 쿼리문을 실행하기 위해 필요한 객체로 제네릭은 Mapper 인터페이스 파일로 설정해준다.
MapperFactoryBean 객체는 사용한는 Mapper 인터페이스 파일의 수대로 만들어주면 된다.
쿼리문을 실행할 때는 해당 Mapper 인터페이스 파일을 dao 파일 등에서 주입받으면 Mapper 인터페이스에 작성한 메서드를 이용하여 sql문을 실행시킬 수 있다.
2) Xml 설정 파일을 이용하는 데이터베이스 접속 설정
Xml 설정 파일을 이용하는 프로젝트인 경우 Xml 설정 파일에 데이터베이스 접속을 위한 설정을 해준다.
PropertyPlaceholderConfigurer Bean과 BasicDataSource Bean, SqlSessionFactoryBean Bean, SqlSessionTemplate을
이용하여 접속 설정을 해준다.
<!-- Properties 파일의 내용을 사용할 수 있도록 Bean을 정의 -->
<beans:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<beans:property name="location" value="/WEB-INF/properties/db.properties" />
</beans:bean>
<!-- 데이터베이스 접속 정보를 관리하는 Bean -->
<beans:bean class="org.apache.commons.dbcp2.BasicDataSource" id="basic_data_source">
<beans:property name="driverClassName" value="${db.classname}" />
<beans:property name="url" value="${db.url}" />
<beans:property name="username" value="${db.username}" />
<beans:property name="password" value="${db.password}" />
</beans:bean>
<beans:bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSession">
<beans:property name="dataSource" ref="basic_data_source" />
<beans:property name="mapperLocations" value="/WEB-INF/mapper/*.xml" />
</beans:bean>
<beans:bean class="org.mybatis.spring.SqlSessionTemplate" id="sqlSessionTemplate">
<beans:constructor-arg index="0" ref="sqlSession" />
</beans:bean>
PropertyPlaceholderConfigurer Bean은 properties 파일의 내용을 사용할 수 있도록 해주는 객체로 name 속성에는 location을 value 속성에는 properties 파일의 위치를 작성해준다.
만약 properties 파일이 여러 개라면 name 속성을 locations로 해주고 <list>와 <value> 태그를 이용하여 여러 properties 파일의 위치를 작성해준다.
BasicDataSource Bean은 데이터베이스 접속정보를 관리하기 위한 객체로 각각 name 속성에 맞추어 properties 파일의 작성한 이름들을 세팅해준다.
SqlSessionFactoryBean Bean은 데이터베이스 접속 정보와 Mapper 파일을 관리하기 위한 객체로 각각 name 속성에 맞추어 위에서 작성한 BasicDataSource의 아이디와 Mapper 파일이 있는 위치를 작성해준다.
SqlSessionTemplate Bean은 쿼리문을 실행하기 위한 객체로 <constructor> 태그에 위에서 작성한 SqlSessionFactoryBean의 bean을 주입받는다.
xml 설정을 이용하는 경우 sql문을 실행하려면 dao파일등에서 sqlSessionTemplate Bean을 주입받아서 sql문을 실행시킬 수 있다.
본 포스팅은 필자가 공부한 내용을 정리한 포스팅으로 오류가 존재할 수 있습니다.
참고 : 인프런 - 만들면서 배우는 Spring MVC5
'Web개발 > Spring' 카테고리의 다른 글
[책 리뷰] 코드로 배우는 스프링 웹 프로젝트 (개정판) By 구멍가게 코딩단 (0) | 2020.05.05 |
---|---|
[Spring MVC] 프로젝트 설정 방법에 따른 Mybatis sql 실행법 (0) | 2020.04.08 |
[Spring MVC] Spring MVC에서 쿠키(Cookie) 사용하기 (0) | 2020.04.06 |
[Spring] properties 파일 내용을 변수에 주입하기 (@PropertySource, @PropertySources, @Value) (0) | 2020.04.02 |
[Spring] JSR - 303, JSR- 380 유효성 검사 Annotation (0) | 2020.04.01 |