07. Spring_DB 연동(3)

봄학기 요약


요약

– jdbc.properties : 4 JDBC에 대한 정보

– mapper.xml : 기존 myBatis 메소드와 같은 SQL 문을 포함합니다.

– DTO.java: configuration.xml에서 DTO에 대한 별칭을 등록하는 것과 달리 DTO에서는 @Alias로 별칭을 지정한다.

-Dept.xml:

1) jdbc.properties 파일 가져오기

2) 데이터 소스 생성

3) SqlSessionFactoryBean 생성: 기존 configuration.xml과 동일한 역할로 DataSource를 주입하고 mapper.xml 및 DTO에 대한 별칭을 등록합니다.

4) SqlSessionTemplate 생성: SqlSession과 같은 역할을 하는 DAO에서 실제로 사용되는 객체이다.

5) DAO 및 서비스 객체 생성: 각 클래스의 멤버 변수를 자동으로 주입하거나 생성자 또는 setXXX() 메서드를 통해 명시적으로 주입합니다.

– DAO, Service: Service DAO와 DAO SqlSessionTemplate을 멤버변수로 가지는 클래스를 설정한다.
멤버 변수를 자동으로 삽입하려면 @Autowired를 사용하십시오.


1. jdbc.properties

– 기존 jdbc.properties와 동일합니다.

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.userid=scott
jdbc.passwd=tiger

2. DTO.자바

– 접근하고자 하는 테이블의 컬럼명과 동일하게 멤버 변수를 구성하고 해당 DTO의 alias를 annotation을 이용하여 표시한다.

@별칭(“별칭”)

package com.dto;

import org.apache.ibatis.type.Alias;

@Alias("DeptDTO")	//com.dto.DeptDTO -> DeptDTO
public class DeptDTO {
	private int deptno;
	private String dname;
	private String loc;
	public DeptDTO() {
		super();
		// TODO Auto-generated constructor stub
	}
	public DeptDTO(int deptno, String dname, String loc) {
		super();
		this.deptno = deptno;
		this.dname = dname;
		this.loc = loc;
	}
	@Override
	public String toString() {
		return "DeptDTO (deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + ")";
	}
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
	
}

3.dept.xml

– DataSource를 생성하고 SqlSessionFactoryBean에 삽입하고 SqlSessionTemplate에 삽입합니다.

– 메인과 서비스에서 사용할 서비스와 DAO도 빈 객체를 생성합니다.

1) 주석 활성화

– DTO에 별칭을 지정하고 DAO에 자동 주입하는 것과 같은 주석이 필요하므로 설정합니다.

2) 속성 등록 및 빈 DataSource 객체 생성





3) SqlSessionFactoryBean 생성

– 데이터 소스를 삽입합니다.

– mapper.xml을 등록하고 DTO 별칭을 등록합니다.

<bean id="mySqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<!
-- dataSource 지정 --> <property name="dataSource" ref="myDataSource"></property> <!
-- mapper 등록 --> <property name="mapperLocations"> <list> <value>classpath:com/config/DeptMapper.xml</value> </list> </property> <!
-- DTO Alias 설정 --> <property name="typeAliases"> <list> <value>com.dto.DeptDTO</value> </list> </property> </bean>

4.DAO.자바

– 자동으로 SqlSessionTemplate을 멤버 변수로 포함합니다.

공개 클래스 DAO {
@Autowired
SqlSessionTemplate 세션;

}


5. 거래 처리

– 이전 글과 마찬가지로 dept.xml에 transaction manager를 생성하여 등록하고 Service.java에 @Transactional을 설정한다.


– 메인에서 서비스, DAO, mapper.xml까지 나머지 과정은 기존 마이바티스 방식과 동일하다.

https://damii323.36

04. JDBC_MyBatis로 DB 연결

JDBC Lesson Summary 0. MyBatis 패턴 구조 – jdbc.properties: 4가지 정보를 DB에 저장하는 파일이다.
– DeptMapper.xml : Dept 테이블에 접근하여 실행되는 SQL 문장을 저장한 파일. – DTO: 부서 테이블

damii323.tistory.com

– 단, 세션을 닫아야 했던 기존 방식과 달리 SqlSessionTemplate이 자동으로 반환되므로 닫을 필요가 없다.


* 개선

– 또한 DAO와 서비스를 dept.xml에 직접 생성하는 대신 Annotation을 이용하여 자동 객체 생성 및 멤버 변수를 자동 삽입할 수 있다.

– 대신 dept.xml 파일에서 구성요소 스캔을 구성해야 합니다.