spring에서 db 연결 설정을 해보자
db 연결이 안 되면 데이터 주고받기가 안되는데 코드를 열심히 잘 짜도 그게 무슨 소용이야
실컷 로직 다 짜놓고 여기서 설정 한두 가지 놓쳤다가 오류 어디서 나는지 못 찾아서 한 시간을 날린 적이 있다는...(왈칵)
뭐든지 세팅은 꼼꼼하게 잘 해놓고 넘어가자^^;
spring에서 db 연결을 하려면 아래 세 가지 파일을 채워야 한다
mybatis.xml / mapper.xml / root-context.xml
세 파일에 들어가는 내용을 정리해보자면 대략적으로 이렇다
mybatis | mapper | root-context |
- jdbc Null 처리 - vo 클래스에 대한 별칭 지정 - mapper 연결 |
- 데이터를 처리하기 위한 쿼리문 | - bean 등 |
mybatis와 mapper 파일은
상단에 MyBatis 프레임워크에서 사용되는 XML 설정 파일 선언 코드 추가하는 거 잊지 않기로 해
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mybatis.xml 파일 작성
경로 : src/main/resource
1. jdbc Null 처리
2. vo 클래스에 대한 별칭 지정
별칭 지정을 하지 않으면 매번 "com.jd.mvc.model.vo.Member" 이런 긴 경로를 모두 써줘야 한다고
별칭 지정을 해두면 Member 객체를 지칭할때 alias로 지정한 Member만 명시하면 된다
3. mapper 연결
쿼리문을 작성할 mapper 파일을 하나 만들고 해당 경로를 resource로 추가해 주기
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
</settings>
<typeAliases>
<typeAlias type="com.jd.mvc.model.vo.Member" alias="User"/>
</typeAliases>
<mappers>
<mapper resource="mappers/user-mapper.xml" />
</mappers>
</configuration>
개발 중간중간에 단위테스트를 할 때는?
단위테스트란 db에서 system.out.println으로 값이 잘 받아와 지는지 method 하나씩 코드 짜면서 확인해 보는 거라고 생각하면 된다.
단위테스트는 src/test/java 에서 클래스 하나 만들어서 테스트하기!
(단위테스트 하는 방법은 web에서 배웠던 방식으로 했는데 다른 글에서 별도로 정리할 예정)
<environments default="develop">
<environment id="develop">
<transactionManager type="JDBC"/>
<dataSource type="UNPOOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="username" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>
mapper.xml 파일 작성
경로 : src/main/resource/mappers
1. namespace
해당 mapper에 대한 별칭이라고 생각하면 된다.
보통 DAO(Repository)에서 필요한 mapper의 쿼리문을 불러와서 처리를 하는데 mapper가 여러 개일 경우나 mapper이름이 긴 경우에는 매번 쓰기도 귀찮고 구분하기 힘드니까 namespace를 지정해 주도록 하자
근데 namespace 지정 잘해줘 놓고도 DAO에서 대소문자 구분 실수했다가 오류 한 시간 또 잡아본 적 있다...ㅎ
이렇게 하나씩 배워가는 거지~
2. 쿼리문 작성
데이터를 받아와서 처리할 쿼리문들 작성
보통 CRUD에 맞춰 개발하니까 크게는 insert, select, update, delete 이렇게 네 가지!
select 경우에는 전체 목록 조회나 1개 상세 조회 둘 다 필요한데 따로 쓰기보다는 동적쿼리 이용해서 한 번에 작성하면 편함.
oracle에서 생성한 테이블의 컬럼명과 java 언어로 작성한 객체 필드명에는 차이가 있을 수 있다.
보통 oracle에서는 언더바 '_'를 사용해서 user_name 이렇게 쓰는 경우가 많다면 자바는 언더바를 용납(ㅋ)하지 않기 때문에 카멜 표기법을 따라 userName 이런 식으로 쓴다.
이런 경우에는 resultMap을 이용해서 두 명칭을 일치시켜 사용하도록 한다.
<?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="userMapper">
<resultMap type="User" id="userMap">
<id property="userId" column="user_id"/>
<result property="userPwd" column="user_pwd"/>
<result property="userName" column="user_name" />
<result property="userAddr" column="user_addr" />
</resultMap>
<select id=""></select>
...
</mapper>
root-context.xml
경로 : src > main > webapp > WEB-INF > spring
귀여운 커피콩 bean 등록을 해보자
1. Commons DBCP bean
기본 세팅에서 pom.xml 파일에 Commons DBCP 관련 dependency를 추가했었다. 이번엔 bean 등록!
db 연결하듯이 써주면 됨! defaultAutoCommit는 오토커밋 여부
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="" />
<property name="url" value="" />
<property name="username" value="" />
<property name="password" value="" />
<property name="defaultAutoCommit" value="false" />
</bean>
2. SqlSessionFactory bean
configLocation의 value값은 mybatis-config.xml
dataSource의 경로는 위에서 등록한 Commons DBCP bean의 id 기재
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
3. SqlSessionTemplate bean
생성자로 위에서 등록한 SqlSessionFactory bean 연결
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactoryBean"/>
</bean>
'+ > Spring' 카테고리의 다른 글
STS4에서 STS3 플러그인 설치 오류 (Spring Legacy Project 생성) (2) | 2024.05.16 |
---|---|
Spring Lombok @Data @Getter @Setter 인식 인식 오류 해결 (1) | 2024.05.13 |
[springboot] 명령 프롬프트(cmd) 이용하여 빌드하고 실행하기(윈도우) (0) | 2023.09.26 |
[springboot] welcome page 만들기 (0) | 2023.09.23 |
Spring - 기본 세팅하기(1) (0) | 2023.09.15 |