목차
1. DataSource란?
2. DataSouce : Connection Pool 설정
3. MyBatis 란?
4. mybatis 설정 (SqlSession,SqlSessionTemplate,SqlSessionFactoryBean)
5. configuration.xml / mapper.xml
6. SQL 작성
- DataSource란?
: SQL과 DAO를 연결하는 Connection역할
: DataSource는 SqlSession에 포함되어있다.
애플리케이션과 DB사이의 실제 커넥션을 매번 새롭게 만드는 것(데이터베이스 sql과 jdbc를 연결시키고 끊고 하는 작업)은 비효율적이고 성능저하로 보고, 풀링(pooling)기법을 사용하여 이를 개선
-> 많은 사용자가 동시다발적으로 접근할 경우 속도를 빠르게 해줌
->통신연결선을 끊지 않고 빈선으로 그냥 둔다 (요청이오면 비어있는 선을 연결한다)
->Spring에서는 DataSource를 하나의 독립된 빈으로 등록하도록 강력하게 권장
- 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>
특징 :
3.MyBatis란?
: 쿼리문을 따로빼서 쿼리문 그대로를 사용할 수 있고
dao에 쿼리문이 있는 위치만 써주면 연결되도록
뒤에서는 기존 쿼리문 작성방법 코드가 돌아가는 것
- 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"
- 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>
- SQL 작성
: mybatis 자체내의 쿼리문 메소드 사용할 수 있게 만들어준다.
xml => 태그 insert, udpate,delete, select
★중요!!
: 쿼리문이 setter명과 동일해야함
DB를 만들때부터 컬럼명을 맞춰주거나 별명을 통해서 setter와 이름을 맞춰줘야 데이터가 들어간다.
특징 :
<![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의 메소드를 사용하여 쿼리문 작동
★데이터를 넣어서 보내줄 경우 (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;
}