+/Spring

Spring - 기본 세팅하기(2)

writtenbyrla 2023. 9. 16. 16:11

 

 

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>