목차
1. DataSource란?
2. DataSouce : Connection Pool 설정
3. MyBatis 란?
4. mybatis 설정 (SqlSession,SqlSessionTemplate,SqlSessionFactoryBean)
5. configuration.xml / mapper.xml
6. SQL 작성


  1. DataSource란?
    : SQL과 DAO를 연결하는 Connection역할
    : DataSource는 SqlSession에 포함되어있다.

애플리케이션과 DB사이의 실제 커넥션을 매번 새롭게 만드는 것(데이터베이스 sql과 jdbc를 연결시키고 끊고 하는 작업)은 비효율적이고 성능저하로 보고, 풀링(pooling)기법을 사용하여 이를 개선
-> 많은 사용자가 동시다발적으로 접근할 경우 속도를 빠르게 해줌
->통신연결선을 끊지 않고 빈선으로 그냥 둔다 (요청이오면 비어있는 선을 연결한다)
->Spring에서는 DataSource를 하나의 독립된 빈으로 등록하도록 강력하게 권장


  1. DataSouce : Connection Pool
    :톰켓을 켜면 pool-connection 준비해준다

datasource도 다른 회사이기 때문에
JDBC드라이버를 설치하고 써야한다.

스프링 JDBC드라이버 다운로드 : pom.xml

<!-- spring jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

오라클 DataSource 설정 : applicationContext.xml

<!-- oracle datasource -->
	<bean id="oracleDatasource"
		class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
		<property name="URL"
			value="jdbc:oracle:thin:@localhost:1521:xe" />
		<property name="user" value="phonedb" />
		<property name="password" value="phonedb" />
		<property name="connectionCachingEnabled" value="true" />
		<qualifier value="main-db" />
	</bean>

특징 :

  • 오라클 id,password 확인 후 넣기 !


3.MyBatis란?
: 쿼리문을 따로빼서 쿼리문 그대로를 사용할 수 있고
dao에 쿼리문이 있는 위치만 써주면 연결되도록
뒤에서는 기존 쿼리문 작성방법 코드가 돌아가는 것


  1. mybatis 설정

개발자가 만든 영역을 어플리케이션이라고 함

*SqlSessionFactoryBean이 oracleDatasource를 품고있있음

mybatis 다운로드 : pom.xml

<!-- MyBatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.2</version>
		</dependency>
		
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.0</version>
		</dependency>

applicationContext.xml : mybatis설정

<!-- MyBatis SqlSessionFactoryBean 설정 -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="oracleDatasource" />
		<property name="configLocation"
			value="classpath:mybatis/configuration.xml" />
	</bean>
	
	<!-- MyBatis SqlSessionTemplate 설정 -->
	<bean id="sqlSession"
		class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>

태그 설명 :
SqlSessionTemplate과 SqlSessionFactoryBean이 연결되어있음
==> 연결되도록 ref로 참조

★주의
configuration.xml 파일이 있어야함
value="classpath:mybatis/configuration.xml"

  1. configuration.xml / mapper.xml
    : configuration.xml => 쿼리문 경로
    : mapper.xml => 쿼리문을 담을 xml

1) configuration.xml 파일 생성
src/main/resources -> mybatis패키지 생성 -> configuration.xml생성

코드 설명: mapper는 쿼리문 xml로 따로빼주고, 경로를 적어준다.
필요한만큼 늘려주는것 실제로 쿼리문을 쓸 애

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
	</typeAliases>
	<mappers>
		<mapper resource="mybatis/mappers/phonebook.xml" />
		<!-- 필요하면 늘려가면서 사용할 수 있음 -->
		<!-- <mapper resource="mybatis/mappers/guestbook.xml" /> -->
	</mappers>
</configuration>

2) mapper.xml 파일 생성
src/main/resource -> mybatis.mappers패키지 생성 -> phonebook.xml(쿼리문 담을 xml)

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="phonebook">
	쿼리문 작성
</mapper>

  1. SQL 작성
    : mybatis 자체내의 쿼리문 메소드 사용할 수 있게 만들어준다.
    xml => 태그 insert, udpate,delete, select

★중요!!
: 쿼리문이 setter명과 동일해야함

DB를 만들때부터 컬럼명을 맞춰주거나 별명을 통해서 setter와 이름을 맞춰줘야 데이터가 들어간다.

  • resultType ="담아줄 경로 그릇하나"
  • parameterType="하나의 파라미터 받아올 그릇"

특징 :

  • 태그안에 쿼리문을 넣는다 ; 빼고 넣음
  • CDATA[쿼리문] : where절 같은 것 쓸때 조건 >, => 등을 태그로 오해할 수 있기때문에 아니라는것을 영역표시해줌
  • insert update delete는 기능만 실행하면 되기때문에 resultType이 없다.단, 데이터를 외부에서 받도록 하는것이 중요
  • 결과물을 내보낼때는 list같은 경우는 resultType
    받아야할 때는 parameterType으로작성
    parameterType="com.javaex.vo.PersonVo" vo로 묶어서 데이터를 보내줌
  • getter로 불러서 찾아서 넣는다
    입력받아야할 컬럼명을 #{}안에 넣어준다
<![CDATA[쿼리문]]>

 <!-- 쿼리문 작성 -->
	<select id="selectList" resultType="com.javaex.vo.PersonVo" >
		<![CDATA[
			select  person_id personId,
	        		name,
	        		hp,
	        		company
			from person
			order by person_id desc
		]]>
	</select>

selectList : 데이터 여러개 (List까지 만들어줌 하나라도 List로옴)
selectOne : row한개 -> 어떠한 경우든 하나 ex) 로그인 사용자

1) select

★파라미터 바인딩

parameterType="int"을 Integer로 하지않고 int로해도 자동으로 알 수 있도록 mapping기능을 넣어둠 따라서 int로 사용 가능


dao

1) 필드에 SqlSession 올리기
@Autowired
private SqlSession sqlSession;

2) sqlSession의 메소드를 사용하여 쿼리문 작동

  • dao에서 꺼내쓸 수 있는 메소드
    : insert, udpate,delete, selectOne, selectList
    selectList, selectOne도 mapper.xml에 select 태그안에 쿼리문을 작성한다.

★데이터를 넣어서 보내줄 경우 (ex: insert)
sqlSession.insert("phonebook.insert",personVo)
쿼리문, 넣어줄 데이터

단! 데이터는 무조건 묶어서 보내줘야한다.
두개의 파라미터로 받아도 무조건 묶어서 보내줘야함

**다오에서 데이터 꺼내기
<mapper namespace="phonebook">.	<select id="selectList">

// 사람 삭제 (데이터 한개 받아올때 )
	public int personDelete(int personId) {
		
		System.out.println("phoneDao.personDelete()실행");
		return sqlSession.delete("phonebook.delete",personId);
		
	}
	//전체 리스트 가져오기
	public List<PersonVo> getPersonList(){
		
		List<PersonVo> personList = sqlSession.selectList("phonebook.selectList");
		System.out.println(personList);

		return personList;
	}
profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

0개의 댓글